Node-RED による MQTT 通信
最終更新:
概要
MQTT は、IoT アプリケーションで広く使われている軽量なパブリッシュ/サブスクライブ型メッセージングプロトコルです。デバイス同士が直接通信する代わりに、MQTT broker の topic にメッセージを送信し、ほかのクライアントはそのトピックを購読してメッセージを受信します。
Node-RED には MQTT ノードが組み込まれており、MQTT アプリケーション全体を実装せずに IoT メッセージを受信・処理できます。このチュートリアルでは、reComputer RK シリーズ上の Node-RED を設定して HiveMQ 公開 MQTT broker のトピックを購読し、RK のターミナルから JSON メッセージを送信して接続を確認します。
セキュリティ: この例では共有の HiveMQ 公開 broker に TCP ポート 1883 で接続し、TLS や認証は使用しません。テストデータのみを使用してください。パスワード、個人情報、本番環境や産業設備のデータは送信しないでください。本番運用では認証と TLS を有効にした broker を使用します。
準備
| 項目 | 要件 |
|---|---|
| ハードウェア | reComputer RK シリーズのデバイス |
| OS | Debian 系 ARM64 Linux |
| Node-RED | インストール済みで動作していること。先に Node-RED 入門を完了してください |
| ネットワーク | インターネット経由で HiveMQ 公開 MQTT broker にアクセスできること |
| アクセス | Node-RED 用の Web ブラウザと、RK デバイスへのターミナルまたは SSH 接続 |
通信の仕組み
reComputer RK Terminal
(mosquitto_pub)
|
| Publish JSON to topic: rk3588/seeed/demo
v
HiveMQ Public MQTT Broker
(broker.hivemq.com:1883)
|
| Subscribe to the same topic
v
Node-RED on reComputer RK
MQTT in --> Debug
|
v
Debug sidebar: received JSON object手順 1:Node-RED エディタを開く
RK デバイスで Node-RED が動作していることを確認します。
sudo systemctl status nodered.service --no-pager必要に応じてサービスを起動します。
node-red-startこのコマンドでサービスログが継続表示される場合は、Ctrl+C でターミナルに戻ります。Node-RED はバックグラウンドで動作し続けます。
デバイスのローカル IP アドレスを調べます。
hostname -I同じネットワーク上のコンピュータで Node-RED エディタを開きます。
http://<RK_DEVICE_IP>:1880<RK_DEVICE_IP> をデバイスの実際の IP アドレスに置き換えます。Node-RED の設定時にエディタ認証を有効にした場合はログインしてください。
手順 2:MQTT 入力ノードを追加する
- Flow 1 を開くか、新しいフローを作成します。
- 左側のパレットで mqtt in を検索し、紫色の mqtt in ノードをワークスペースにドラッグします。
- ノードをダブルクリックして Edit mqtt in node を開きます。
- Server の横にある追加/編集ボタンをクリックし、MQTT broker 設定を作成します。バージョンにより + または鉛筆アイコンが表示されます。
手順 3:HiveMQ Broker を設定する
MQTT broker の設定ダイアログで次を入力します。
| 設定項目 | 値 |
|---|---|
| Name | HiveMQ(任意の表示名) |
| Server | broker.hivemq.com |
| Port | 1883 |
| Protocol | MQTT V3.1.1 |
| Client ID | 空欄にして自動生成 ID を使用 |
| TLS | 無効 |
| Username / Password | 空欄 |

残りの設定は既定値のままにし、エディタのバージョンに応じて Add または Update をクリックして broker 設定を保存します。
公開 broker はほかのユーザーと共有されます。ほかのテストと重複しにくいトピックを選んでください。この例では
rk3588/seeed/demoを使用します。別のトピックを選ぶ場合は、購読設定と送信コマンドで同じものを使用してください。
手順 4:MQTT の購読を設定する
Edit mqtt in node に戻り、次を設定します。
| 設定項目 | 値 |
|---|---|
| Server | HiveMQ |
| Action | Subscribe to single topic |
| Topic | rk3588/seeed/demo |
| QoS | 0 |
| Output | auto-detect (parsed JSON object, string or buffer) |
| Name | SeeedStudio |

Done をクリックしてノードを保存します。
MQTT トピックは大文字と小文字を区別します。Node-RED の購読トピックは、コマンドラインから送信するトピックと完全に一致させてください。独自のトピックに変更した場合は、手順 7 の送信コマンドも更新します。
手順 5:MQTT 入力を Debug に接続してデプロイする
- パレットで debug を検索し、緑色の debug ノードをワークスペースにドラッグします。
- SeeedStudio (mqtt in) の出力を debug ノードの入力に接続します。
- Debug ノードの設定を開き、出力を
msg.payloadのままにします。 - Done をクリックし、右上の Deploy をクリックします。
- Debug messages サイドバーを開きます。
作成したフローは次のようになります。
[SeeedStudio (mqtt in)] ----> [debug node]MQTT 接続が確立すると、mqtt in ノードの下に緑色の connected ステータスが表示されるはずです。
手順 6:MQTT コマンドラインクライアントをインストールする
reComputer RK デバイスのターミナルで Mosquitto コマンドラインツールをインストールします。
sudo apt update
sudo apt install -y mosquitto-clientsmosquitto_pub コマンドは MQTT メッセージを broker に送信します。Node-RED はすでに同じトピックを購読しているため、そのメッセージを受信できます。
手順 7:JSON テストメッセージを送信する
RK のターミナルで次のコマンドを実行します。
mosquitto_pub \
-h broker.hivemq.com \
-p 1883 \
-t "rk3588/seeed/demo" \
-m '{"device":"RK3588","temperature":25.6}'このコマンドは HiveMQ 公開 broker を使い、トピック rk3588/seeed/demo に JSON メッセージを 1 件送信します。
コマンドラインで詳しい出力を確認するには、-d フラグを使用します。
mosquitto_pub -d \
-h broker.hivemq.com \
-p 1883 \
-t "rk3588/seeed/demo" \
-m '{"device":"RK3588","temperature":25.6}'手順 8:Node-RED で受信メッセージを確認する
Node-RED エディタに戻り、Debug messages サイドバーを確認します。MQTT 入力ノードから Debug ノードへメッセージが渡されるはずです。
メッセージには次のデータが含まれます。
{
"device": "RK3588",
"temperature": 25.6
}MQTT 入力ノードの Output を JSON の自動検出に設定しているため、Node-RED はペイロードを解析済みの JavaScript オブジェクトとして表示できます。サイドバーにはトピック rk3588/seeed/demo も表示されます。

メッセージの受信により、次の通信経路を確認できます。
reComputer RK ターミナル → HiveMQ 公開 broker → Node-RED MQTT in → Debug
要約
reComputer RK シリーズ上の Node-RED を MQTT broker に接続し、トピックを購読して、デバイスのターミナルから送信した JSON メッセージを受信しました。これを RK プラットフォームの MQTT ベース IoT アプリケーションの基礎として利用できます。
今後のチュートリアルでは、センサデータの処理、mqtt out ノードによるメッセージ送信、ほかの産業用プロトコルやダッシュボードとの連携へ拡張できます。