はじめに
同僚が使っていない Raspberry Pi 4 を貸してくれるということで、いよいよ Nerves デビューかと思い、やってみました
@torifukukaiou さんの記事を参考に L チカ(LED をチカチカ光らせる)まで実行できたので、手順を記事に残します
Nerves Livebook を利用します
Nerves とは
Nerves は Elixir の IoT デバイス向けプラットフォームです
Elixir の知識さえあればすぐに IoT を始められます
ホストマシン
MacBook Pro 13-inch
macOS 14.5
利用するデバイス
Raspberry Pi 4 Model B
基盤に書いてあった FCC ID で確認しました
準備
fwup のインストール
ファームウェアを micro SD に書き込むため、 fwup をインストールします
brew install fwup
WiFi 情報の確認
ホストマシンが接続している WiFi の SSID とパスワードを控えておきます
ファームウェアの書込
ファームウェアのダウンロード
Nerves Livebook のリリースページから対象デバイス用の .fw
ファイルをダウンロードします
Raspberry Pi 4 の場合は nerves_livebook_rpi4.fw
です
microSD の挿入
ホストマシンに microSD を差し込みます
私の場合はホストマシンにポートがないため、変換アダプタを使用しました
書込の実行
以下のコマンドを実行します
ダウンロードした .fw
ファイルが ~/Downloads
にある場合のコマンドです
sudo NERVES_WIFI_SSID='<WiFiのSSIS>' NERVES_WIFI_PASSPHRASE='<WiFiのパスワード>' \
fwup ~/Downloads/nerves_livebook_rpi4.fw
WiFiの接続情報を渡しておくことで、 Raspberry Pi 起動時に自動的に WiFi に接続してくれます
以下のようなメッセージが表示された場合、 y
を入力します
Use 15.93 GB memory card found at /dev/rdisk2? [y/N]
書込が完了するのを待ちます
100% [====================================] 58.41 MB in / 68.85 MB out
Success!
Elapsed time: 2.837 s
Raspberry Pi への接続
microSD カードの差込
書き込んだ microSD カードをホストマシンから引き抜き、 Raspberry Pi に差し込みます
電源の接続
Raspberry Pi の電源を入れます
この時点で Raspberry Pi 上で Livebook が起動されます
Livebook への接続
ブラウザで nerves.local
にアクセスします
パスワードを求められるので nerves
と入力し、 Authenticate ->
ボタンをクリックします
認証できれば、 Raspberry Pi 上で動作している Livebook に接続できます
L チカの実行
Welcome to Nerves Livebook のカードをクリックします
開いたノートブックの中から LEDs
のリンクをクリックします
L チカ用のノートブックが表示されます
以下のコードを実行します
led_base_path = "/sys/class/leds"
File.ls!(led_base_path)
実行結果として、 Raspberry Pi で利用可能な LED の一覧が表示されます
["ACT", "PWR", "mmc0::"]
次のセル内の "led0"
の部分を "ACT"
に変更します
ACT の LED (黄緑色)が以後のセルで使われることになります
led = Path.join(led_base_path, "ACT")
実行結果
"/sys/class/leds/ACT"
LED の状態をリセットします
ACT の LED は点灯状態だったのが消灯状態になります
File.write(Path.join(led, "trigger"), "none")
File.write(Path.join(led, "brightness"), "0")
LED のディレクトリー配下にあるファイル一覧を取得します
File.ls!(led)
実行結果
["uevent", "brightness", "power", "device", "trigger", "subsystem", "max_brightness"]
このうち brightness
ファイルに 1
を書き込むことで、 LED を点灯させます
File.write(Path.join(led, "brightness"), "1")
brightness
ファイルに 0
を書き込むことで、 LED を消灯させます
File.write(Path.join(led, "brightness"), "0")
trigger
に timer
を書込み、 delay_on
と delay_off
に 250
を書込みます
これにより、 250 ms 間隔で LED が点滅します
File.write(Path.join(led, "trigger"), "timer")
File.write(Path.join(led, "delay_on"), "250")
File.write(Path.join(led, "delay_off"), "250")
trigger
に none
を書込み、リセットします
File.write(Path.join(led, "trigger"), "none")
File.read!(Path.join(led, "trigger"))
none
を書き込んだ状態で trigger
を読み込むと、他に設定可能なトリガーの一覧が表示されます
"[none] rfkill-any rfkill-none timer oneshot heartbeat backlight gpio cpu cpu0 cpu1 cpu2 cpu3 default-on transient input panic pattern mmc1 mmc0 rfkill0\n"
まとめ
Livebook から Raspberry Pi の LED を操作することができました
色々参照しながらでも 30 分程度で L チカまで辿り着きました
Nerves を使うことで、簡単に IoT 体験ができます
次に何をするかは色々な記事を見て検討します