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 シリーズのデバイス
OSDebian 系 ARM64 Linux
Node-REDインストール済みで動作していること。先に Node-RED 入門を完了してください
ネットワークインターネット経由で HiveMQ 公開 MQTT broker にアクセスできること
アクセスNode-RED 用の Web ブラウザと、RK デバイスへのターミナルまたは SSH 接続

通信の仕組み

text
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 が動作していることを確認します。

bash
sudo systemctl status nodered.service --no-pager

必要に応じてサービスを起動します。

bash
node-red-start

このコマンドでサービスログが継続表示される場合は、Ctrl+C でターミナルに戻ります。Node-RED はバックグラウンドで動作し続けます。

デバイスのローカル IP アドレスを調べます。

bash
hostname -I

同じネットワーク上のコンピュータで Node-RED エディタを開きます。

text
http://<RK_DEVICE_IP>:1880

<RK_DEVICE_IP> をデバイスの実際の IP アドレスに置き換えます。Node-RED の設定時にエディタ認証を有効にした場合はログインしてください。

手順 2:MQTT 入力ノードを追加する

  1. Flow 1 を開くか、新しいフローを作成します。
  2. 左側のパレットで mqtt in を検索し、紫色の mqtt in ノードをワークスペースにドラッグします。
  3. ノードをダブルクリックして Edit mqtt in node を開きます。
  4. Server の横にある追加/編集ボタンをクリックし、MQTT broker 設定を作成します。バージョンにより + または鉛筆アイコンが表示されます。

手順 3:HiveMQ Broker を設定する

MQTT broker の設定ダイアログで次を入力します。

設定項目値
NameHiveMQ(任意の表示名)
Serverbroker.hivemq.com
Port1883
ProtocolMQTT V3.1.1
Client ID空欄にして自動生成 ID を使用
TLS無効
Username / Password空欄

HiveMQ broker の接続設定

残りの設定は既定値のままにし、エディタのバージョンに応じて Add または Update をクリックして broker 設定を保存します。

公開 broker はほかのユーザーと共有されます。ほかのテストと重複しにくいトピックを選んでください。この例では rk3588/seeed/demo を使用します。別のトピックを選ぶ場合は、購読設定と送信コマンドで同じものを使用してください。

手順 4:MQTT の購読を設定する

Edit mqtt in node に戻り、次を設定します。

設定項目値
ServerHiveMQ
ActionSubscribe to single topic
Topicrk3588/seeed/demo
QoS0
Outputauto-detect (parsed JSON object, string or buffer)
NameSeeedStudio

MQTT 入力のトピック、QoS、出力形式

Done をクリックしてノードを保存します。

MQTT トピックは大文字と小文字を区別します。Node-RED の購読トピックは、コマンドラインから送信するトピックと完全に一致させてください。独自のトピックに変更した場合は、手順 7 の送信コマンドも更新します。

手順 5:MQTT 入力を Debug に接続してデプロイする

  1. パレットで debug を検索し、緑色の debug ノードをワークスペースにドラッグします。
  2. SeeedStudio (mqtt in) の出力を debug ノードの入力に接続します。
  3. Debug ノードの設定を開き、出力を msg.payload のままにします。
  4. Done をクリックし、右上の Deploy をクリックします。
  5. Debug messages サイドバーを開きます。

作成したフローは次のようになります。

text
[SeeedStudio (mqtt in)] ----> [debug node]

MQTT 接続が確立すると、mqtt in ノードの下に緑色の connected ステータスが表示されるはずです。

手順 6:MQTT コマンドラインクライアントをインストールする

reComputer RK デバイスのターミナルで Mosquitto コマンドラインツールをインストールします。

bash
sudo apt update
sudo apt install -y mosquitto-clients

mosquitto_pub コマンドは MQTT メッセージを broker に送信します。Node-RED はすでに同じトピックを購読しているため、そのメッセージを受信できます。

手順 7:JSON テストメッセージを送信する

RK のターミナルで次のコマンドを実行します。

bash
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 フラグを使用します。

bash
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 ノードへメッセージが渡されるはずです。

メッセージには次のデータが含まれます。

json
{
  "device": "RK3588",
  "temperature": 25.6
}

MQTT 入力ノードの Output を JSON の自動検出に設定しているため、Node-RED はペイロードを解析済みの JavaScript オブジェクトとして表示できます。サイドバーにはトピック rk3588/seeed/demo も表示されます。

MQTT フローの接続と Debug で受信した JSON

メッセージの受信により、次の通信経路を確認できます。

reComputer RK ターミナル → HiveMQ 公開 broker → Node-RED MQTT in → Debug

要約

reComputer RK シリーズ上の Node-RED を MQTT broker に接続し、トピックを購読して、デバイスのターミナルから送信した JSON メッセージを受信しました。これを RK プラットフォームの MQTT ベース IoT アプリケーションの基礎として利用できます。

今後のチュートリアルでは、センサデータの処理、mqtt out ノードによるメッセージ送信、ほかの産業用プロトコルやダッシュボードとの連携へ拡張できます。

参考資料