はじめに
この記事は、#NervesJP Advent Calendar 2019 の20日目です。
昨日は @Shintaro_Hosoai さんのAtomVMでM5Stack向けのデバドラを書いてみるでした。
- もうElixirに決めた!という人向けです。
- そもそもIoTでElixirを使う理由を探している方は、@kikuyutaさんのElixir を使うようになった経緯 〜電力システム制御の現場から〜をおすすめします。
- Nerves Trainingを受けて、「で」Nervesの使い所って?となった方はご一読ください。
- 環境構築やコーディングには一切触れません。
Elixir Advent Calendar 2019の記事はこちら
・Elixir Circuitsを使用してLEDを操作する
お役立ちリンク
- Nerves公式
- とりあえず始めるなら getting-started
- とりあえずやってみるにはelixir schoolのNervesのページ
- gitの方が詳しく書かれています Nerves Project :github
- 例えば、Nervesのnetworkの設定は、nerves_networkを見ると幸せになれます。
Nervesとは
#NervesJP Advent Calendar 2019より
「Nerves」は,関数型言語ElixirによるIoT開発フレームワークです。
RaspberryPiなどのIoTボード上で動作する最小構成のLinuxブートローダ+Elixir実行環境+各種デバドラのパッケージセットで,Elixir × IoTの文脈で最も活発なプロジェクトです。
を意訳すると
- BEAM VM上で直接動くBuildroot(組込Linux)派生のLinuxで動作します。
- 主だったデバイス上でElixirの実行環境がすぐに作れます。(そこまでの道のりは無視)
-
サポートされているターゲットとシステムはこちら
- 新しいターゲットハードウェアに採用することも可能ですがBuildrootが対象のハードウェアをサポートしている必要があります。しかもカスタマイズは難易度が高そうだ。。
- きっとこのあたりを使う。nerves/artifact.ex:github
- IoTの開発にモダンな開発手法を取り入れるにはNervesを採用すると良いよ。
Nervesでなにができるの?
イミュータブルな環境の構築
- イミュータブルなデータ構造です(Elixirが)。
ファイルシステムはイミュータブルです。
環境のコード化
- NervesはBuildrootをベースに各ハードウェア用のtoolchain(コンパイラやドライバ)を組み込んだArtifactを元にベースのイメージが作成されます。しかもこれがmix nerves.new hogeでサクッと作れる。
- mix.exsへの追記やネットワーク、環境の変更、アプリケーションの変更は全てコードに記述します。
ネットワークデプロイの機能
- Nervesはネットワーク経由のデプロイが可能です。
- NervesHubを使用しホストからNervesHubにpushしたソースを、ネットワーク経由でグループ単位にデプロイすることが可能です。
- ハードウェアでの認証鍵(NervesKey)など、セキュアな環境が構築できます。
運用を想定したモダンなIoT開発ができるフレームワーク それが 「Nerves」です。
どうですか、そろそろNervesをやりたくなったでしょ? |>Nervesを導入するには
@nishiuchikazuma さんの記事でElixirの環境構築
ElixirでラズパイのLEDをチカ〜RaspbianOSインストールから〜
@takasehideki さんの記事でNervesの環境構築
ElixirでIoT#4.1:Nerves開発環境の準備(2019年12月版)
合わせて以下を参考にするととりあえずできます。
getting-started
elixir schoolのNervesのページ
まとめ結局Nervesってどうよ
Elixirの可能性+IoT開発にモダンな開発手法を取り入れるのにとても良いフレームワークです。
ただし、新しいハードへの展開、artifactを自分で作るにはハードルがありそうです。
いまからやっておくと幸せかも。
明日の#NervesJP Advent Calendar 2019 21日目の記事は、 @myasu さんのElixir Circuits I2CでLチカです。こちらもお楽しみに!