快速入门
Node-MQ是运行在ESP32-S3模块上的通用固件。用户可以通过MQTT、WebSocket或UART接口向Node-MQ发送指令,实现硬件资源的配置与控制。我们以MQTT通道为例,配置一个GPIO用于输出,并控制一个LED灯作为演示。
准备MQTT服务与客户端
这里使用免费的MQTT服务 EMQX 作为MQTT Broker,参考 EMQX Broker设置。发送指令的MQTT客户端为 MQTTX(或你习惯的任意MQTT客户端),参考 MQTTX设置。
假设在EMQX上部署的Broker连接信息如下:
- 连接地址:
- v15f05e.ela.cn-hangzhou.emqxsl.cn
- MQTT over TLS/SSL端口:
- 8883
- WebSocket over TLS/SSL端口:
- 8084
下载的CA证书文件为:emqxsl-ca.crt。
并设置了访问控制用户名和密码:
- 用户名:
- nodemq
- 密码:
- nodenode
配置Node-MQ
以安装了Node-MQ的ESP32-S3-DevKitC-1开发板为例。

如图,ESP32-S3-DevKitC-1开发板有两个USB接口。左侧上方的USB连接ESP32-S3的USB_D-与USB_D+引脚,可作为USB串口(输出调试信息)或JTAG调试接口;左侧下方的USB通过开发板上的USB-UART转换芯片连接到ESP32-S3的U0TXD与U0RXD引脚(即UART0)。
Node-MQ的日志信息由左上方的USB串口输出,请使用USB数据线连接该USB口到PC端。Windows PC的设备管理器将识别其为USB串行设备(COMx)。

使用串口查看工具(如 Arduino串口监视器、CoolTerm 或在线工具如 ESPBoards)连接该串口即可查看Node-MQ输出的日志信息。

初始状态或未配置Wi-Fi网络的Node-MQ将启动SoftAP模式,提供Wi-Fi接入点:
- SSID:
- node-******
- 密码:
- nodenode
搜索Wi-Fi网络,找到以node-为前缀的网络名称并连接,若出现“当前WLAN无法联网”的提示,请选择“保持连接”。
接入Node-MQ SoftAP热点后,使用浏览器访问IP地址192.168.4.1,即打开Node-MQ设置页面。界面按功能划分为多个面板与标签组,分别设置如下:
General

General 标签组需要设置Wi-Fi网络(路由器)的SSID与密码,使Node-MQ可以连接到你的局域网中。同时,需要启用 MQTT Client。
注意
ESP32-S3不支持5 GHz Wi-Fi网络,此处必须设置2.4 GHz Wi-Fi网络对应的SSID与密码。
MQTT

按照在EMQX上实际部署的Broker连接信息进行设置:
- Transport -
SSL(MQTT over TLS/SSL) - Protocol Version -
3.1.1 - Hostname - 连接地址
- Port -
8883(MQTT over TLS/SSL端口) - Username - 用户名
- Password - 密码
其余配置项保持默认即可,点击面板底部 Save 按钮保存。
MQTT Certificate

当设置项 Transport 选择 SSL 或 WSS 时,设置界面将展开 MQTT Certificate 面板。请将下载CA证书文件emqxsl-ca.crt中的内容复制到文本框中,点击面板底部 Save 按钮保存。
设置与证书分别保存后,点击 Reboot 按钮(或按开发板 Reset 键)复位开发板。若配置正确,Node-MQ将连接到Wi-Fi网络,并连接EMQX MQTT Broker。USB串口将输出类似以下的启动日志(尾部):

请关注红线标注的部分,顺序表示:
- 成功连接到Wi-Fi网络并获取IP:
192.168.1.106(Node-MQ在局域网内的IP)。 - 启动HTTP服务:
http://192.168.1.106:80(即设置页面的Web服务器)。 - 成功连接到MQTT Broker:
v151f05e.ala.cn-hangzhou.emqxsl.cn(EMQX MQTT Broker)。 - 成功订阅MQTT主题:
node/action(用于接收指令)。
此时Node-MQ已启动为STA模式,并连接到本地网络,IP为192.168.1.106,在浏览器中访问该IP即打开Node-MQ设置页面。
若连接异常,请对照以上说明检查日志输出,重新进入设置页面修改相应的配置。
提示
注意日志中的Wi-Fi连接部分。若无法连接到Wi-Fi网络,Node-MQ将重新启动SoftAP模式,请按照之前的搜索网络(SSID:node-******)方式访问设置页面。
电路连接

如上图所示,由 GPIO5 串联一个 LED 二极管与一个 470 Ω 电阻,并连接到 3V3 电源引脚。
提示
请注意LED二极管的正极应连接到3V3电源一侧。
控制实现
至此,准备工作已就绪。我们将通过MQTT客户端发送指令,设置开发板的 GPIO5 为输出模式,并控制该引脚的输出电平来控制 LED 的亮灭。
打开MQTTX客户端并连接到EMQX MQTT Broker(参考 MQTTX设置)。客户端首先订阅node/post主题,以便接收由Node-MQ发来的通知或应答消息。同时,将发送与接收数据格式均设置为JSON。

Node-MQ启动后会自动发送type-online通知消息到node/post主题。请复位(Reset)开发板以验证MQTTX客户端是否收到type-online消息。

配置GPIO
客户端发送主题为node/action的指令消息。配置 GPIO5 为输出模式的指令(Payload)为:
{
"action": "config",
"output": [5]
}
Node-MQ收到指令后执行相应的配置动作,并将更新后的系统配置通过node/post主题反馈给发送方。对应以上的配置指令,反馈消息应为:
{
"type": "config",
"output": [5]
}若收到type-error错误消息,请根据消息提示检查配置指令的拼写,若无应答请检查发送主题是否正确。
控制GPIO
确认客户端收到正确的配置反馈后,即可发送引脚控制指令,例如设置GPIO5为高电平:
{
"action": "digital_write",
"high": [5]
}设置GPIO5为低电平:
{
"action": "digital_write",
"low": [5]
}或切换GPIO5电平状态(当前为高电平则设为低,当前为低电平则设为高):
{
"action": "digital_write",
"toggle": [5]
}digital_write是一条静默指令,即除非发生错误,Node-MQ不会反馈消息。请尝试以上三种指令,并观察 LED 灯是否受控(GPIO5 为低电平时亮,高电平时灭)。
以上就是通过MQTT指令通道控制Node-MQ的完整过程。