STM32物联网项目---ESP8266微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制---MQTT篇(三)
一、前言
本篇文章通过发送AT指令,与云平台建立通讯:
1.创建云平台
2.烧录AT固件
3.MQTT订阅(本篇)
4.单片机代码编写
5.微信小程序(下载微信开发者工具即可使用)
二、AT指令集介绍
AT指令是一种文本序列,用于控制调制解调器、手机等通讯设备。“AT"代表"Attention”,其后跟随的文字指定要执行的命令。在ESP8266等模块中,AT指令用于设定模块参数、控制网络连接和其他功能。
以下是一些常用的AT指令示例:
AT:检测通信模块与控制端之间的连接。
AT+RST:重置模块。
AT+CWMODE:设置Wi-Fi工作模式(例如Station模式、AP模式)。
AT+CWJAP:连接Wi-Fi网络。
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指令后面都带有一些数字参数,可以通过上方文档了解每个参数的意义
1.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代理进行通信是必要的。
2.AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1
意义:此指令用于发起到MQTT服务器的连接。参数0是客户端ID,"mqtts.heclouds.com"是MQTT服务器地址,1883是服务器端口号,最后的1表示启用清理会话。
作用:根据提供的服务器详情和客户端配置信息,指令会尝试建立MQTT连接。
3.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服务器表明客户端想要接收与该主题相关的消息。
4.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服务器,服务器则将该消息转发给订阅了对应主题的所有客户端
5.AT+MQTTSUB=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/set",0
意义:该指令用于指示ESP8266模块订阅一个指定的MQTT主题,"$sys/YqRZ5hrM6p/CSDN/thing/property/set"。
作用:使ESP8266模块能够监听并接收到任何发送到这个主题的消息,通常这些消息是针对设备设置或控制指令。
开始用AT指令连接MQTT
记得将下面的内容更改自己的信息
按顺序从1到11上传即可,每次成功即返回“OK”;
收到最后一条需要回应的数据:
AT+MQTTPUB=0,"$sys/7M6S32xnSS/20010712/thing/property/set_reply","{\"id\":\"4\"\,\"code\": 200\,\"msg\":\"success\"}",0,0
7M6S32xnSS:设备ID
20010712:设备名称
4:ID(要与下发的ID相同)
注:如果第11条回应了“OK”,但是没有回应蓝框部分,这时候你就要注意了,因为他对后面没有任何影响(桀桀桀桀桀),只要发完第11条,平台下发了蓝框上面那一部分和“OK”就行。
OneNET数据下发
①:点击运维监控
②:点击API调试
③:物模型使用:设置设备属性
④:填入参数
⑤:这里是接收到的数据
⑥:回应数据:产品id和设备名称需要更改为自己的,以及里面回应的id需要和接收到的id一致
重点:先点击一次执行,然后看串口打印助手上面的ID:
此条消息是需要在约定时间内回复的,格式为,其中设备ID和设备名称改为自己的,id需要与下发的消息ID一致,提前放在待发送区,然后再次点击执行,在执行有灰色变为蓝色(执行右边圆圈结束)之前,发送这条数据:
AT+MQTTPUB=0,"$sys/7M6S32xnSS/20010712/thing/property/set_reply","{\"id\":\"28\"\,\"code\": 200\,\"msg\":\"success\"}",0,0
⑦:如果回应成功后,这个页面会显示code:0
成功之后在这个界面可以看到自己上传的23.6
每次下发这个指令,修改后面的数值,云平台的数据就会变化。
AT+MQTTPUB=0,"$sys/7M6S32xnSS/20010712/thing/property/post","{\"id\":\"123\"\,\"params\":{\"temp\":{\"value\":23.6\}}}",0,0
三、MQTT.fx使用教程
这个软件主要是测试上传和下发的数据是否有问题:
1.创建工程
2.订阅
在订阅栏输入以下网址:
$sys/7M6S32xnSS/20010712/thing/property/set 订阅
$sys/产品ID/设备名称/thing/property/set
如果你的ESP8266已经连接上云平台这个就会失败;
3.发布
图中2目标设备:
$sys/7M6S32xnSS/20010712/thing/property/post 发布
$sys/产品ID/设备名称/thing/property/post
图中3.发布内容:
严格版本:
{"id": "123","version": "1.0","params": {"temp": {"value": 12345}}
}
随意版本:
{"id":"123","params":{"temp":{"value":2.5}}}