ブロックを積みながら(73) Node-RED、Execした結果をDashboardに表示

Joseph Halfmoon

別シリーズでラズパイにMCP23017 IO Expanderを取り付け、8ビットのDIPスイッチの値を読み取るPythonスクリプトを作りました。しかし、暑さにかまけてPython書いて中断、Node-REDダッシュボードから制御する部分を後回しっと。残り作業は純然たるNode-REDの作業なのでこちらでやります。

※「ブロックを積みながら」投稿順 index はこちら

※Node-REDは Raspberry Pi 3 model B+ (Raspberry Pi OS, 32bit)上で動作させています。

やっつけなPythonスクリプトの件

Pythonスクリプトを書いただけで投げてあった件の記事は以下です。こちらにMCP23017の接続回路図と、8ビットポート毎に入出力可能な実験用のPythonスクリプトの全文があります。

やっつけな日常(22) ラズパイ、IO Expander制御、入力モード追加

また、出力側8ビット分については、すでにNode-REDとの接続まで作ってあります。そちらは以下に。

やっつけな日常(21) NodeRedダッシュボードからIO Expander制御

今回は(21)で作ってあった「出力パネル」の横に「入力パネル」を追加して、(22)で作ってあったPythonスクリプトを呼び出して入力パネルにDIPスイッチの様子を表示する、と。部品は出来とるし、ちょろい?でもメンドイです。

作製したNodeRedフローとノードの設定

フローは単純です。左から

    1. ダッシュボードの Button ノードで「読み取り(Get Port B)」ボタンを押すと
    2. Port Bからの入力を行うPythonスクリプトをExecノードで起動する
    3. Execノードの出力をFunctionノードで処理して
    4. ダッシュボードのChart ノードに棒グラフとして表示する

という塩梅。下の方にDebugノードが2個並んでいるのはExecノードでError発生したときに「原因を捕まえる」ため。Chartノードに灰色のInjectノードも接続しているのは空リストを送ってグラフをクリアするためです(デバッグ時に使うため。)GetPortB_FLOW

まずは肝心のPythonスクリプトを実行させるEXECノードの設定が以下に。ミソはたった一か所、コマンドライン引数の -INBフラグだけです。これでMCP23017のPort Bの8ビットの値が読み取られ、標準出力に

B= xxx

xxxは0から255の整数、ってな感じで結果が返ってきます。なお、DIPスイッチにはプルアップ抵抗ついていて、OFFだと1、ONだと0が読み取れます。

注意点は+引数という設定。以前のOUT側ではコマンドライン引数の末尾に出力値を付加するのに上流から来たmsg.payloadを載せていましたが、今回は不要であります。

Exec

つづいては、読み取ったPort Bの値(8ビット整数)をビット毎にバラシて表示用に加工するFunctionノードです。

Pythonスクリプトは Port Bなら B= xxxとか、Aなら A= yyy とかソースを告げてくれるですが、受け取るJavaScript側では頭の3文字は無視して、8ビット整数値部分のみをバラシて表示しています。手抜きだな。

表示する値は msg.payload に載せますが、異なる系列(今回は各ビットを「系列」として扱ってます)については msg.topic に系列名を載せるとさばいてくれるので、そちらに “Bit 0″などの文字列を載せて送り出します。

Function

結果表示は、右端のダッシュボードのChartノードです。特に言えば横棒グラフ指定くらいですかね。配色はデフォルトのままにしたので、topic毎(ここでは各Bit毎)に色変します。渋い見た目にするには「最初の色を全グラフで使用」にした方がよかったかな。まあ、見た目はいいか。また手抜きだな。

Chart

 

動作確認

さて、手抜きの結果が以下に。DIPスイッチのBIT 7, 5, 3, 1 をOFF、6, 4, 2, 0をONにしてから、「GET PORT B」ボタンを押したときの読み取り結果です。先ほど述べたようにOFFで1が読み取れる回路そのままの値です。

GetPortB

まあ、NodeRedもからIO Expander MCP23017の入出力双方できた、と。これまた手抜きのやっつけ仕事だな。

ブロックを積みながら(72) Node-RED、websocket in / out ノード へ戻る

ブロックを積みながら(74) Node-RED、rpi-gpioをDashboard接続 へ進む