今日はアドベントカレンダーの記事をライブで書きます。どんどん追加されていきます。本日中にどこまで出来るのかやってみます。このパラグラフが消え去るまでは、未完成ですので、良きに計らってください。
これは #NervesJP Advent Calendar 2020 の24日目です。昨日は @zacky1972 さんの mix_tasks_upload_hotswap の Hexライブラリ版を試す でした。
はじめに
この記事の作り方
アドベントカレンダーの 2020.12.24 を予約してまして、当日に鳴ってしまったので、ダッシュで書いてます。で、その様子をセミライブで、書いては公開・書いては公開、を繰り返します。
作業記録
- 17:00 ごろ 職場に行って材料を取って自宅に帰る(後で足りないものが出そうでこわい)
- 18:50 ごろ この記事の initial commit をする
- なにかは見とかないと色々間違いそうなので、アドベントカレンダー2日目の ウェブチカでElixir/Nervesに入門する(2020年12月版) を開いて横においてく
- 19:11
mix nerves.new way343
をやる - 19:19 ページ更新
- 19:29 とりあえず MIX_TARGET=rpi0 で作ったファームウェアがターゲットで起動するのを確認
- 19:30 microSD カードが足りないのに気づいて、イオンに行ってる家族に LINE で調達要請をだす
- 19:35 了解した旨の返事をもらう
- 19:40 RPI0 に家の WiFi 経由で ssh nerves.local できることを確認 10.0.1.39/24
- 19:49 3つの rpi0 が全部起動することを確認。でも複数あると nerves.local できない
- 20:03 ファームウェアに Circuits.GPIO を突っ込んで RPI0 & OLED_bonnet がデジタル入出力出来るのを確認 GPIO 4, 5, 6
- 20:05 家族から「SunDisk と謎ブランドとどっちが良い?」とLINE。謎ブランドのは 32GB で1000円切るのでそちらを2枚買ってもらった。SunDisk は2倍以上する。
- 「あれ?入れない、入れない」と思ったら
ssh nerves.new
ってやってた。落ち着け。 - 20:24 Rpi0 & Grove コネクタ拡張HAT で GPIO を試す
- GPIO 12, 20 は入力のインタラプトが取れるが、GPIO 14 は取れない
- GPIO 13, 15, 21 は Grove ボタンの NC 側につながってるので何も反応がない
- 20:45
export MIX_TARGET=bbb
で BeableBone Green のファームウェアが動くことを確認- ExiCape の GPIO 60, 50, 51, 4, 5, 48, 31, 30 が :output で LED 点灯するのを確認
- 21:02 BBG の Ethernet に固定IPアドレスがふれることを確認
- 21:10 家族が私の餌を持って帰宅したので夕食にする。
- 21:51 食事から戻る。夕食は海鮮ちらし寿司、チキンから揚げ、モンブランのケーキ
- 22:30 お腹が一杯でやる気がでないのでネットサーフしてた
- 22:59 WiFiのRPi0でも固定アドレスで立ち上がるのを確認。にしても眠すぎる。
- 23:17 同じ config/target.exs に eth0 と wlan0 とで個別の IP アドレスを振る設定にしておいて、eth0 しかない bbb と wlan0 しかない rpi0 とに同じソースコードのファームを突っ込んでみると、それぞれ持っている IF の IP しか有効にならないので異なるアドレスで立ち上がることを確認
- 23:46 どの実装にしようか迷いマクローリン展開。走行するうちに昔の記事にバグを見つけて修正
- 00:33 日が変わった。bbb と rpi0 とに自動 Node.connect と Syn2 の pub/sub を入れて、両方とも稼働することを確認
- 00:34 眠すぎて無理。寝る。
- 07:25 寝坊。娘を叩き起こして朝食を食べさせて慌てて出勤。スクールバスに間に合うか。
- 08:10 WiFiルータを研究室から持ち出し、スクールバスで香美キャンパスから永国寺キャンパスへ
- 09:00 会議室で作業開始
- 10:00 FreeSpot 用の WiFiルータだとLAN側同士のホストがつながらない。つながるように設定もできない。普通のルータを持ってきてもらうように kochi.ex メンバに依頼
- 12:00 次々に通常業務が入って来るのでそちらを処理。某サーバの証明書が2月に切れることがわかり憂鬱
- 12:30 kochi.ex メンバと昼食へgo、今日はスンドゥブ
- 13:30 昼食終了
- 14:00 持ってきてもらったルータで上手いこと BBG が Ethernet 経由でつながる
- 14:42 RPi0 が wireless でどうしてもつながらず… psk が間違ってることを指摘され…
- 14:44 つながる… orz... 忘年会は 16:00 から。後1時間だ。
- 15:00 Syn v2.1 の pub/sub に実装する方針に決定
- 15:52 忘年会に行かなくてはならない。残念だ ← イマココ
基本構成を仕込む
Circuis.GPIO の確認
Rpi0 に OLED Bonnet
iex(1)> {:ok, gpio4} = Circuits.GPIO.open(4, :input)
{:ok, #Reference<0.3098086349.268566535.58965>}
iex(2)> {:ok, gpio5} = Circuits.GPIO.open(5, :input)
{:ok, #Reference<0.3098086349.268566535.58966>}
iex(3)> {:ok, gpio6} = Circuits.GPIO.open(6, :input)
{:ok, #Reference<0.3098086349.268566535.58967>}
iex(4)> Circuits.GPIO.set_interrupts(gpio4, :both)
:ok
iex(5)> Circuits.GPIO.set_interrupts(gpio5, :both)
:ok
iex(6)> Circuits.GPIO.set_interrupts(gpio6, :both)
:ok
iex(7)> flush
{:circuits_gpio, 4, 88351231557, 1}
{:circuits_gpio, 5, 92067507046, 1}
{:circuits_gpio, 6, 94870610033, 1}
:ok
iex(8)> Circuits.GPIO.set_interrupts(gpio6, :both)
:ok
iex(9)> flush
{:circuits_gpio, 4, 105007832077, 0}
{:circuits_gpio, 4, 105189346680, 1}
:ok
iex(10)> flush
{:circuits_gpio, 5, 115037522115, 0}
{:circuits_gpio, 5, 115203268624, 1}
:ok
iex(11)> flush
{:circuits_gpio, 6, 118212275742, 0}
{:circuits_gpio, 6, 118364134197, 1}
:ok
iex(1)> {:ok, gpio14} = Circuits.GPIO.open(14, :input)
{:ok, #Reference<0.1671892300.268566531.234311>}
iex(2)> {:ok, gpio15} = Circuits.GPIO.open(15, :input)
{:ok, #Reference<0.1671892300.268566531.234312>}
iex(3)> Circuits.GPIO.set_
set_direction/2 set_interrupts/2 set_interrupts/3
set_pull_mode/2
iex(3)> Circuits.GPIO.set_interrupts(gpio14, :both)
{:error, :hal_apply_interrupts}
iex(4)> Circuits.GPIO.set_interrupts(gpio15, :both)
{:error, :hal_apply_interrupts}
iex(5)> flush
:ok
iex(6)> flush
:ok
iex(7)> flush
:ok
iex(8)> flush
:ok
iex(9)> {:ok, gpio14} = Circuits.GPIO.open(12, :input)
{:ok, #Reference<0.1671892300.268566531.234315>}
iex(10)> {:ok, gpio14} = Circuits.GPIO.open(14, :input)
{:ok, #Reference<0.1671892300.268566531.234316>}
iex(11)> {:ok, gpio12} = Circuits.GPIO.open(12, :input)
{:ok, #Reference<0.1671892300.268566531.234317>}
iex(12)> {:ok, gpio13} = Circuits.GPIO.open(13, :input)
{:ok, #Reference<0.1671892300.268566531.234318>}
iex(13)> {:ok, gpio20} = Circuits.GPIO.open(20, :input)
{:ok, #Reference<0.1671892300.268566531.234319>}
iex(14)> {:ok, gpio21} = Circuits.GPIO.open(21, :input)
{:ok, #Reference<0.1671892300.268566531.234320>}
iex(15)> Circuits.GPIO.set_interrupts(gpio12, :both)
:ok
iex(16)> Circuits.GPIO.set_interrupts(gpio13, :both)
:ok
iex(17)> Circuits.GPIO.set_interrupts(gpio14, :both)
{:error, :hal_apply_interrupts}
iex(18)> Circuits.GPIO.set_interrupts(gpio15, :both)
{:error, :hal_apply_interrupts}
iex(19)> Circuits.GPIO.set_interrupts(gpio20, :both)
:ok
iex(20)> Circuits.GPIO.set_interrupts(gpio21, :both)
:ok
iex(21)> flush
{:circuits_gpio, 12, 261130576887, 0}
{:circuits_gpio, 13, 263824013398, 0}
{:circuits_gpio, 20, 285571669648, 0}
{:circuits_gpio, 21, 288806394018, 0}
:ok
iex(22)> flush
:ok
iex(23)> flush
:ok
iex(24)> flush
{:circuits_gpio, 12, 299253040435, 1}
{:circuits_gpio, 12, 299433046418, 0}
{:circuits_gpio, 12, 299535605408, 1}
{:circuits_gpio, 12, 299714417391, 0}
:ok
iex(25)> flush
:ok
iex(26)> flush
:ok
iex(27)> flush
{:circuits_gpio, 20, 330622386627, 1}
{:circuits_gpio, 20, 330810957611, 0}
{:circuits_gpio, 20, 330989729596, 1}
{:circuits_gpio, 20, 331119557585, 0}
:ok
- GPIO60
- GPIO50
- GPIO51
- GPIO4
- GPIO5
- GPIO48
- GPIO31
- GPIO30
まとめ
きょうは、をしました。
さて、明日の #NervesJP Advent Calendar 2020 の25日目のトリの記事は我らが @takasehideki センセの Nervesな2020年を #NervesJP 的に?? ふりかえる です。お楽しみに!