👇👇👇👇👇👇👇👇👇👇👇👇👇
👇(代码完美实现)stm32 + 新版 onenet + mqtt物联网(保姆级教程)
地址:
👇👇👇👇👇👇👇👇👇👇👇👇👇
👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆
前言
在自己一开始独自摸索,最后终于成功实现,于是打算写一篇文章记录和分享实现过程和方法,也算是对学习的一种总结和认可
本教程将逐步引导您了解如何为ESP8266-01s烧录AT固件,并通过简单的AT指令实现与OneNET云平台的MQTT设备连接。这是学习物联网应用开发不可或缺的基础技能。虽然这篇文章篇幅较长,但它为您提供的细节将是非常宝贵的,确保您能够按步就班、稳扎稳打地完成设置。
烧录固件->测试AT指令->编写单片机代码->编写微信小程序代码->实现数据上报和下发
介绍
AT指令集介绍
AT指令是一种文本序列,用于控制调制解调器、手机等通讯设备。“AT"代表"Attention”,其后跟随的文字指定要执行的命令。在ESP8266等模块中,AT指令用于设定模块参数、控制网络连接和其他功能。
以下是一些常用的AT指令示例:
AT
:检测通信模块与控制端之间的连接。AT+RST
:重置模块。AT+CWMODE
:设置Wi-Fi工作模式(例如Station模式、AP模式)。AT+CWJAP
:连接Wi-Fi网络。
!!AT指令集的优势在于其简单性,使得开发者能够不必深入微控制器的复杂编程,就能够快速实现无线通信的基本功能。!!
MQTT设备介绍
MQTT(Message Queuing Telemetry Transport) 是一个轻量级的、基于发布/订阅模型的消息协议,专为低带宽和不稳定网络环境设计,广泛用于物联网设备之间的通信。
在MQTT中,设备可以作为 发布者 发送消息,或者作为 订阅者 接收特定主题(Topic)的消息。这个模型允许多个设备共享特定的数据点并响应相应的变化。
MQTT设备使用这一协议,通过轻量级的消息交换,实现设备间的有效通讯和数据传输。
ESP8266/01s 是一个自带TCP/IP协议栈的Wi-Fi模块,使得任何微控制器都可以利用它访问Wi-Fi网络。它广泛被用于物联网项目,因其小巧的尺寸、稳定的性能和极具性价比的特性。
通过简单的串口通信,使用 AT指令 即可控制 ESP8266/01s 进行网络操作,如连接Wi-Fi、建立TCP连接、发送数据等。
升级至最新的AT固件后,ESP8266/01s还支持 MQTT 协议,可作为MQTT客户端直接连接到MQTT服务器,实现物联网设备和云服务之间的消息交换。
烧录固件
这里放个烧录MQTT AT 指令的教程传送门:
AT指令的解释及其用途
官方AT指令地址:ESP-AT用户指南https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/MQTT_AT_Commands.html#cmd-mqttpubraw很多AT指令后面都带有一些数字参数,可以通过上方文档了解每个参数的意义
-
AT+UART=9600,8,1,0,0
- 意义:这个指令用于设置ESP8266的串口通信参数。
UART=9600,8,1,0,0
设置串口通信的波特率为9600bps,数据位为8位,停止位为1位,无校验位,无流控。 - 作用:配置ESP8266的串口通信方式,确保ESP8266与连接的设备(如单片机或电脑)有着相同的通信参数,以便正确交换数据。
- 意义:这个指令用于设置ESP8266的串口通信参数。
-
AT
- 意义:这个指令是用来测试串口通信是否畅通的最基本指令。发送
AT
应该返回OK
,代表通信没有问题。 - 作用:验证ESP8266-01s模块已经正确连接并且准备接收更多的AT指令。
- 意义:这个指令是用来测试串口通信是否畅通的最基本指令。发送
-
AT+CWMODE=1
- 意义:该指令用于设置ESP8266的Wi-Fi工作模式。
CWMODE=1
将模块设置为Station模式(STA模式),这意味着模块可以连到一个已存在的Wi-Fi网络。 - 作用:配置ESP8266作为Wi-Fi客户端,让其可以连接到无线路由器。
- 意义:该指令用于设置ESP8266的Wi-Fi工作模式。
-
AT+CWDHCP=1,1
- 意义:此指令用于设置DHCP(动态主机配置协议)。
CWDHCP=1,1
的设置使ESP8266在Station模式下启用DHCP客户端,这样它可以自动从网络路由器获取IP地址。 - 作用:确保ESP8266在连接到Wi-Fi网络时能够自动获得IP地址。
- 意义:此指令用于设置DHCP(动态主机配置协议)。
-
AT+CWJAP="ESP","123456789"
- 意义:此指令用于连接到一个Wi-Fi热点。
CWJAP
后面的参数是网络SSID和密码。“ESP”是Wi-Fi的名称,“123456789”是连接该Wi-Fi网络的密码。 - 作用:使ESP8266连接到指定的Wi-Fi热点。
- 意义:此指令用于连接到一个Wi-Fi热点。
每个AT指令都是为了设置ESP8266模块的特定参数或执行特定的动作。正确使用这些AT指令,可以使ESP8266-01s成功地连接到网络,并进行进一步的操作,如数据传输或与MQTT服务器的通信。
打开正点原子的XCOM软件(其他的串口助手软件也可以)(资源包下载)
下一步
MQTT通信的发布和订阅简单的理解
通俗易懂地讲,MQTT就像是一个邮局,而主题(Topic)好比是邮局里的个人邮箱。
发布(Publish):
想象你有一些信息(如:今天天气怎样)想要告诉别人,你就把这个信息放进邮局的一个特定的邮箱(主题)里。
订阅(Subscribe):
如果有人想知道这个特定的信息,他们就可以告诉邮局,他们对这个邮箱(主题)感兴趣。这样,每当有新信息放入这个邮箱时,邮局就会把它送给那些订阅了这个邮箱的人。
举个例子:
- 如果你有一个智能天气站,它可以定期将天气更新(发布)放在“weather/today”这个邮箱(主题)里。
- 然后,任何对今天天气感兴趣的人们(如智能手机APP)都可以向邮局(MQTT服务器)表明他们对这个“weather/today”邮箱(主题)感兴趣(订阅)。
- 一旦智能天气站更新了今天的天气信息,所有订阅了这个邮箱的人都会收到这个消息。
这样的系统特别好的地方是,发送消息的人不需要知道谁在听,而听消息的人也不用知道谁在说。这就是MQTT在物联网中非常受欢迎的原因,它可以连接很多设备,让它们互相发送接收消息。
书接上回
对于上一篇文章,我们已经保存了OneNET MQTT的设备名称、产品ID及生成的Token
先解释一下接下来要用的AT指令的解释及其用途
下面是使用的产品id和设备名称还有Token都是我上一篇文章创建的,如果你们连接失败可以尝试发送我的
很多AT指令后面都带有一些数字参数,可以通过上方文档了解每个参数的意义
-
AT+MQTTUSERCFG=0,1,"CSDN","YqRZ5hrM6p","version=2018-10-31&res=products%2FYqRZ5hrM6p%2Fdevices%2FCSDN&et=2028715245&method=md5&sign=G4I0xqIYmYUtCdTTo2t%2FqQ%3D%3D",0,0,""
- 意义:这个指令用于配置MQTT客户端的用户参数。参数
0
指的是客户端ID,1
为MQTT版本,"CSDN"
是设备名称,"YqRZ5hrM6p"
为产品ID,后面一长串是Token,最后的两个0
表示是否清理会话和是否启用遗嘱消息。 - 作用:设置了客户端的认证信息和其他MQTT连接选项,这对于与MQTT代理进行通信是必要的。
- 意义:这个指令用于配置MQTT客户端的用户参数。参数
-
AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1
- 意义:此指令用于发起到MQTT服务器的连接。参数
0
是客户端ID,"mqtts.heclouds.com"
是MQTT服务器地址,1883
是服务器端口号,最后的1
表示启用清理会话。 - 作用:根据提供的服务器详情和客户端配置信息,指令会尝试建立MQTT连接。
- 意义:此指令用于发起到MQTT服务器的连接。参数
-
AT+MQTTSUB=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/post/reply",0
- 意义:指令用于订阅MQTT主题。
0
是客户端ID,"$sys/YqRZ5hrM6p/CSDN/thing/property/post/reply"
是MQTT主题,最后的0
是请求的服务质量(QoS)等级。 - 作用:向MQTT服务器表明客户端想要接收与该主题相关的消息。
- 意义:指令用于订阅MQTT主题。
-
AT+MQTTPUB=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/post","{\"id\":\"123\"\,\"params\":{\"temp\":{\"value\":23.6\}}}",0,0
- 意义:通过此指令将消息发布到MQTT主题。
0
是客户端ID,"$sys/YqRZ5hrM6p/CSDN/thing/property/post"
是要发布消息的主题。紧接着的是要发布的消息内容,0,0
分别表示消息的QoS等级和是否保留消息。 - 作用:发送一条消息到MQTT服务器,服务器则将该消息转发给订阅了对应主题的所有客户端
- 补充:这里后面的json格式数据是嵌入在字符串,需要加入转义字符,如果用json库组装json数据的话,Wifi模块识别错误,这是C语言字符串中双引号需要转义 看ESP的AT指令手册上有说明
可以发送:
其中“70”代表要发送的字符串长度,需要严格匹配,需要计算\r\n换行回车符AT+MQTTPUBRAW=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/post",70,0,0
然后再发送需要发送的json格式数据,例如:
这样就实现了不需要嵌入字符串中转义双引号了,可以实现jansson库组装了{"version": "1.0", "id": "123", "params": {"temp": {"value": 24.0}}}
- 意义:通过此指令将消息发布到MQTT主题。
5.AT+MQTTSUB=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/set",0
- 意义:该指令用于指示ESP8266模块订阅一个指定的MQTT主题,
"$sys/YqRZ5hrM6p/CSDN/thing/property/set"
。 - 作用:使ESP8266模块能够监听并接收到任何发送到这个主题的消息,通常这些消息是针对设备设置或控制指令。
开始用AT指令连接MQTT
记得将下面的内容更改自己的信息
串口发送的内容 | 串口接收的内容 |
---|---|
1.AT+UART=9600,8,1,0,0 | OK |
2. AT | OK |
3.AT+RST | OK |
4. AT+CWMODE=1 | OK |
5. AT+CWDHCP=1,1 | OK |
6. AT+CWJAP="WIFI名称","WIFI密码" | OK |
7.AT+MQTTUSERCFG=0,1,"设备名称","产品id","你的Token",0,0,"" | OK |
8.AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1 | OK |
9.AT+MQTTSUB=0,"$sys/产品id/设备名称/thing/property/post/reply",0 | OK |
10.AT+MQTTSUB=0,"$sys/产品id/设备名称/thing/property/set",0 | OK |
11.AT+MQTTPUB=0,"$sys/产品id/设备名称/thing/property/post","{\"id\":\"123\"\,\"params\":{\"属性名\":{\"value\":数值\}\,\"属性名\":{\"value\":数值\}}}",0,0 | OK |
第十一条可以替换:
11.AT+MQTTPUBRAW=0,"$sys/产品id/设备名称/thing/property/post",70,0,0 | OK |
第11步骤可以查看官方文档:官方演示
OneNET数据上报:
OneNET数据下发:
①:点击运维监控
②:点击API调试
③:物模型使用:设置设备属性
④:填入参数
⑤:这里是接收到的数据
⑥:回应数据:产品id和设备名称需要更改为自己的,以及里面回应的id需要和接收到的id一致
AT+MQTTPUB=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/set_reply","{\"id\":\"4\"\,\"code\": 200\,\"msg\":\"success\"}",0,0
⑦:如果回应成功后,这个页面会显示code:0
通过串口发送数据后可以在OneNET设备查看是否有数据
如果看到数据成功同步显示了 祝贺您!您已经成功完成了使用AT指令连接单片机和ESP8266,并实现了数据的上传下载。现在,您不仅掌握了基本的物联网通信技能,而且为后续深入学习打下了坚实的基础。接下来,当您涉足程序开发和微信小程序相关内容,您会发现之前种下的智慧之种已经开始生根发芽,因为有了这次经验的积累,接下来的学习旅程肯定会更加顺利。继续加油,物联网的世界等待您去探索!
云平台物模型属性设置和wifi模块上报数据注意事项
在操作:“设置设备属性”时,里面填的参数标识符,必须是已经在设备中存在的属性,例如创建了“command”才能使用command,否则无效
在操作“wifi模块AT指令上报数据”时,上报的数据和属性标识符都必须符合设备中的数据,例如创建了个整形的数据属性,但是上报时发送了非整形的数据,那么也会上报失效
附加内容 MQTT.fx 1.7.1使用教程
这里放一个MQTT.fx 1.7.1使用教程(包含下载软件)的传送门:
(软件)MQTT.fx 1.7.1使用说明(OneNET-MQTT-API调试)https://blog.csdn.net/Wang2869902214/article/details/142487056
这里OneNET官方的文档说明中包含MQTT.fx 1.7.1 的连接使用说明,写的很详细,这里放个地址,根据官方的文档说明一步一步来,仔细查看步骤是可以连接成功的
OneNET官方文档:MQTT协议接入 最佳实践https://open.iot.10086.cn/doc/v5/fuse/detail/922