LoginSignup
10
8

ElixirとNervesでRaspberry Piを氣樂に試す

Last updated at Posted at 2024-02-07

はじめに

ElixirNervesRaspberry Piを氣樂にやってみましょう!

とりあえずRaspberry Piを買ってみたものの、何から始めていいのか分からず戸惑ってしまう方もいらっしゃると思います。僕もそうでした。

Raspberry Piは汎用コンピュータなので、いろんな方々が多様な形で楽しんでいます。選択肢が多いだけに決断ができないと何も始まりません。

僕はたまたま Elixirプログラミングが大好きだったので、迷わず ElixirNervesRaspberry Piを樂しむことにしました。

ElixirNervesRaspberry Piと聞くと一般に世の中に出回っているRaspberry Pi関連の情報にはあまり登場しないので、一見怖そうに見えるかもしれません。

しかしながら、Nervesは、オープンソース自由ソフトウェアプロジェクトであり、Nerves コアチームのメンバーが実際に本番環境で使用しているので、その知見に基づいたおススメの設定や開発環境が漏れなく手に入るという点で大変コスパが良いと言えます。初見のプログラマーや組み込み技術者でも最低限の設定やコーディングで高度な組み込みシステムの構築ができてしまいます。

また、組み込みシステムの構築だけに特化されているので、そこに集中して取り組めます。

特にElixirプログラミング言語をやったことがある人はすぐにでも取り掛かれるでしょうし、まだElixirを試したことがない方にとっても、ElixirErlang 仮想マシン (BEAM)について知る良い機会になると信じています。

さらに最近は、Nerves Livebookという予めビルドされたファームウェアが公開されているので、それをダウンロードしてmicroSD カードに焼くだけで簡単に氣樂にNervesを樂しめるようになりました。Livebook のノートブック上でコードを実際に実行しながら進められるので、ブラウザーで快適に 楽しくNerves を学べます。

Nerves(なあぶす)とは

構成要素 説明
基盤 Erlang 仮想マシン (BEAM)を直接起動する、最小限の Linux
枠組 開発を効率よく行うための便利な関数を備えた Elixir モジュール
道具 ビルドの管理、ファームウェア の更新、デバイスの構成などを行うためのコマンドラインツール

Qiita でも検索してみてください。

本や動画もあります。

是非お気軽に Nerves JP コミュニティーにお立ち寄りください!

英語が大丈夫な方には英語のコミュニティもあります。

Nerves Livebook とは

Nerves Livebookを使用すると、何も構築せずに実際のハードウェアで Nerves プロジェクトを試すことができます。
Livebook のノートブック上でコードを実際に実行しながら進められるので、ブラウザーで快適に 楽しくNerves を学べます。例えば、ブラウザ上でターゲットデバイスの Wi-Fi の設定ができます。

用語

用語 定義
母艦マシン(host) ソースコードの編集、ファームウェア のコンパイル、組立を行うコンピュータ
ターゲット(target) ファームウェア を構築する対象の機種 (例、Raspberry Pi Zero W、Raspberry Pi 4、Beaglebone Black など)
ツールチェーン(toolchain) コンパイラ、リンカー、binutils、C ランタイムなど、ターゲットのコードを構築するために必要なツール
システム(system) 特定のターゲット向けにカスタマイズおよびクロスコンパイルされた、無駄のない Buildroot ベースの Linux ディストリビューション
ファームウェアバンドル(firmware bundle) ファームウェア を焼くために必要なものすべてを含む単一のファイル
ファームウェアイメージ(firmware image) ファームウェアバンドル から構築される。パーティションテーブル、パーティション、ブートローダなどがここに含まれる。

最小要件

USB ケーブルには見た目では分かりにくいですが、色んな種類(充電用、データ転送用など)があります。うまくいかない場合は、ケーブルを取り替えるだけで解決する場合があります。

コネクタの形状も多数存在します。お使いのデバイスのコネクタに合うものを入手してください。

母艦マシン

Nerves は、主に、macOS および様々な Linux ディストリビューション で使用されています。
Windows ユーザーの場合、仮想機械Linux を実行したり、Linux 用 Windows サブシステムを使用したりして環境構築します。

Nerves Livebook の準備

有志の方々が Nerves Livebook のセットアップ方法ついてのビデオやコラムを制作してくださっています。ありがとうございます。

fwup をインストール

fwup は、ファームウェアイメージをmicroSD カードに焼いたりするのに使うコマンドラインユーティリティです。

母艦マシン の OS によりインストール方法が異なるので、ドキュメントをご参照ください。

ファームウェアイメージをダウンロード

まずはNerves Livebook Releasesページで、お手持ちのターゲットデバイスに対応するファームウェアイメージ(.fwファイル)をダウンロードします。例として、ターゲットがRaspberry Pi 4の場合にはnerves_livebook_rpi4.fwをダウンロードします。

ファームウェアを microSD カードに焼く

ターゲットデバイス向けのファームウェアはデバイスに差し込まれたmicroSD カードから起動します。今からそのmicroSD カードを準備します。

先ほどダウンロードしたファームウェアイメージの存在するディレクトリに移動し、fwup を使用してファームウェアをmicroSD カードに焼きます。

母艦マシンのターミナル
fwup nerves_livebook_rpi4.fw
出力の例
Use 15.84 GB memory card found at /dev/rdisk2? [y/N] y
Depending on your OS, you'll likely be asked to authenticate this action. Go ahead and do so.

|====================================| 100% (31.81 / 31.81) MB
Success!
Elapsed time: 3.595 s

fwupを実行するとmicroSD カードがフォーマットされ、microSD カード上のすべてのデータが失われますのでご注意ください。

環境変数NERVES_WIFI_SSIDNERVES_WIFI_SSIDをセットすることにより、前もって WiFi 認証情報も一緒に microSD カードに書き込んでおくことができます。

ターゲットデバイスへの接続方法

ターゲットデバイスへの接続方法は複数考えられます。

お使いのターゲットデバイスによりサポートされている接続方法が異なります。

Nerves System Gadget Mode UART Ethernet Wi-Fi
Raspberry Pi Zero rpi0 x x
Raspberry Pi Zero W rpi0 x
Raspberry Pi Zero 2 W rpi3a x
Raspberry Pi 3 Model B rpi3 x
Raspberry Pi 4 Model B rpi4
BeagleBone-based boards bbb ✓ (機種により USB WiFi ドングルが必要)
MangoPi MQ Pro mangopi_mq_pro x

Wi-Fi での接続がうまくいかない事態に備え、他の通信方法ができるよう準備しておくと良いです。

USB ガジェットモードに対応しているデバイスをご使用の場合は、USB ケーブルを電源供給とネットワークの両方に利用できます。USB On-The-Go (OTG)ポートに接続するよう注意してください。

ファームウェアを起動

microSD カードをターゲットデバイスに挿入します。そしてデバイスの電源を入れます。

ノートブックを保存するためのデータファイルシステムを初期化するため、最初の起動はその後の起動よりも時間がかかることがあります。 特に大きな microSD カードで顕著です。

サポートされているほとんどのデバイスには LED が付いています。 Nerves Livebook では、ネットワークが切断されると点滅し、ネットワーク インターフェイス経由で接続できる場合は点灯に変わります。

ブラウザで Nerves Livebook にアクセス

デバイスの準備ができたら、ブラウザで http://nerves.local にアクセスします。 パスワードはnervesです。

同一のネットワーク上で複数の Nerves デバイスをご使用の場合はhttp://nerves.localの代わりに、http://nerves-<シリアル番号の下四桁localをお試しください。シリアル番号は、以下コマンドで入手できます。

NervesのIEx
cmd("boardid")
NervesのIEx
Nerves.Runtime.KV.get("nerves_serial_number")

ファームウェアをmicroSD カードに焼く時点で環境変数NERVES_SERIAL_NUMBERに任意のシリアルナンバーを指定することもできます。

:tada::tada::tada:

後は、Nerves Livebookを樂しむだけです。

例えば、ノートブック上でWi-Fiの設定をしてみてはいかがでしょうか。

戸惑うことがあっても大丈夫です。コミュニティの仲間と一緒に樂しみましょうよ。

:tada::tada::tada:

さいごに一言

本記事は 闘魂 Elixir #67 の成果です。ありがとうございます。

toukon-qiita-macbook_20230912_091808.jpg

10
8
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
8