SlideShare a Scribd company logo
とにかく動かす Nerves マシン
〜ホストは Mac で〜
Elixir/Nerves入門!
堅牢なIoT Edgeデバイスプログラミングを
お手軽に
2020.07.10 菊池豊 高知工科大学 1
私の歴史
• 1997 学校法人高知工科大学
– 現:高知県公立大学法人 高知工科大学
• 2004 有限会社ナインレイヤーズ
– 西日本エリアで専用回線を提供します
• 2011 高知小水力利用推進協議会
– 現:一般社団法人小水力協議会
• 2019 合同会社クラウドグリッド
– 小水力発電のコンサルティング会社
2020.07.10 菊池豊 高知工科大学 2
東北大震災
再エネ法
2011.03.11
twitter: @kikuyuta
qiita: @kikuyuta
email: yu@kikuken.org
渓流取水の発電所(フランシス145kW)
2020.07.10 菊池豊 高知工科大学 3
砂防堰堤の発電所(カプラン 49.9kW)
2020.07.10 菊池豊 高知工科大学 4
敷地内湧水の発電所(ペルトン 19.9kW)
2020.07.10 菊池豊 高知工科大学 5
制御で関わるヒト達の垣根を取り払いたい
2020.07.10 菊池豊 高知工科大学 6
盤のヒト
ハードのヒト ソフトのヒト
Python は辛い… Elixir に行き着く…
• 並行・並列プログラミング関数型言語
– アクターモデルによる並行性(プロセスとメッセージ)
• プロセス(OSのプロセスと異なる軽量スレッド)
– 1CPUで数十万プロセスも可能
– 1プロセスあたり3kB程度のメモリ使用
• 耐障害性
– アプリ停止なしの障害時プロセス再起動
– プロセスのホットスワップ可能
• 元々は電話交換システム用(1986〜)
– にできた Erlang の上に乗ってる
• 詳しい経緯はこちらの記事を
– https://qiita.com/kikuyuta/items/96c3f91a850e9274b0e9
2020.07.10 菊池豊 高知工科大学 8
Nerves: Elixir の IoT フレームワーク
• Elixir の環境に連続する IoT 開発環境が利用可能
• 基本的な I/O アクセス手法を提供
• ターゲット用に 12MB〜 のファームウェアを生成
• ターゲットHW: Raspberry Pi, BeagleBone, x86_64
• Apache 2.0
2020.07.10 菊池豊 高知工科大学 9
とにかく手を動かしてみよう 1
• Erlang / Elixir をインストール
– brew でもできるけど、できれば asdf が良い
• Nerves が Elixir のバージョンアップを後追いするため
• https://qiita.com/nishiuchikazuma/items/b9d319732ddb540fd990
– 手元で確認するとこんな感じ
2020.07.10 菊池豊 高知工科大学 10
$ asdf current
elixir 1.10.3-otp-22 (set by /Users/yu/.tool-versions)
erlang 23.0.1 (set by /Users/yu/.tool-versions)
とにかく手を動かしてみよう 2
• Nerves の作業ディレクトリを作成して仕込みます
– mix nerves.new hogehoge
– cd hogehoge
– export MIX_TARGET=rpi0
• これはラズパイ0の場合 ↑
• rpi3(ラズパイ3B)や bbb(BeagleBone系)なども指定可能
– mix deps.get
– mix firmware
• ここまでできれば準備オケ
2020.07.10 菊池豊 高知工科大学 11
とにかく手を動かしてみよう 3
• 必要なライブラリの記述
– ./mix.exs に追加
• 以下は GPIO 制御用のライブラリを追加する場合
2020.07.10 菊池豊 高知工科大学 12
$ /usr/bin/vi mix.exs
...
defp deps do
[
# Dependencies for all targets
{:circuits_gpio, "~> 0.4"},
...
とにかく手を動かしてみよう 4
• ネットワーク関係の設定
– ssh で入れるようにすると大変便利
– $HOME/.ssh/config を変更するなど
• 私は id_nerves_rsa として別に鍵ファイルを用意しています
2020.07.10 菊池豊 高知工科大学 13
$ /usr/bin/vi ~/.ssh/config
...
# for Nerves
Host nerves.local
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
IdentityFile ~/.ssh/id_rsa
...
とにかく手を動かしてみよう 5
• ファームウェアを焼く
– mix firmware # ファームウェアをクロスコンパイル
– SDカードを準備
• ホストマシンの USBソケットにSDアダプタを挿す
• そこにSDカードを挿す(SDHCタイプの16GBぐらいにしとけ)
– mix burn
• 一応、焼く先のデバイスがUSBの先であることを確認
– じゃないとホストOSを上書きするかもしれない(経験はないが…)
2020.07.10 菊池豊 高知工科大学 14
とにかく手を動かしてみよう 6
• ターゲットマシンを起動する
– 焼いたSDカードをターゲットデバイスに挿す
– USBケーブルで電源供給開始
• 通信できないケーブルが(経験上)過半数なので注意!!
– ブートしてくるのを待つ
2020.07.10 菊池豊 高知工科大学 15
とにかく手を動かしてみよう 7
• 動作チェック
– iex が出てきたら、それが Elixir の REPL だ
2020.07.10 菊池豊 高知工科大学 16
$ ping nerves.local
PING nerves.local (172.31.118.229): 56 data bytes
64 bytes from 172.31.118.229: icmp_seq=0 ttl=64 time=0.815 ms
64 bytes from 172.31.118.229: icmp_seq=1 ttl=64 time=0.801 ms
64 bytes from 172.31.118.229: icmp_seq=2 ttl=64 time=0.711 ms
^C
$ ssh nerves.local
Interactive Elixir (1.10.3) - press Ctrl+C to exit (type h() ENTER for help)
...
iex(1)> 1 + 2
3
iex(2)>
とにかく手を動かしてみよう 8
• ターゲットから一旦 ssh を抜ける時
• ターゲットを停止する時
2020.07.10 菊池豊 高知工科大学 17
iex(1)> exit
$
iex(1)> System.stop
:ok
iex(2)> Received disconnect from 172.31.118.229 port 22:11: Terminated (shutdown) by supervisor
Disconnected from 172.31.118.229 port 22
$
とにかく手を動かしてみよう 9
• ラズパイに LED を装填
– 今回は GPIO 18 へ
• 回路図は100Ωだけど写真は330Ω
2020.07.10 菊池豊 高知工科大学 18
出典:https://github.com/elixir-circuits/circuits_gpio
とにかく手を動かしてみよう 10
• ついにLチカ
– GPIO 18 をオープンして、1 と 0 とを順に書き込んでみる
2020.07.10 菊池豊 高知工科大学 19
$ ssh nerves.local
...
iex(1)> {:ok, ref} = Circuits.GPIO.open(18, :output)
{:ok, #Reference<0.4220564217.268566531.77799>}
iex(2)> Circuits.GPIO.write(ref, 1)
:ok
iex(3)> Circuits.GPIO.write(ref, 0)
:ok
iex(4)>
とにかく手を動かしてみよう 11
• 点いた!
2020.07.10 菊池豊 高知工科大学 20
とにかく手を動かしてみよう 12
• 次からはSDカードの抜き差しは不要
– mix firmware.gen.script
• これを実行すると upload.sh というコマンドスクリプトができる
• ssh でファームウェアアップデートをする
– ホストマシンでプログラムを編集して…
– mix firmware でクロスコンパイルして…
– ./upload.sh すると…
2020.07.10 菊池豊 高知工科大学 21
とにかく手を動かしてみよう 13
• …すると別パーティションにファームウェアをロードして…
• …新しいファームウェアでリブートしてくる…
• これは便利!
2020.07.10 菊池豊 高知工科大学 22
$ mix firmware
...
$ ./upload.sh
...
fwup: Upgrading partition B
100% [====================================] 31.74 MB in / 33.84 MB out
Success!
Elapsed time: 18.811 s
Rebooting...
$
いごいてるのがパーティションAの場合は、
パーティションBに書き込む
参考文献
• 本家
– https://www.nerves-project.org
– https://hexdocs.pm/nerves/getting-started.html
– https://github.com/nerves-project
• kochi.ex (高知のElixirコミュニティ)
– https://kochi-ex.connpass.com
– https://qiita.com/organizations/kochi-ex
– はじめてNerves(0) ElixirによるIoTフレームワークNervesがとに
かく動くようになるためのリンク集
• https://qiita.com/kikuyuta/items/9dee85c32004c8e827e7
2020.07.10 菊池豊 高知工科大学 23
宣伝 2020.07.17 (fri) 夜
• 高知組み込み会 #5
– 「ロボットシステムのつくりかた」
– と題して ROS2 の入門編を
…高瀬先生と三宅さんが…
やります!
– オンライン配信予定
• https://kochi-embedded-meeting.connpass.com/event/169398/
2020.07.10 菊池豊 高知工科大学 24

More Related Content

PPTX
太陽電池のデバイスモデリング
PDF
Using Elixir for Factory Automation - how to execute ladder logic
PPT
集積回路工学第2・第13回資料
PDF
クラウドと組込との接点を求めて (Searching for a meet point between clouds and embedded systems)
PDF
長野にある小水力発電所は Elixir & Nerves え動いているってご存知でしたか?
PDF
Elixir とか組込みとか (On Elixir and embedded systems)
PDF
IoTハンズオン資料(おうちハック)配布用
PDF
ICTSC8 Backboneの紹介
太陽電池のデバイスモデリング
Using Elixir for Factory Automation - how to execute ladder logic
集積回路工学第2・第13回資料
クラウドと組込との接点を求めて (Searching for a meet point between clouds and embedded systems)
長野にある小水力発電所は Elixir & Nerves え動いているってご存知でしたか?
Elixir とか組込みとか (On Elixir and embedded systems)
IoTハンズオン資料(おうちハック)配布用
ICTSC8 Backboneの紹介

Similar to Anyway folks! Let's get started with your Nerves machines. (17)

PPTX
Windowsの節電 .NETラボ勉強会 2011/4/23
PDF
20140628 自主製作mtg 資料
PDF
#kochiex がなんかええもん つくったらしい回
PDF
デバイスごとにアドレスとAPIを 〜プロトタイプを Elixir/Nerves で〜
PDF
2016年12月21日 AITCシニア技術者勉強会 第2回「センサに反応する総天然色イルミネーションを作ってみよう!」
PDF
Esp8266でラジコン基板
PDF
JAWSUG 20180413
PDF
自宅ラックとやらについてちょっと考えてみた
PDF
第4回 kochi.ex オン・オフラインミーティング
PPTX
LTspice超入門 マルツエレック marutsuelec
PDF
IIJ Technical DAY 2019 ~ IIJのサーバインフラはここまでやっています
 
PDF
Adk study Boot Camp #2 Mogri
PDF
katagaitaictf7_hw_ysk
PDF
Imaocande LT
PDF
20180427 arXivtimes 勉強会: Cascade R-CNN: Delving into High Quality Object Det...
PDF
リアル ピカチュー つくろうぜ!.pdf
PPTX
20180704 soracom discovery_ug#11
Windowsの節電 .NETラボ勉強会 2011/4/23
20140628 自主製作mtg 資料
#kochiex がなんかええもん つくったらしい回
デバイスごとにアドレスとAPIを 〜プロトタイプを Elixir/Nerves で〜
2016年12月21日 AITCシニア技術者勉強会 第2回「センサに反応する総天然色イルミネーションを作ってみよう!」
Esp8266でラジコン基板
JAWSUG 20180413
自宅ラックとやらについてちょっと考えてみた
第4回 kochi.ex オン・オフラインミーティング
LTspice超入門 マルツエレック marutsuelec
IIJ Technical DAY 2019 ~ IIJのサーバインフラはここまでやっています
 
Adk study Boot Camp #2 Mogri
katagaitaictf7_hw_ysk
Imaocande LT
20180427 arXivtimes 勉強会: Cascade R-CNN: Delving into High Quality Object Det...
リアル ピカチュー つくろうぜ!.pdf
20180704 soracom discovery_ug#11
Ad

More from Yutaka Kikuchi (20)

PDF
再生可能エネルギー入門 (An introduction to renewable energy)
PDF
大学研究室レベルでLocal 5Gを導入するための手法の考察
PDF
Local 5G の設備ってどんなん
PDF
小水力発電所制御の中身見せます
PDF
産業用途に利用するのにElixirが向いているぞ
PDF
びよんどプロジェクト
PDF
Applying Elixir to FA: A Study of Small Hydropower Palnt Systems
PDF
Should I talk about Logger or Process Registries?
PDF
スケールセンシティブ 〜里山工学を理論付ける〜
PDF
ルーティング最新動向 〜4バイトAS〜
PDF
FA関連技術のオープンソース化計画
PDF
RICC PIoT Workshop ハンズオン
PDF
IoT小箱で小水力発電所を制御する
PDF
Small hydro power plant systems with multi vender method
PDF
Exineris Project by kochi.ex
PDF
Modernization of Factory Automation with Elixir based systems and communities
PDF
小水力発電で地域と世界の未来づくり
PDF
To shorten the distance between ladders and clouds
PDF
旧畑山発電所 2019.04.13 の記録
PDF
小水力発電による地域活性化
再生可能エネルギー入門 (An introduction to renewable energy)
大学研究室レベルでLocal 5Gを導入するための手法の考察
Local 5G の設備ってどんなん
小水力発電所制御の中身見せます
産業用途に利用するのにElixirが向いているぞ
びよんどプロジェクト
Applying Elixir to FA: A Study of Small Hydropower Palnt Systems
Should I talk about Logger or Process Registries?
スケールセンシティブ 〜里山工学を理論付ける〜
ルーティング最新動向 〜4バイトAS〜
FA関連技術のオープンソース化計画
RICC PIoT Workshop ハンズオン
IoT小箱で小水力発電所を制御する
Small hydro power plant systems with multi vender method
Exineris Project by kochi.ex
Modernization of Factory Automation with Elixir based systems and communities
小水力発電で地域と世界の未来づくり
To shorten the distance between ladders and clouds
旧畑山発電所 2019.04.13 の記録
小水力発電による地域活性化
Ad

Anyway folks! Let's get started with your Nerves machines.

  • 1. とにかく動かす Nerves マシン 〜ホストは Mac で〜 Elixir/Nerves入門! 堅牢なIoT Edgeデバイスプログラミングを お手軽に 2020.07.10 菊池豊 高知工科大学 1
  • 2. 私の歴史 • 1997 学校法人高知工科大学 – 現:高知県公立大学法人 高知工科大学 • 2004 有限会社ナインレイヤーズ – 西日本エリアで専用回線を提供します • 2011 高知小水力利用推進協議会 – 現:一般社団法人小水力協議会 • 2019 合同会社クラウドグリッド – 小水力発電のコンサルティング会社 2020.07.10 菊池豊 高知工科大学 2 東北大震災 再エネ法 2011.03.11 twitter: @kikuyuta qiita: @kikuyuta email: yu@kikuken.org
  • 7. Python は辛い… Elixir に行き着く… • 並行・並列プログラミング関数型言語 – アクターモデルによる並行性(プロセスとメッセージ) • プロセス(OSのプロセスと異なる軽量スレッド) – 1CPUで数十万プロセスも可能 – 1プロセスあたり3kB程度のメモリ使用 • 耐障害性 – アプリ停止なしの障害時プロセス再起動 – プロセスのホットスワップ可能 • 元々は電話交換システム用(1986〜) – にできた Erlang の上に乗ってる • 詳しい経緯はこちらの記事を – https://qiita.com/kikuyuta/items/96c3f91a850e9274b0e9 2020.07.10 菊池豊 高知工科大学 8
  • 8. Nerves: Elixir の IoT フレームワーク • Elixir の環境に連続する IoT 開発環境が利用可能 • 基本的な I/O アクセス手法を提供 • ターゲット用に 12MB〜 のファームウェアを生成 • ターゲットHW: Raspberry Pi, BeagleBone, x86_64 • Apache 2.0 2020.07.10 菊池豊 高知工科大学 9
  • 9. とにかく手を動かしてみよう 1 • Erlang / Elixir をインストール – brew でもできるけど、できれば asdf が良い • Nerves が Elixir のバージョンアップを後追いするため • https://qiita.com/nishiuchikazuma/items/b9d319732ddb540fd990 – 手元で確認するとこんな感じ 2020.07.10 菊池豊 高知工科大学 10 $ asdf current elixir 1.10.3-otp-22 (set by /Users/yu/.tool-versions) erlang 23.0.1 (set by /Users/yu/.tool-versions)
  • 10. とにかく手を動かしてみよう 2 • Nerves の作業ディレクトリを作成して仕込みます – mix nerves.new hogehoge – cd hogehoge – export MIX_TARGET=rpi0 • これはラズパイ0の場合 ↑ • rpi3(ラズパイ3B)や bbb(BeagleBone系)なども指定可能 – mix deps.get – mix firmware • ここまでできれば準備オケ 2020.07.10 菊池豊 高知工科大学 11
  • 11. とにかく手を動かしてみよう 3 • 必要なライブラリの記述 – ./mix.exs に追加 • 以下は GPIO 制御用のライブラリを追加する場合 2020.07.10 菊池豊 高知工科大学 12 $ /usr/bin/vi mix.exs ... defp deps do [ # Dependencies for all targets {:circuits_gpio, "~> 0.4"}, ...
  • 12. とにかく手を動かしてみよう 4 • ネットワーク関係の設定 – ssh で入れるようにすると大変便利 – $HOME/.ssh/config を変更するなど • 私は id_nerves_rsa として別に鍵ファイルを用意しています 2020.07.10 菊池豊 高知工科大学 13 $ /usr/bin/vi ~/.ssh/config ... # for Nerves Host nerves.local UserKnownHostsFile /dev/null StrictHostKeyChecking no IdentityFile ~/.ssh/id_rsa ...
  • 13. とにかく手を動かしてみよう 5 • ファームウェアを焼く – mix firmware # ファームウェアをクロスコンパイル – SDカードを準備 • ホストマシンの USBソケットにSDアダプタを挿す • そこにSDカードを挿す(SDHCタイプの16GBぐらいにしとけ) – mix burn • 一応、焼く先のデバイスがUSBの先であることを確認 – じゃないとホストOSを上書きするかもしれない(経験はないが…) 2020.07.10 菊池豊 高知工科大学 14
  • 14. とにかく手を動かしてみよう 6 • ターゲットマシンを起動する – 焼いたSDカードをターゲットデバイスに挿す – USBケーブルで電源供給開始 • 通信できないケーブルが(経験上)過半数なので注意!! – ブートしてくるのを待つ 2020.07.10 菊池豊 高知工科大学 15
  • 15. とにかく手を動かしてみよう 7 • 動作チェック – iex が出てきたら、それが Elixir の REPL だ 2020.07.10 菊池豊 高知工科大学 16 $ ping nerves.local PING nerves.local (172.31.118.229): 56 data bytes 64 bytes from 172.31.118.229: icmp_seq=0 ttl=64 time=0.815 ms 64 bytes from 172.31.118.229: icmp_seq=1 ttl=64 time=0.801 ms 64 bytes from 172.31.118.229: icmp_seq=2 ttl=64 time=0.711 ms ^C $ ssh nerves.local Interactive Elixir (1.10.3) - press Ctrl+C to exit (type h() ENTER for help) ... iex(1)> 1 + 2 3 iex(2)>
  • 16. とにかく手を動かしてみよう 8 • ターゲットから一旦 ssh を抜ける時 • ターゲットを停止する時 2020.07.10 菊池豊 高知工科大学 17 iex(1)> exit $ iex(1)> System.stop :ok iex(2)> Received disconnect from 172.31.118.229 port 22:11: Terminated (shutdown) by supervisor Disconnected from 172.31.118.229 port 22 $
  • 17. とにかく手を動かしてみよう 9 • ラズパイに LED を装填 – 今回は GPIO 18 へ • 回路図は100Ωだけど写真は330Ω 2020.07.10 菊池豊 高知工科大学 18 出典:https://github.com/elixir-circuits/circuits_gpio
  • 18. とにかく手を動かしてみよう 10 • ついにLチカ – GPIO 18 をオープンして、1 と 0 とを順に書き込んでみる 2020.07.10 菊池豊 高知工科大学 19 $ ssh nerves.local ... iex(1)> {:ok, ref} = Circuits.GPIO.open(18, :output) {:ok, #Reference<0.4220564217.268566531.77799>} iex(2)> Circuits.GPIO.write(ref, 1) :ok iex(3)> Circuits.GPIO.write(ref, 0) :ok iex(4)>
  • 20. とにかく手を動かしてみよう 12 • 次からはSDカードの抜き差しは不要 – mix firmware.gen.script • これを実行すると upload.sh というコマンドスクリプトができる • ssh でファームウェアアップデートをする – ホストマシンでプログラムを編集して… – mix firmware でクロスコンパイルして… – ./upload.sh すると… 2020.07.10 菊池豊 高知工科大学 21
  • 21. とにかく手を動かしてみよう 13 • …すると別パーティションにファームウェアをロードして… • …新しいファームウェアでリブートしてくる… • これは便利! 2020.07.10 菊池豊 高知工科大学 22 $ mix firmware ... $ ./upload.sh ... fwup: Upgrading partition B 100% [====================================] 31.74 MB in / 33.84 MB out Success! Elapsed time: 18.811 s Rebooting... $ いごいてるのがパーティションAの場合は、 パーティションBに書き込む
  • 22. 参考文献 • 本家 – https://www.nerves-project.org – https://hexdocs.pm/nerves/getting-started.html – https://github.com/nerves-project • kochi.ex (高知のElixirコミュニティ) – https://kochi-ex.connpass.com – https://qiita.com/organizations/kochi-ex – はじめてNerves(0) ElixirによるIoTフレームワークNervesがとに かく動くようになるためのリンク集 • https://qiita.com/kikuyuta/items/9dee85c32004c8e827e7 2020.07.10 菊池豊 高知工科大学 23
  • 23. 宣伝 2020.07.17 (fri) 夜 • 高知組み込み会 #5 – 「ロボットシステムのつくりかた」 – と題して ROS2 の入門編を …高瀬先生と三宅さんが… やります! – オンライン配信予定 • https://kochi-embedded-meeting.connpass.com/event/169398/ 2020.07.10 菊池豊 高知工科大学 24