10
0

はじめに

Rspberry Pi 4 で PWM を実行するため、 Nerves Livebook に Pigpiox を追加します

カスタマイズ手順は README にも書いてあります

PWM の利用頻度が高いため、様々な記事から参照しやすいよう、「Nerves Livebook でパッシブブザーを演奏しドレミの歌を奏でる」の記事から独立させました

PWM とは

Pulse Width Modulation = パルス幅変調

電力の ON と OFF を交互に繰り返し、 ON になっている期間と OFF になっている期間の割合を調整することで、出力される電力を制御します

@mnishiguchi さんの記事で分かりやすく解説しています

以下の記事で PWM を使用しています

背景

Pigpiox があれば簡単に PWM を実行できます

サンプルコードも公開されています

しかし、デフォルトの Raspberry Pi 4 用 Nerves Livebook ファームウェアには Pigpiox が含まれていません

Nerves Livebook にインストールされているモジュール

Raspberry Pi 0 〜 3 の場合は Nerves Livebook のファームウェアが Pigpiox インストール済のものになっています

しかし、 Raspberry Pi 4 では Pigpiox がインストールされていません

以下の箇所を参照することで、どのファームウェアに何がインストールされているか確認できます

...
  @rpi_targets [:rpi, :rpi0, :rpi2, :rpi3, :rpi3a, :rpi4, :rpi0_2, :rpi5]
  @all_targets @rpi_targets ++
                 [:bbb, :osd32mp1, :x86_64, :npi_imx6ull, :grisp2, :mangopi_mq_pro]

  # Libraries that use MMAL on the Raspberry Pi won't work with the Raspberry
  # Pi 4. The Raspberry Pi 4 uses DRM and libcamera.
  @rpi_mmal_targets [:rpi, :rpi0, :rpi2, :rpi3, :rpi3a]
...
      {:pigpiox, "~> 0.1", targets: @rpi_mmal_targets},
...

targets@rpi_mmal_targets となっており、 @rpi_mmal_targets には :rpi4 が含まれていません

PWM 対応ピン

Raspberry Pi 4 であっても GPIO12 と GPIO13 は PWM に対応しています

そのため、 Pigpiox をインストールした上で GPIO12 または GPIO13 を指定すれば PWM が実行できます

それ以外のピンを指定した場合は以下のエラーが返ってきます

{:error, :not_hpwm_gpio}

Nerves Livebook の Mix.install 未サポート

Nerves Livebook は Mix.install をサポートしていないため、 必要なモジュールはファームウェアに書き込む時点でインストール済にしておく必要があります

Nerves Livebook 上で Mix.install を実行すると以下のようなエラーが出ます

** (RuntimeError) Mix.install/2 is not supported on Nerves Livebook (yet!).

All is not lost, but you will have to rebuild the Nerves Livebook firmware.
Go to https://github.com/nerves-livebook/nerves_livebook and clone the repository.
Add :pigpiox to the dependencies listed in the `mix.exs` file, build,
and then try again.

Nerves Livebook のカスタマイズ手順

Nerves Livebook のクローン

GitHub からソースコードを取得します

git clone https://github.com/nerves-livebook/nerves_livebook.git
cd nerves_livebook

ビルド環境の構築

ルートディレクトリーにある .tool-versions で Erlang と Elixir のバージョンを指定しています

erlang 26.2.5
elixir 1.16.3-otp-26

asdf を使用している場合、以下のコマンドを実行すれば簡単にインストール可能です

asdf install

Nerves.Bootstrap も必要になるのでインストールしておきます

mix archive.install hex nerves_bootstrap

SquashFS も mix burn で要求されるためインストールします

brew install squashfs

依存モジュールの編集

mix.exs の以下の箇所を編集します

-     {:pigpiox, "~> 0.1", targets: @rpi_mmal_targets},
+     {:pigpiox, "~> 0.1", targets: @all_targets},

ファームウェアのビルド

デバイスと環境を指定します

export MIX_TARGET=rpi4
export MIX_ENV=prod

依存モジュールを取得します

mix deps.get

ファームウェアをビルドします

mix firmware

SD カードへのファームウェア書込み

WiFi の接続情報を指定して SD カードにファームウェアを書き込みます

NERVES_WIFI_SSID='<WiFi の SSID>' NERVES_WIFI_PASSPHRASE='<WiFi の パスワード>' mix burn

まとめ

これで Pigpiox 入りの Nerves Livebook が出来ました

あとはこれまでと同じく、 SD カードを Raspberry Pi に差し込んで起動し、ブラウザから nerves.local にアクセスするだけです

10
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
0