使用 Node-RED 进行 MQTT 通信

最近更新:

介绍

MQTT 是一种轻量级发布/订阅消息协议,广泛用于物联网应用。设备将消息发布到 MQTT broker(消息代理)上的某个 topic(主题),其他客户端通过订阅该主题接收消息。

Node-RED 提供内置 MQTT 节点,可用于接收和处理物联网消息。本教程在 reComputer RK 系列设备上配置 Node-RED,订阅 HiveMQ 公共 MQTT broker 的主题,再从 RK 终端发布 JSON 消息,验证通信流程。

安全说明: 本例使用共享的 HiveMQ 公共 broker,通过 TCP 1883 端口连接,不使用 TLS 或身份认证。请仅发送测试数据,不要发送密码、个人信息或生产数据。生产部署应使用启用身份认证和 TLS 的 broker。

准备工作

项目要求
硬件reComputer RK 系列设备
操作系统Debian 系 ARM64 Linux
Node-RED已安装并运行,请先完成 Node-RED 入门
网络能够通过互联网访问 HiveMQ 公共 MQTT broker
访问方式用于打开 Node-RED 的浏览器,以及 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 地址。如果安装时启用了编辑器身份认证,请先登录。

步骤 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:连接 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 用于向 broker 发送 MQTT 消息。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 消息。

如需查看更详细的命令行输出,可添加 -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

小结

通过以上步骤,Node-RED 已连接 MQTT broker、订阅主题,并接收从 reComputer RK 设备终端发布的 JSON 消息,可作为 RK 平台上 MQTT 物联网应用的基础。

后续可扩展为传感器数据处理、使用 mqtt out 节点发布消息,或与其他工业协议和仪表盘集成。

参考资料