Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Elixir/Nervesはナウでヤングなcoolなすごいやつ for SORACOM UG

takasehideki
December 14, 2021

Elixir/Nervesはナウでヤングなcoolなすごいやつ for SORACOM UG

SORACOM UG x NervesJP #1 ~Hello, world!~
2021/12/14
https://soracomug-tokyo.connpass.com/event/231532/

おことわり?
本資料は下記での発表のガチャポン版です.動画アーカイブなどぜひ視聴いただけましたらです
1. ALGYAN6周年IoT祭2021『IoTは技術の総合格闘技!』講演&ノベルティ抽選会 https://algyan.connpass.com/event/212471/
- Slide: https://www.slideshare.net/takasehideki/elixirnervescool-249038510
- YouTube (3:06:23より): https://www.youtube.com/watch?v=NblymNBgUCs&t=11183s
2. Design Solution Forum 2021 https://dsforum.jp/2021/
- Slide: https://www.slideshare.net/takasehideki/elixirnervesiot-250588652
- YouTube: https://youtu.be/ZuS9T1UW8Qk

takasehideki

December 14, 2021
Tweet

More Decks by takasehideki

Other Decks in Programming

Transcript

  1. #NervesJP #SORACOMUG 3 おことわり︖ • 本資料は下記での発表のガチャポン版です 動画アーカイブなどぜひ視聴いただけましたらです 1. ALGYAN6周年IoT祭2021『IoTは技術の総合格闘技︕』 講演&ノベルティ抽選会

    https://algyan.connpass.com/event/212471/ — Slide: https://www.slideshare.net/takasehideki/elixirnervescool-249038510 — YouTube (3:06:23より): https://www.youtube.com/watch?v=NblymNBgUCs&t=11183s 2. Design Solution Forum 2021 https://dsforum.jp/2021/ — Slide: https://www.slideshare.net/takasehideki/elixirnervesiot-250588652 — YouTube: https://youtu.be/ZuS9T1UW8Qk ぜひTweetを︕
  2. #NervesJP #SORACOMUG 世はまさに⼤IoT時代︕     AI/ML技術との 密接な統合 あらゆるモノ・コトの

    ネットワーク接続によって 新たな社会的価値を創造 各構成要素における 計算機特性の結集 ⼤量のデバイスとデータ 「デバイスレベル並列化」 による最適化の時代へ︕ 要するに,,, IoTは情報技術の 総合格闘技︕ 4
  3. #NervesJP #SORACOMUG Elixirとは︖ 2012年に登場した(まだまだ若めの)関数型⾔語 Erlang VM上で動作 • ⾼い並列性能を誇る • 軽量かつ頑強なプロセスモデル

    • 耐障害性が極めて⾼い Rubyを基にした⾔語設計 • 習得しやすく⽣産性が向上する • レスポンス性能が極めて⾼い • Web/IoT/AIライブラリを備える ※各⾔語・フレームワークのロゴの権利は それぞれの作成者に帰属しています 7
  4. #NervesJP #SORACOMUG Elixir Zen Style!! Zen(禅) とは本質美である プログラミングの本質とはデータの流れである Elixirではデータフローと並列処理を Enum

    Flow |> で直感的に記述できる 1..1000 |> Flow.from_enumerable() |> Flow.map(& foo(&1)) |> Flow.map(& bar(&1)) |> Enum.sort from_ enumerable 1..1000 foo foo foo foo sort bar bar bar bar 8
  5. #NervesJP #SORACOMUG Elixirの気持ちよさ ダッシュ ボード Link Super Visor one_for_one App

    液晶 データ ロガー Link センサ 監視 制御 Link ボタン {:ok, ref} = Circuits.I2C.open(@i2c_bus) Circuits.I2C.write(ref, @i2c_addr, <<0xBE, 0x08, 0x00>>) Circuits.I2C.write(ref, @i2c_addr, <<0xAC, 0x33, 0x00>>) {:ok, val} = Circuits.I2C.read(ref, @i2c_addr, 7) <<_state::8, raw_humi::20, raw_temp::20, _crc::8>> = val 9 • (やや)強い動的型付け —データ構造にイミュータブル性を持つ • アクターモデルに基づく並⾏処理 • メモリ軽量かつ堅牢なプロセスモデル —プロセス単位でのメモリ管理と障害復旧 —処理のモジュール化と制御の抽象化 • バイナリ操作とパターンマッチ
  6. #NervesJP #SORACOMUG ElixirはIoTのための⾔語である︕ ! " # $ % 三 銃

    ⼠ ) 連 + , - . / ︒ ! " # $ % 三 銃 ⼠ ︖ 10
  7. #NervesJP #SORACOMUG ElixirはIoTのための⾔語である︕ ! " # $ % 三 銃

    ⼠ ︖ 2 ⼿ 軽 5 6 7 8 $ % 9 作 + ; / ︒ ⼤ 量 接 続 @ 任 B C D ︕ F G H I 計 算 L 強 N 味 ⽅ Q R S 時 代 @ ! % V W ! " # $ % X I o T ︕ \ ] ^ ︑ / ` a b ︒ ※各⾔語・フレームワークのロゴの権利は それぞれの作成者に帰属しています 11
  8. #NervesJP #SORACOMUG 12 Phoenix • Webアプリ/サーバの開発フレームワーク —MVC (Model/View/Controller) パターンに基づく —Ruby

    on Rails や Django と同等 • ⾼い開発⽣産性と通信性能を両⽴できる —特にスケーラビリティと スループットに優れる • LiveView —イベント発⽣に応じてHTMLを リアルタイムにレンダリング https://www.phoenixframework.org/
  9. #NervesJP #SORACOMUG 13 • ⼀⾔でいえば powered by Elixir な Jupyter

    —Webブラウザ上で⽂書編集とコーディング/実⾏ができる —多⼈数での同時編集や差分管理,データのグラフ可視化ができる
  10. #NervesJP #SORACOMUG Nx: Numerical Elixir!! Introducing Nx - José Valim

    | Lambda Days 2021 https://youtu.be/fPKMmJpAGWc https://dashbit.co/blog/nx-numerical- elixir-is-now-publicly-available 14
  11. #NervesJP #SORACOMUG • ElixirによるIoTフレームワーク —極⼩規模のファームウェア (~>30 MB) —堅牢性の⾼いファイルシステム —機能の取捨選別が容易 (Buildrootの利⽤)

    • Elixirの⾔語機能との完全な互換性 —アクターモデルで並⾏処理ができる —IoT向けになにか気にする必要がない —有⽤なライブラリとツールが揃っている Ø⽇本初!?のNerves搭載製品 → Pocket LANcher Bootloader A Linux kernel (Buildroot) Master Boot Record Root Filesystem A (Read-only) Application Data (Read-Write) C libraries Erlang VM Bootloader B Root Filesystem B (Read-only) C libraries Erlang VM CQ出版Interface 2020年6⽉号〜 2021年1⽉号 16
  12. #NervesJP #SORACOMUG • ElixirによるIoTフレームワーク —極⼩規模のファームウェア (~>30 MB) —堅牢性の⾼いファイルシステム —機能の取捨選別が容易 (Buildrootの利⽤)

    • Elixirの⾔語機能との完全な互換性 —アクターモデルで並⾏処理ができる —IoT向けになにか気にする必要がない —有⽤なライブラリとツールが揃っている Ø⽇本初!?のNerves搭載製品 → Pocket LANcher Bootloader A Linux kernel (Buildroot) Master Boot Record Root Filesystem A (Read-only) Application Data (Read-Write) C libraries Erlang VM Bootloader B Root Filesystem B (Read-only) C libraries Erlang VM CQ出版Interface 2020年6⽉号〜 2021年1⽉号 17 Nervesは”ElixirでIoT”の ナウでヤングなcoolな すごいやつ!!
  13. #NervesJP #SORACOMUG ElixirとNervesの採⽤事例 各画像のクリックで 詳細ページに • 8 Companies That Use

    Elixir in Production https://serokell.io/blog/elixir-companies • ⽇本で Erlang/OTP や Elixir を利⽤している会社⼀覧 github: voluntas/japanese-erlang-elixir-companies https://www.nerves-project.org/case-studies Le Tote: ⾐料品倉庫のRFIDと キオスクによる在庫管理 Hop: 顔認証機能付きの キオスクビールサーバ FarmBot: スマートファームの実現 19 H15: ⾼い並列性能と耐障害性を持つElixirとNervesで IoTの新しいカタチを切り拓く(⾼瀬英希)
  14. #NervesJP #SORACOMUG Nervesのはじめかた Step5 なんかイゴかしてみる Omni Eye on GitHub 団⻑︕

    いつでもどこでも温度・湿度 が測れるのであります︕ (Elixir, SORACOM Air for セルラー) - Qiita https://twitter.com/kikuyuta/status/ 1375775134586335233 Elixir/NervesでPLC(多機能 リレー)を作ってみた - Qiita
  15. #NervesJP #SORACOMUG (ぜひぜひ!) 論よりRUN!! • 必要な環境︓Elixir, Erlang, nerves_bootstrap, hex, rebar

    —詳細なインストール⽅法︓ https://hexdocs.pm/nerves/installation.html —VSCode + dev-container もあります • 使⽤する機材 —Raspberry Pi 3B+(他でも可) ü電源アダプタ,ネットワーク環境 —microSDカード,ライタ —Grove Base HAT —Grove Button, LED, AHT20 (温湿度センサ) 26
  16. #NervesJP #SORACOMUG (ぜひぜひ!) 論よりRUN!! • Nervesプロジェクトの作成 • mix.exs への依存パッケージの追加 •

    ターゲットの指定 • 依存関係の解消と取り込み • ファームウェアのビルド • microSDカードへの書き込み 27 $ mix nerves.new nerves_dsf {:circuits_gpio, "~> 0.4"}, {:aht20, "~> 0.4"}, $ export MIX_TARGET=rpi3 $ mix deps.get $ mix firmware $ mix burn • Nervesデバイスへのssh接続 • GPIOの制御(LEDの点灯) • 温湿度センサの値取得 $ ssh nerves.local iex> {:ok, led} = Circuits.GPIO.open(16, :output) iex> Circuits.GPIO.write(led, 1) iex> {:ok, pid} = AHT20.start_link(bus_name: "i2c-1", bus_address: 0x38) iex> AHT20.measure(pid)
  17. #NervesJP #SORACOMUG (ぜひぜひ!) 論よりRUN!! 28 $ git clone https://github.com/TORIFUKUKaiou/tem perature_and_humidity_nerves

    $ cd temperature_and_humidity_nerves $ mix deps.get $ mix firmware $ mix upload $ ssh azureuser@<hoge>.cloudapp.azure.com $ git clone https://github.com/TORIFUKUKaiou/hello_iot_cloud $ cd hello_iot_cloud $ cp .env.sample .env $ sudo docker-compose config $ sudo docker-compose up -d https://bit.ly/ncjp-soracom 温度と湿度を取得 HTTP POST クラウドアプリでグラフ表⽰ ※値送信/グラフ表⽰のWebアプリは2022年1⽉31⽇までアクセス可能