前回、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 ノードも接続したつもりなのだけれど「未接続」と。なんでやねん。
勿論、ラズパイ3とラズパイ4のUARTはクロスケーブルでしっかり接続してあります。試みに前回の out フローを動かしてみれば、Helloメッセージが相手に到達いたします。
なぜ接続にならない?苦し紛れに前回フローの serial out ノードおよびそれが参照している serial port「設定ノード」を「無効」にし、serial in ノード側で /dev/ttyS0に向けた serial port「設定ノード」を再生成してみました。こんな感じ。接続OKとな(ドサクサまぎれにデバッグノードも追加してます。)
上記の状態で serial in は期待通りに動作、ラズパイ4から送られてくる文字列を受け取れてます。
思い立って serial outフローの「無効」を「有効」に変えてみるとこんな感じ。両方接続済となりました。やればできるじゃん。
Helloしてみると成功。しかし、今度は in の方が無反応となりました。「接続済」って書いてあるのだけれど。なして?
なんやら両方にからむ serial requestノードなどというものもあるみたいだし、また今度だな~。なんとかUARTが全二重で動くようにしたいものです。
今回の serial in ノードの設定
serial in ノード自体には大した設定箇所はありません。「鉛筆」アイコンを使って設定した、シリアルポートを指定するのみ。
さて、上の鉛筆アイコンから開いた serial-portノードの設定画面が以下に。今回は、入力のところです。デフォルトから変更したのは1か所。「入力の分割方法」のところの右端にある「\r 」のところです。デフォルトでは「\n」になってました。これは通信相手のminicom上で、Enterキーを押すと \r が送られる(多分、大抵の通信ソフトみたいに、送信コードを \r(CR) か \n(LF) とするかは設定できるような気がするのだけれど、設定の仕方を知らないので、こちらを変えてしまいました。
実行結果
ラズパイ4のminicomから from pi4のあとEnterキーを押すと以下のようなmsgがNode-REDのデバッグウインドウに現れます。到達しているね。
パソコンのブラウザで表示しているダッシュボードを見ればこんな感じ。ちゃんと見えてます。
とりあえず、outだけ、inだけは動いているみたいだけれども、UARTだしな、全二重で安定して動かしたいもんです。どこを直したらよいのか?