node-red経由でrpizero+mcp9808で収集した温度をAlexaに喋らせる

 件数稼ぎとしか思えないがrpizeroに同じ環境を組み込んだので一応書いておく。A7@Quadなrpi2bとARM11(v6)@1Ghzのrpizeroではプロセサ性能で4倍程差があるがそれでもrpizeroは大昔のスマホのアプリケーションプロセサ並(A8@800Mhzぐらい)の性能は有ると思われる(体感)。今は絶滅危惧種化してるBeagleboard並と言えば解るだろうか。。。

1.ハードウェア構成

 raspberrypiZero + Seeed HAT(rpizero用) + MCP9808(温度センサ)

 Seeed HATはrpiのi2cバスの0x04にSTM32をIOプロセサとして搭載しておりアナログ入力に使っている。昔のディスクリートのADCをi2c/spiで接続するよりは柔軟で高性能且つ安価故余程の事情が無い限りはこの構成を選択するだろう。それにしてもSTM32地味に色々な機器で使われている印象。

2.node-redのフロー

f:id:aki_iic:20210704030827p:plain

node-red with raspberrypiZero

 別段rpi2bと何ら代わりは無いがプロセサ性能分体感速度に差がある印象。rpizeroでは「コンピュータ 室温を教えて」と呪文を唱えて「30.62℃です」と返答する迄気持ち(0.2秒程?)遅れはあるが気にする程の事ではない(wio-terminalではpyserialの初期化で2秒近く待っていたのでそれに比べりゃ即答と言えるレベル)。

 尚mcp9808.py,alexaに返すjsonはrpi2bと全く同じなので省略。

3.メモリ状況

pi@rpizero1 ~ $ free
total used free shared buff/cache available
Mem: 440412 78760 149440 5868 212212 300948
Swap: 102396 0 102396
pi@rpizero1 ~ $ df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/root 7459768 2094936 5028604 30% /
devtmpfs 187228 0 187228 0% /dev
tmpfs 220204 0 220204 0% /dev/shm
tmpfs 220204 5868 214336 3% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 220204 0 220204 0% /sys/fs/cgroup
/dev/mmcblk0p1 258095 48788 209307 19% /boot
tmpfs 44040 0 44040 0% /run/user/1000
 rpi2bよりも更に少ない78760KB(78.7MB)で440MBメモリ故まだまだスカスカで余裕があるがCPU性能差故か軽快とは言い難い場面が無くもないが充分実用レベルと判断。

4.まとめ

 予想はしたがrpizeroでも充分使える。但しプロセサ性能差分node-redの起動・応答は相応の時間が掛かるが短気な人でなければまあ許せるレベル。もっとも組み込みシステムの現実をご存知無い普通のパソコンユーザさんでは違和感を感じるかもしれない。それでもARM11@1Ghzで組み込みLinuxで0.5GBもの大容量メモリ!を千円台で入手可能なご時世故組み込みとは言えないのかもしれないがarduino互換機系の世界観と比べるのは恐縮だが猫と鼠程度の差はあるのでは。まあ比較自体がナンセンスだし鼠は鼠の猫は猫の用途があるので一昔前ならばLinuxでi2cの温度センサを無線LANで英国のサーバ経由でAmazon AlexaなるVUIに接続するなぞ牛刀と言われていたかもしれない(それってPCでやることですよね。とか)。

4.その他

 テストしてたらAlexaが応答していないとおっしゃるので色々調べてみたら↓

f:id:aki_iic:20210704033747p:plain

node-red alexa skill server down(may be rare?)

 何とnode-red alexa skillサーバが落ちておりました。長期間ダウンにならぬ様、祈っております。こういう事態に備えて代替手段を検討しておくべきなのかもしれない。。。

と思ったが30分経たずして復旧していた。時差もあろうが真面目にサポートされている印象(無料で使わせてもらっている立場なので長時間ダウンでない分有り難い)。

 20210704追記:

 折角rpi使ってるのでGPIOノードでpHATのGPIO12のLEDを点滅させる事にした。本当はコマンド処理中にLEDを点灯したいのだけどやり方が分からないのでAlexaコマンド受信で一律250msトリガでLEDを点灯し250ms後消灯としてみる。私がオジ(い)サンの為かnode-redで簡単な操作を(LED点灯→消灯とか)を行おうとすると難航するのはこのツールの本質をまだ理解出来ていない為なのだろう。

f:id:aki_iic:20210704045513p:plain

node-red raspberrypi gpio

 しょうもないけど一応node-redでrpiのgpio操作(はずかし)となる。一度流し読みした後閑本でも読み返してみようか(PicMicroの時代からいつもお世話になっております)。

 20210704 9:14 追記:

 ボードの写真が無いのもアレなので追記する↓

f:id:aki_iic:20210704091552j:plain

rpizero+seeed_HAT+pHAT+mcp9808

 まづは上面図で手前のGrove基板がMCP9808(Seeed製)温度センサでその上に写っている紫色というかサツマイモ色の基板がMaker pHATという基板でスイッチ3個、LED8個、ブザー1個、rpi serial用usb-serial(CH340っぽい)とスタッキングコネクタとピンヘッダが実装されている為便利だが1200円というのは本体より高いのでいただけない(これはrpizero全般について言えるというかrpizeroが布教活動用で採算度外視であるのが解る:勝手な憶測です)。上述したLEDはこのpHATのGPIO12ピンをドライブしている。

f:id:aki_iic:20210704092407j:plain

rpizero+seeed_HAT+pHAT+mcp9808(side view)

 こちらはボードを横から見た物で3段スタッキング構成になっている。一番上が上記のpHATで一番下がrpizero(RaspberryPI Zero)で真ん中がSeeed HATである。真ん中のHATはi2cしか使わない場合は無駄が多いのだがここで手細工すると不安定要因増大するので他の拡張性(GPIOにリレーを繋ぐとかSTM32なADCを使ってみるとか)の為に搭載している。こんな構成故GroveコネクタをRPI本体のヘッダに直結すればRPI Zeroだけでも行けるのだろうが年の功で無理はしない。無理して手細工しても長持ちしないのは身に沁みているから。同様の理由でブレッドボードを長期使用するのは安定性の点で不適で実験用には実験用の利点と欠点がある事は夢々忘れぬようにしたいところではある。今は便利なご時世で個人で基板試作するのも(それこそSeeed等の支那基板メーカに頼めば)容易だし構成が固まれば基板化するのが21世紀の現在では筋なのだろう。