
前回、定番の圧力センサ Bosch BMP280の補償計算をなんとかやっつけてMicroPythonで気圧と温度を測れるようになりました。今回は測った結果を、例によってMQTTに載せてNode-REDへ報告し、Dashboard上にグラフ表示してみます。まずは前回プログラムのモジュール化から。
デバイス作る人>>デバイス使う人>>デバイスおたく
前回、定番の圧力センサ Bosch BMP280の補償計算をなんとかやっつけてMicroPythonで気圧と温度を測れるようになりました。今回は測った結果を、例によってMQTTに載せてNode-REDへ報告し、Dashboard上にグラフ表示してみます。まずは前回プログラムのモジュール化から。
前々回、Node-REDダッシュボードのTemplateノードを使ってみました。表示ができるだけでなくボタンを配置して入力にも使える優れものでした。今回は同じく入出力兼用のformノードを使ってみます。ユーザーとのインタフェースを作るにはバッチリ?なノードです。
前回Templateノードを試してみました。しかし手元のパレットにはもう一つTemplateノードがあります。前回は「機能」パレットでしたが今回は「Dashboard」パレットの中のノードです。Dashboardは人とのインタフェースを担いますが、その中でも入出力双方をできるTemplateノードはお役立ちか?
前回、内蔵のLEDとスイッチがNode-REDから使えるように復旧しました。今回はいよいよ外付けハード追加と思ったのですが、その前にスクリプトを整理することにいたしました。カッコよく言うならリファクタリングというやつ。でも作業しながら、どうするのが良いのか迷いましたです。迷える子羊(?そうは見えないが)にお導きを。
前回は、Sequenceを作り出すために Splitノードを使ってしまいました。さすれば、今回は Joinノードを使ってSplitしたSequenceを元に戻してみるしかありません。やって見ればシミジミ会得できました。何もすることはありません。勝手に元に戻ります。これもSplitノードが「仕込んで」くれているお陰。
前回はSwitchノードを使って「仕分け」をやってみましたが、Sequence rulesによる仕分けというものは出来ませんでした。今回はSplitノードを使って配列要素をSequenceとして並べ、それをSwitchノードで仕分けてみたいと思います。まさにベルトコンベアで流れてくる箱を行き先別に仕分けるイメージ。
前回のChangeノードは、「積荷」を載せ替えたりするためのものでした。今回のSwitchノードは、「行き先」への仕分けを担うもの、という感じです。仕分けの方法もいろいろあって非常に便利です。今回はその基本部分を使ってみますが、一見しただけでもなかなか便利。
前回までで「エッジ側」M5ATOM LiteとNode-REDサーバー(Raspberry Pi 3)との間でMQTTを介してJSONオブジェクトを送受できるようになりました。しかし不満なのは送受信のタイミングです。前回まで単一のmainループにお任せだったので便利とは言えない仕組みでした。今回から uasyncioを使って改良していきたいと思います。
前回が「送信」であったので、今回は当然「受信」です。しかし受信で想定しているのは何か設定値がホストから指令されてくるというシーン。「設定値」ともなるとそれを保存しておく場所から用意しておかないとマズイ気がします。そこで、設定値はNode-REDからアクセスできるSQLiteのデータベースに記録しておき、それを取り出して送ることに。今のところ何も効果はないですが。
前回 MQTT Subscribe ができたので、MicroPythonで動いているM5ATOM LiteとNode-REDを動かしているRaspberry Pi 3機で上り下りの通信がOKとなりました。今回は、通信内容をJSON化して後で拡張しやすいようにしてみたいと思います。まずはPublish側から。使用するMicroPythonモジュールはujsonです。