ESP8266-01s通过MQTT协议数据上云

欢迎入群共同学习交流
时间记录:2024/2/17

一、准备工作

(1)下载MQTT透传AT固件(安信可官网下载即可)下载链接
(2)为ESP8266-01S烧录固件
(3)MQTT协议介绍:数据基于发布订阅形式传输,长连接

二、MQTT相关的AT命令

(1)AT+MQTTUSERCFG=0,1,“客户端ID”,“用户名”,“密码”,0,0,“”\r\nMQTT用户属性配置
AT+MQTTUSERCFG
(2)AT+MQTTCLIENTID=0,“客户端ID”\r\n配置MQTT客户端ID
(3)AT+MQTTUSERNAME=0,“用户名”\r\n配置MQTT登录用户名
(4)AT+MQTTPASSWORD=0,“密码”\r\n配置MQTT登录密码
(5)AT+MQTTCONNCFG=LinkID,keepalive,disable_clean_session,“lwt_topic”,“lwt_msg”,lwt_qos,lwt_retain\r\n配置MQTT连接属性
AT+MQTTCONNCFG
(6)AT+MQTTCONN=0,“MQTT服务器IP”,“MQTT服务器端口”,重连标志x\r\n连接MQTT服务器,x=1重连,x=0不进行重连
(7)AT+MQTTCONN?\r\n查询连接的MQTT服务器信息
(8)AT+MQTTPUB=LinkID,“topic”,“data”,qos,retain\r\n发布消息
AT+MQTTPUB
(9)AT+MQTTSUB=LinkID,“topic”,qos\r\n订阅主题
(10)AT+MQTTSUB?\r\n查询所有订阅的主题
(11)AT+MQTTUNSUB=LinkID,“topic”\r\n取消订阅指定主题
(12)AT+MQTTCLEAN=LinkID\r\n关闭连接

三、通过MQTT协议连接ONENET物联网平台发布接收消息

(1)创建STA模式连接网络
AT\r\n
AT+CWAUTOCONN=0\r\n
AT+RST\r\n
AT+CWMODE=1\r\n
AT+CWJAP=“SSID”,“密码”\r\n
(2)通过MQTT透传AT指令连接服务器上传接收数据
ONENET的MQTT协议接入文档地址
Token工具下载使用文档地址
AT+MQTTUSERCFG=0,1,“设备名/设备id”,“产品ID”,“Token工具生成的鉴权信息”,0,0,“”\r\n
AT+MQTTCONN=0,“mqtts.heclouds.com”,1883,0\r\n
AT+MQTTSUB=0,“$sys/产品ID/设备ID/thing/property/set”,0\r\n
AT+MQTTPUB=0,“$sys/产品ID/设备ID/thing/property/post”,“{\“id\”:\“123\”\,\“params\”:{\“temp\”:{\“value\”:86}\,\“humi\”:{\“value\”:55}}}”,0,0\r\n
(3)通过平台下发数据
设置属性值
设置属性值
收到数据进行解析
收到数据

四、通过MQTT协议上传数据至阿里云

(1)创建STA模式连接网络
(2)通过MQTT透传AT指令连接服务器上传接收数据(MQTT连接参数均由平台自动生成)
MQTT连接参数
AT+MQTTUSERCFG=0,1,“NULL”,“test001&hv35Sj2mf8c”,“818c7f5f20644b41add0bff00e8e7e0a014840a65f44321b2181b35c2cfff228”,0,0,“”\r\n
AT+MQTTCLIENTID=0,“hv35Sj2mf8c.test001|securemode=2\,signmethod=hmacsha256\,timestamp=1708184385635|”\r\n注意点:参数一定要加转义字符“\”,否则会设置失败
AT+MQTTCONN=0,“iot-06z00ahw0e1vcqn.mqtt.iothub.aliyuncs.com”,1883,0\r\n
AT+MQTTPUB=0,“/sys/hv35Sj2mf8c/test001/thing/event/property/post”,“{\“params\”:{\“temp\”:88\,\“humi\”:50}}”,0,0\r\n
(3)通过平台下发数据
设置属性
收到数据进行解析
收到数据

<think>嗯,用户遇到了使用ESP8266模块通过AT指令连接MQTT服务器时出现MQTTDISCONNECTED错误的问题。我需要先分析可能的原因,然后逐步给出解决方案。首先,用户提供的命令是AT+MQTTCONN=<LinkID>,"host",port,reconnect。根据参考的AT指令格式,参数是否正确?比如LinkID通常为0,主机地址是否正确,端口是否正确。MQTTS通常使用1883或8883端口,如果服务器是mqtts.heclouds.com,可能需要确认是否使用TLS,这时候端口可能是8883,并且需要配置SSL。另外,网络连接是否正常,是否已经成功连接到WiFi?还有可能是MQTT服务器要求客户端ID、用户名或密码,而用户没有提供这些参数。另外,reconnect参数是否正确,比如0或1。需要检查每个参数的格式是否正确,比如引号是否正确,逗号是否多余。此外,ESP8266的固件版本是否支持MQTT功能,可能需要升级固件。还有可能服务器防火墙阻止了连接,或者服务器暂时不可用。需要一步步排查,从网络连接开始,然后是参数设置,最后考虑服务器问题。</think>### 问题分析:AT+MQTTCONN返回MQTTDISCONNECTED错误 当使用ESP8266模块执行`AT+MQTTCONN`连接MQTT服务器时出现`MQTTDISCONNECTED`错误,可能涉及以下原因及解决方法: #### 1. 检查网络连接状态 - **步骤**:先通过`AT+CWJAP?`确认模块已成功连接WiFi网络,确保返回`+CWJAP:<SSID>,<bssid>,<channel>,<rssi>`格式的响应[^1]。 - **失败表现**:若未连接WiFi,所有MQTT操作均无法进行。 #### 2. 验证MQTT服务器参数 - **主机与端口**:确认服务器地址`mqtts.heclouds.com`和端口`1883`是否支持明文通信。某些平台要求使用加密端口(如`8883`),此时需启用SSL并配置`AT+MQTTSSL`。 - **参数格式**:检查命令格式是否为: ```plaintext AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1 ``` 注意`host`需加英文双引号,参数间用逗号分隔且无空格。 #### 3. 检查鉴权信息 - **必要参数**:部分MQTT服务器要求客户端提供`clientID`、用户名和密码,需通过`AT+MQTTUSERCFG`预先配置: ```plaintext AT+MQTTUSERCFG=0,<clientID长度>,"<clientID>",<用户名长度>,"<username>",<密码长度>,"<password>" ``` 若未配置,服务器会拒绝连接。 #### 4. 固件与协议兼容性 - **固件版本**:使用`AT+GMR`查询模块固件版本,低于**v2.2.0**可能不支持完整MQTT功能,需升级固件。 - **协议兼容**:确认服务器支持的MQTT协议版本(如3.1.1),必要时通过`AT+MQTTCONN`的扩展参数调整。 #### 5. 服务器状态与防火墙 - **服务可用性**:使用PC端MQTT客户端(如MQTT.fx)测试相同地址和端口,排除服务器临时故障。 - **防火墙规则**:检查ESP8266所在网络是否允许出站TCP连接至目标端口。 ### 操作示例 ```plaintext // 连接WiFi AT+CWJAP="SSID","password" // 配置MQTT鉴权(以OneNET平台为例) AT+MQTTUSERCFG=0,12,"device123",5,"user",8,"password" // 发起MQTT连接 AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1 ``` ### 典型错误场景 | 现象 | 原因 | 解决方案 | |---------------------|-----------------------|------------------------| | `+MQTTDISCONNECTED` | WiFi未连接 | 检查`AT+CWJAP`响应 | | 同上 | 参数格式错误 | 检查引号/逗号/空格 | | 同上 | 未配置SSL加密 | 改用端口8883并启用SSL |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值