Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!

800 views

Published on

「IoTつくるよ!2 〜みんなで盛り上げるIoT博覧祭〜」
でのLT発表な資料でっす れっつIoT開発!
https://algyan.connpass.com/event/141541/

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!

  1. 1. Nerves!? Elixir!?? 関数型⾔語でれっつIoT開発︕︕ @takasehideki
  2. 2. 2 関数型⾔語ElixirでIoT開発︕︖を 楽しんでいるオンラインコミュニティです Elixir/Nervesをもっと知りたい⽅、 Nervesでなんか作ってみたい⽅、 Nerves Projectに貢献したい⽅、 れっつじょいなす︕︕ https://nerves-jp.connpass.com/
  3. 3. Elixirとは︖
  4. 4. Elixirとは︖ 2012年に登場した新たな関数型⾔語 4 Erlang VM上で動作 • ⾼い並列性能を誇る • 軽量かつ頑強なプロセスモデル • 耐障害性が極めて⾼い Rubyを基にした⾔語設計 • 習得しやすく⽣産性が向上する • WebフレームワークPhoenixを持つ Ø応答性が極めて⾼い #NervesJP
  5. 5. 5 Elixir Zen Style 1..1000 |> Flow.from_enumerable() |> Flow.map(& foo(&1)) |> Flow.map(& bar(&1)) |> Enum.to_list |> Enum.sort Zen(禅) とは本質美である プログラミングの本質とは データの流れである Elixirではデータフローと並列処理を Enum Flow |> で直感的に記述できる #NervesJP
  6. 6. Elixirの気持ちよさ • Zen Style!! • (やや)強い動的型付け • オブジェクトの イミュータブル性(不変性) • バイナリ操作と パターンマッチ • メモリ軽量かつ 堅牢なプロセスモデル ­ 障害時にはプロセス 単位で復旧可能 • マクロプログラミング 6 Shared Data Core #1 Core #2 3.14 ダッシュ ボード Link Super Visor one_for_one App 液晶 データ ロガー Link センサ 監視 制御 Link ボタン #NervesJP
  7. 7. Elixirって,,,
  8. 8. ElixirでIoT!! 8 • / 6 -H F abS ü& 2/M H K!2 2 ü4F! H 1 3 E c • 0A C H H H B ztNN • i d PsTky • ghj 2 N • - AKAH L Eo N • -6 & 672& S - AKAH - HF P • e O V 0 • r n VW xlm #NervesJP
  9. 9. Nerves!! 9 https://nerves-project.org
  10. 10. Platform • ブートローダ+rootfs+ Erlang OTP+Elixirアプリ ­ ⼀括でビルドして SDカード等に書込み 10#NervesJP
  11. 11. Framework • IoTデバイス開発に⽋かせない 強⼒なライブラリ ­Elixir Circuits: GPIO, I2C, SPI, UART ­IoTモジュール向けライブラリも • 通常のElixirライブラリも利⽤可 ­描画系ライブラリ Scenic や Webフレームワーク Phoenixとも 容易に連携可能︕ 11#NervesJP
  12. 12. Tooling • mixによるプロジェクト管理 ­ いつものElixirアプリ開発と⼀緒︕ ­ クロスコンパイルは裏でよしなに • IExでのインタプリタ実⾏も可能 ­ VirtualEther越しのssh接続 ­ /dev/tty* 越しのserial接続 • ファーム・アプリの書き込み ­ SDカードに書き込み ­ VirtualEther越しの更新 ­ NervesHub : Device to the Cloud!! üサーバ経由のOTAでアプリをリモートデプロイ︕ 12#NervesJP
  13. 13. 主な対応デバイス 13#NervesJP ? 8: . / 5 / = = 4 6 : 5 :
  14. 14. 14 こんなモノができます︕
  15. 15. こんなモノができます︕ 15 産業機器の制御⽤インターフェース・ボード Nervesを、産業機器(Factory Automation - FA)の制御に展開するための、インターフェース・ ボードを展⽰。 電⼦⼯作のプロトタイピングで有名な、中国 Seeed社の「GROVE」規格に対応しているので、 既存のGROVE対応デバイスと互換性があります。 ● GROVE(GPIO)絶縁デジタル出⼒ ● GROVE(GPIO)絶縁デジタル⼊⼒ ● GROVE(I2C)絶縁デジタル⼊出⼒ #NervesJP
  16. 16. こんなモノができます︕ 16#NervesJP Nerves Weather Forecast Nervesから「livedoor 天気情報」の情報を 取得してTwitterに定期投稿しています。 主に次のライブラリを使っています。 ● HTTPoison: httpクライアント ● ExTwitter: Twitter投稿ライブラリ ● Cronex: cronライクなElixirライブラリ I use Nerves, I like it! 作者︓@torifukukaiou さん Qiita #NervesJP Advent Calendarの 2⽇⽬に解説記事を公開予定︕ ラズパイ4で 動くよ︕︕
  17. 17. こんなモノができます︕ 17#NervesJP Nerves Add-on Board • ラズパイゼロとOLEDディスプレイの間にサンドイッチ︕ • 4x Grove Connector ­ Normal GPIO ­ GPIO with PWM ­ GPIO/UART ­ I2C • NervesKey socket!! https://github.com/shaga/NervesAddonBoard
  18. 18. こんなモノができます︕ 18#NervesJP • Elixirでラズパイカメラ︕ ­with customized F/W of Nerves! ­with Zbar for QR code! ­with GraphQL for resize & effect! ­with Phoenix for RT browsing!! Presentation on CODE BEAM STO 2018 Omni Eye on GitHub Training Materials on Lonestar 2019 Developer Greg Mefford
  19. 19. 勉強したくね︖︖ 19#NervesJP • 通称「えりいざ」本 ­ めちゃ丁寧︕⼊⾨に最適︕ ­ Elixirのインストールから PhoenixのWebページ作成, NervesでLチカまで︕ ­ はじめは雰囲気で使っても 良いじゃないの @MzRyuKa さん渾⾝の⼒作︕ BOOTHにて販売中︕
  20. 20. https://nerves-jp.connpass.com/ 20 サッポロビーム れっつじょいなす︕︕

×