LoginSignup
8
1

More than 3 years have passed since last update.

【実写版】階段の上でも下でも電灯を点けたり消したりする(ライブ編集中だからリンクするなよ)

Last updated at Posted at 2020-12-24

今日はアドベントカレンダーの記事をライブで書きます。どんどん追加されていきます。本日中にどこまで出来るのかやってみます。このパラグラフが消え去るまでは、未完成ですので、良きに計らってください。

これは #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 的に?? ふりかえる です。お楽しみに!

謝辞

参考文献

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1