ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

全栈开发之ESP32+Mosquitto+NestJS MQTT通信环境搭建与排错流程

全栈开发之ESP32+Mosquitto+NestJS MQTT通信环境搭建与排错流程 全栈开发之ESP32MosquittoNestJS MQTT通信环境搭建与排错流程前言一、ESP32 MQTT基础代码结构二、ESP32连接WiFi三、配置MQTT服务器四、Mosquitto安装检查五、启动Mosquitto六、Mosquitto配置局域网访问关键七、确认Mosquitto监听成功八、遇到ESP32 MQTT连接失败九、定位state-2十、网线电脑 手机热点ESP32是否可行十一、ESP32 MQTT通信测试十二、ESP32返回结果十三、NestJS连接MQTT十四、HTTP控制ESP32十五、MQTT publish不能await返回ESP32结果十六、最终架构十七、开发IoT演进结束语前言文档链接1、实现目标ESP32||MQTT|Mosquitto Broker||MQTT|NestJS||微信小程序 / Web端2、最终效果ESP32 订阅控制指令NestJS 发布控制指令ESP32 执行 LED 控制ESP32 返回执行结果NestJS 接收结果NestJS 响应结果给Web前端一、ESP32 MQTT基础代码结构ESP32使用#includeWiFi.h#includePubSubClient.h创建 MQTT 客户端WiFiClient espClient;PubSubClientclient(espClient);关系ESP32||WiFiClient||TCP连接||MQTT Broker二、ESP32连接WiFi代码WiFi.begin(hmIoT,15289682517);等待while(!WiFi.isConnected()){Serial.println(try to connect WiFi);delay(3000);}如果是WiFi connect success!说明ESP32已经加入网络。三、配置MQTT服务器client.setServer(192.168.1.5,1883);参数作用192.168.1.5MQTT服务器IP1883MQTT默认端口也就是ESP32连接192.168.1.5:1883四、Mosquitto安装检查where mosquitto没有找不到文件 —— 说明未安装。有D:\A_download\mosquitto\mosquitto.exe —— 说明已安装。五、启动Mosquitto方法1Windows服务启动net start mosquitto停止net stop mosquitto查看sc query mosquitto正常STATE : 4 RUNNING方法2手动启动进入目录cd /d D:\A_download\mosquitto启动mosquitto.exe -v查看日志Opening ipv4 listen socket on port 1883六、Mosquitto配置局域网访问关键最开始遇到的问题查看端口netstat -ano | findstr 1883结果127.0.0.1:1883 LISTENING —— 只能本机连接。结构电脑自己|127.0.0.1|MosquittoESP32192.168.1.x|无法访问修改mosquitto.conf文件listener 1883 0.0.0.0 allow_anonymous truelistener从127.0.0.1:1883改为0.0.0.0:1883表示监听所有网卡。allow_anonymous允许ESP32、MQTTX、NestJS可以不用账号密码连接。七、确认Mosquitto监听成功netstat -ano | findstr 1883正确TCP 0.0.0.0:1883 LISTENING错误TCP 127.0.0.1:1883 LISTENING八、遇到ESP32 MQTT连接失败1、现象是串口输出try to connect MQTT Server MQTT connect failed增加Serial.println(client.state());得到state-22、PubSubClient状态码状态含义-4连接超时-3连接断开-2TCP连接失败-1网络失败0成功1协议错误2Client ID重复4账号密码错误九、定位state-2state-2说明不是MQTT协议问题。ESP32|TCP|192.168.1.5:1883连接不上。重点检查是否同一个局域网电脑192.168.1.5ESP32192.168.43.x说明是两个网络。错误结构无法访问电脑|路由器A ESP32|手机热点正确结构路由器||----电脑||----ESP32电脑192.168.1.5ESP32192.168.1.20十、网线电脑 手机热点ESP32是否可行问题电脑用网线192.168.1.5ESP32用手机热点192.168.43.x结果不通原因是两个局域网。解决方法1电脑和ESP32连接同一个路由器。路由器||--电脑(网线)||--ESP32(WiFi)解决方法2测试推荐电脑开启热点。电脑|WiFi热点|ESP32电脑192.168.137.1ESP32192.168.137.xx修改ESP32代码client.setServer(192.168.137.1,1883);十一、ESP32 MQTT通信测试ESP32订阅client.subscribe(ESP32/test);代表监听ESP32/test发送控制消息topicESP32/testpayload{ “action”:“led_toggle” }ESP32收到并执行String actiondoc[action].asString();digitalWrite(LED_PIN,HIGH);十二、ESP32返回结果ESP32client.publish(MQTTX/test,LED_ON_SUCCESS);NestJS订阅MQTTX/test收到LED_ON_SUCCESS十三、NestJS连接MQTT安装npm install mqtt连接mqtt.connect(mqtt://192.168.1.5:1883);订阅client.subscribe(MQTTX/test);监听client.on(message,(topic,message){console.log(message.toString());})十四、HTTP控制ESP32流程微信小程序 HTTP ↓ NestJS Controller ↓ mqtt.publish()↓ Mosquitto ↓ ESP32ControllerGet(sendLedToggle)asyncsendLedToggle(){constresultawaitthis.mqttService.sendLedToggle();return{code:200,data:result};}十五、MQTT publish不能await返回ESP32结果错误理解awaitclient.publish()实际publish成功 消息发送给Broker成功不是ESP32执行成功所以需要Promise message事件流程NestJS publish ↓ 等待 ↓ ESP32 publish返回 ↓ message事件 ↓ resolve()↓ HTTP返回十六、最终架构MQTT ESP32 ---------- Mosquitto||NestJS *************************************************************** ESP32订阅ESP32/test 返回MQTTX/test *************************************************************** NestJS发布ESP32/test 监听MQTTX/test十七、开发IoT演进当前ESP32|MQTT|NestJS↓增加设备ESP32 | device/{id}/command | NestJS↓增加用户微信小程序|JWT|NestJS|MQTT|设备↓生产设备 MQTT Broker 设备管理服务 Redis WebSocket 小程序结束语此文章主要解决了几个真实 IoT 开发最常见问题✅ Mosquitto安装与启动✅ MQTT端口1883检查✅ localhost监听改局域网监听✅ Windows服务配置✅ MQTT state-2定位✅ ESP32与服务器局域网问题✅ MQTT请求响应模型理解这套流程以后调任何ESP32 MQTT项目基本都可以直接套用。
返回列表