はじめに
Elixirを使ってIoT開発を行う場合、用途やデバイスに応じて選べるプラットフォームが複数あります。
代表的なのは次の3つです:
-
AtomVM:
ESP32などの小型マイコン向け。
極小メモリで動作する軽量なErlang VM実装で、OS無しで直接マイコン上でElixirを実行します。 -
Nerves:
Raspberry Piなどのシングルボードコンピュータ向け。
Elixirに特化した組込みLinux環境(Buildrootベースの組み込みLinux)上でBEAMを動かすプラットフォーム。 -
Raspberry Pi OS:
汎用Linuxディストリビューション(Debian系)上にElixirをインストールして利用する方法。
フル機能のOS環境でElixirが動きます。
プラットフォーム比較
AtomVM | Nerves | Raspberry Pi OS | |
---|---|---|---|
対応デバイス | ESP32など | Raspberry Pi など | Raspberry Pi など |
OS | なし(RTOS) | Buildrootベースの組み込みLinux | Debian Linux |
イメージサイズ | 0.5–4 MB | 30–60 MB | 400 MB 以上 |
電池駆動 | ◎ 長期駆動可 | ▲ 常時給電推奨 | ▲ 常時給電推奨 |
OTA更新 | ✕ 未対応 | ◎ 標準対応 | ✕ 未対応 |
価格(参考) | 約 500〜1,000 円 | 約 4,000〜10,000 円 | 約 4,000〜10,000 円 |
- OTA(Over-The-Air)更新: 無線 / ネットワーク経由でファームウェアをアップデートする仕組み。
Elixir/Erlang VMの利点
- 軽量プロセスとメッセージパッシングによる並行処理。数万の並行プロセスを難なく生成可能。
- プリエンプティブなスケジューリングで実行が偏らず、リアルタイム性が求められる処理でも遅延が少ない。
- 共有メモリやロックを使わない安全な並行モデル。スレッド同期不具合と無縁。
- ガーベジコレクションに対応し、メモリ管理の負担が少ない。長時間稼働でもメモリリークしにくい。
- 優れた通信処理やタイマ制御の標準ライブラリ。分散ノード間通信や遅延評価などIoT通信に強い。
- 障害に強い設計(自己復旧)。一部プロセスが異常終了してもシステム全体が落ちにくい。
以上の特徴から、並行センサー処理やリアルタイム制御、高信頼な常時稼働システムに向いており、ElixirがIoT開発者にとって魅力的な選択肢となることがわかります。
Nerves
特徴
- Linux上でElixirが動作
- SSHでリモート開発・デバッグが可能
- 小型で堅牢なLinuxファームウェアが構築可能
やってみる
AtomVM
特徴
- 数百KiBのマイコンでElixirが動く
- 起動が高速、リアルタイム制御に向く
- GPIO, SPI, I2C, UARTなどを直接操作可能
やってみる
おわりに
Elixirは、幅広いIoTデバイスで活用できます。
みんなそれぞれいいですね!
プロジェクトの要件に応じて使い分けましょう。