更新于 2026年10月20日

ESP32 与 Node-RED 的 HiveMQ 迁移

替换 HiveMQ 连接配置,使用经过校验的 TLS、受限的 RunMQTT 凭据,并验证真实 MQTT 消息往返。

先阅读迁移指南。本文提供配置与验收步骤,不代表所有固件或 Node-RED 版本均已认证兼容。使用私有测试 Broker 和合成数据进行验证。

ESP32 配置

若现有 MQTT 库支持所需协议和 TLS 校验,可继续使用。将 HiveMQ 域名替换为安全的 RunMQTT 域名,端口设置为 8883,复制完整的新设备用户名与密码。首次验证时保留 Topic 和消息格式,记录 MQTT 库、ESP32 框架及固件版本。

ESP-IDF 与 ESP-MQTT 用户应按已安装版本的 esp_mqtt_client_config_t 配置目标 URI 和新凭据,使用 ESP 证书包或正确的受信任根 CA 进行服务端验证。具体 API 请以对应版本的 ESP-MQTT TLS 示例为准。

Arduino 客户端使用 WiFiClientSecure,按 ESP32 core 支持的 API 加载正确的 CA 信任,再将安全传输交给现有 MQTT 客户端。不要沿用固定的旧 HiveMQ 证书,也不要用 setInsecure() 绕过迁移问题。证书验证前同步设备时钟。密码不能出现在串口日志、截图或提交的代码中。

不同 Arduino MQTT 库的包缓冲、QoS 和协议版本支持不同,例如只能以 QoS 0 发布的库不能用于 QoS 2 验收。须区分客户端限制与 Broker 能力。

Node-RED 配置

Node-RED MQTT cookbook说明了 MQTT 输入与输出节点共享的 Broker 配置。

  1. 备份现有 flow,私下保存旧 Broker 配置。准备新连接时停用命令发布者,避免重复执行动作。
  2. 为测试创建一个新的 MQTT Broker 配置。服务器填写 RunMQTT 安全域名,端口 8883,开启 TLS 与服务端证书校验。使用域名而非 IP,确保主机名校验有效。
  3. 在 Broker 配置的 Security 字段填入生成的设备用户名和密码。不同权限角色使用不同设备身份;并发连接的 Client ID 须唯一。
  4. 选择已部署 Node-RED 节点支持的 MQTT 版本。生产节点暂时保留原配置,用独立测试节点验证新连接。
  5. 创建 MQTT 输入节点,订阅 migration-check/nodered/state,QoS 1,连接到 Debug 节点并部署,等待显示已连接。
  6. 将 Inject 节点连接到 MQTT 输出节点,使用相同的新 Broker 配置。Topic 设为 migration-check/nodered/state,QoS 1,retain 关闭,注入唯一合成字符串。确认 Debug 收到相同值。输出节点显示已连接不能证明消息送达。
  7. 断开、重新部署并重复验证。使用受限测试身份检查禁止访问的 Topic,再用本地验证器独立检查相同端点。

仅为本次测试授予 migration-check/# 的发布与订阅权限。输入和输出节点可共享一个 Broker 配置,该连接也计入套餐。生产角色权限不同时,应创建不同配置与凭据。

浏览器客户端与 WSS

完整 URL 使用 wss://<broker>.tls-broker.runmqtt.com/mqtt。原生 TLS 的 8883 端口不能当成 WSS URL。检查路径、凭据、网络与代理支持,保持 TLS 校验开启。参阅已验证的 MQTT.js 示例。

设备群上线前验收

验证真实消息往返、Topic 拒绝、重启、断网、重启后的 TLS 信任及突发流量。按实际应用测试包大小和每客户端订阅数,确认重连后的当前状态与命令路由。保留旧配置至验收完成,再在 HiveMQ 退役前协调设备与后端分批切换。

保留消息和 QoS 2 需要 Growth 或 Scale。保留包标志存在已知兼容性限制,详见会话与投递。不要依据消息格式未变或一次连接成功推断完整兼容。