ブロックを積みながら(93) Node-RED、serial-inとserial-out

Joseph Halfmoon

前回、Node-REDのserial-outノードをつかってラズパイ3の物理シリアルポートからラズパイ4へのシリアル垂れ流し成功。今回は逆方向です。対向機のラズパイ4からNode-REDサーバのあるラズパイ3へ向けてシリアル送信。まあね、片方づつは動くのだけれど、今のところinとoutを同時にというのはうまく動いてない感じ。トホホ。

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

※動作確認にはRaspberry Pi 3 model B+のRaspberry Pi OS(32bit)上にインストールした以下を使用しています。

    • Node-RED v2.0.5
    • node-red-dashboard 3.2.0
serial out とserial inノード

前回は serial outノードを使い、Helloメッセージをシリアルデバイス(/dev/ttyS0)を経由して対向機ラズパイ4上で走っている定番の通信ソフトminicomへ送ることができました。今回は、serial in ノードを使って逆方向の通信を確認してみる所存であります。

当初作成したフローが以下に。上が前回の out フロー。下が今回の in フローです。inした結果はダッシュボードのテキスト出力へ表示すると。しかし、serial port である/dev/ttyS0に serial in ノードも接続したつもりなのだけれど「未接続」と。なんでやねん。connected_unconnected

勿論、ラズパイ3とラズパイ4のUARTはクロスケーブルでしっかり接続してあります。試みに前回の out フローを動かしてみれば、Helloメッセージが相手に到達いたします。

なぜ接続にならない?苦し紛れに前回フローの serial out ノードおよびそれが参照している serial port「設定ノード」を「無効」にし、serial in ノード側で /dev/ttyS0に向けた serial port「設定ノード」を再生成してみました。こんな感じ。接続OKとな(ドサクサまぎれにデバッグノードも追加してます。)

SerialIN_Flow

上記の状態で serial in は期待通りに動作、ラズパイ4から送られてくる文字列を受け取れてます。

思い立って serial outフローの「無効」を「有効」に変えてみるとこんな感じ。両方接続済となりました。やればできるじゃん。connectionOK

Helloしてみると成功。しかし、今度は in の方が無反応となりました。「接続済」って書いてあるのだけれど。なして?

なんやら両方にからむ serial requestノードなどというものもあるみたいだし、また今度だな~。なんとかUARTが全二重で動くようにしたいものです。

今回の serial in ノードの設定

serial in ノード自体には大した設定箇所はありません。「鉛筆」アイコンを使って設定した、シリアルポートを指定するのみ。

SerialIN_Settings

さて、上の鉛筆アイコンから開いた serial-portノードの設定画面が以下に。今回は、入力のところです。デフォルトから変更したのは1か所。「入力の分割方法」のところの右端にある「\r 」のところです。デフォルトでは「\n」になってました。これは通信相手のminicom上で、Enterキーを押すと \r が送られる(多分、大抵の通信ソフトみたいに、送信コードを \r(CR) か \n(LF) とするかは設定できるような気がするのだけれど、設定の仕方を知らないので、こちらを変えてしまいました。

SerialIN_Port_Settings

実行結果

ラズパイ4のminicomから from pi4のあとEnterキーを押すと以下のようなmsgがNode-REDのデバッグウインドウに現れます。到達しているね。SerialIN_Debug

パソコンのブラウザで表示しているダッシュボードを見ればこんな感じ。ちゃんと見えてます。SerialIN_DashBoard

とりあえず、outだけ、inだけは動いているみたいだけれども、UARTだしな、全二重で安定して動かしたいもんです。どこを直したらよいのか?

ブロックを積みながら(92) Node-RED、隠れていた Serialノード一族 へ戻る

ブロックを積みながら(94) Node-RED、serial-requestノード へ進む