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

ANS-HandsOn-202012

myasu
December 27, 2020

 ANS-HandsOn-202012

https://algyan.connpass.com/event/197306/

Elixir/Nerves(ナーブス)体験ハンズオン!
堅牢な組込みソフトウェアをお手軽に開発できる、Edgeデバイス・プラットフォームを体感してみよう!

myasu

December 27, 2020
Tweet

More Decks by myasu

Other Decks in Technology

Transcript

  1. 応用編 - 2020/12/27 ALGYAN × Seeed × NervesJPハンズオン! 1 【オンライン】豪華プレゼント付!

    Elixir/Nerves(ナーブス)体験ハンズオン! - connpass Creative Commons
  2. 進め方 1. GitHubからソースを持ってくる 2. ソースの一部を編集する(あなたのハンドル名に書き換え) 3. ファームウェアをビルドする 4. Nerves (on

    RaspberryPi) へアップロードする 5. Nerves (on RaspberryPi) にSSH経由でログインする 6. 温度を測るコマンドを実行して、動作確認する 7. 測った温度を、Azure上のWebAPIに送るコマンドを実行する 8. Webページで結果を見て、動作確認する (以降のページで解説します) 9
  3. ソースを持ってくる3 1. GitHubからcloneする # git clone https://github.com/NervesJP/nervesjp_basis 2. 最初に居たディレクトリから見えるように、シンボリックリンクを置く #

    ln -s /root/nervesjp_basis /workspaces/nerves-algyan-devcontainer/nervesjp_basis 3. 最初に居たディレクトリに戻って、プロジェクトのディレクトリに移動 # popd # cd nervesjp_basis # pwd /workspaces/nerves-algyan-devcontainer/nervesjp_basis 12 ※末尾はスラッシュ無し!! ラズパイ4以外の方はお 知らせを!!
  4. コンパイル~アップロードまで1 (Dev Containerの)ターミナルから、以下を順番に実行 # mix deps.get ←ライブラリの依存関係の処理(約 1~2分程度) # mix

    firmware ←ビルド (初回 約 5分程度) # mix upload ←ネットワーク経由で ラズパイにアップロード (約 2分程度) 15
  5. 接続確認2 IPアドレスも分かります iex(8)> ifconfig lo: flags=[:up, :loopback, :running] inet 127.0.0.1

    netmask 255.0.0.0 eth0: flags=[:up, :broadcast, :running, :multicast] ← 有線LAN inet 192.168.0.4 netmask 255.255.255.0 broadcast 192.168.0.255 wlan0: flags=[:up, :broadcast, :running, :multicast] ← 無線LAN inet 192.168.11.100 netmask 255.255.255.0 broadcast 192.168.11.255 23
  6. ソースファイル解説1 • aht20.ex センサAHT20の制御モジュール 28 read_from_aht20/0 I2C通信で温・湿度測定 temp/0 温度の値だけを取得 print_temp/0

    温度の値を文字列で表示 humi/0 湿度の値だけを取得 print_humi/0 湿度の値を文字列で表示 convert/1 RAWデータを℃・%に換算
  7. 進め方 1. 湿度を測るコマンドを実行して、動作確認する 2. 一旦、Nervesからログアウトする 3. 先ほど使った「測った湿度を、Azure上のWebAPIに送る」関数を修 正。 a. ファイル「web.ex」 23行目付近「senddata」関数

    b. 温度と湿度を送るようコードを書き換え c. ビルド、アップロード 4. Nervesにログインする 5. 測った温度を、Azure上のWebAPIに送るコマンドを実行する 6. Webページで結果を見て、動作確認する (以降のページで解説します) 31
  8. 修正箇所 その2 <修正前> IO.puts(" > send: [name: #{@my_name}] / temp:

    #{inspect(temp)} (degree Celsius)") <修正後> IO.puts(" > send: [name: #{@my_name}] / temp: #{inspect(humi)} (%)") 37
  9. 進め方 1. ボタンの検出をスタートする 2. ボタンを押す a. (以下を自動的に実行) b. 温度を測るコマンドを実行する c.

    測った温度をAzure上のWebAPIに送る 3. Webページで結果を見る 4. ここまでの詳細を、簡単に解説 44
  10. ボタンを押す > send: [name: nervesjp_algyan] / temp: 21.7 (degree Celsius)

    > send: [name: nervesjp_algyan] / temp: 21.7 (degree Celsius) > send: [name: nervesjp_algyan] / temp: 21.6 (degree Celsius) > send: [name: nervesjp_algyan] / temp: 21.7 (degree Celsius) > send: [name: nervesjp_algyan] / temp: 21.7 (degree Celsius) 46 送信中に点灯(200ms) 押しボタンON ボタンを押すたびに送信 進捗確認シート N列「ボタン送信」をチェック!
  11. ソースファイル解説5 • web.ex WebAPIとのやりとりモジュール 52 body/1 JSON部の生成 header/0 ヘッダ部の生成 post/2

    POSTする senddata/0 温度と”湿度を” 取得してPOSTまで ここを修正してみる
  12. ソースファイル解説5 • web.ex WebAPIとのやりとりモジュール 53 body/1 JSON部の生成 header/0 ヘッダ部の生成 post/2

    POSTする senddata/0 温度と”湿度を” 取得してPOSTまで “answer”をチェックアウトすると回答例が載ってます
  13. 本日のソースファイルをコピー2 1. シンボリックリンクを消す # rm ./nervesjp_basis 2. /rootディレクトリの中の「nervesjp_basis」ディレクトリを コピーして持ってくる #

    cp -r /root/nervesjp_basis /workspaces/nerves-algyan-devcontainer/ 3. これで、本日の作業ディレクトリ「nervesjp_basis」が、 ホストOS側の、dev containerのフォルダに移りました。 56