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.发布内容:

严格版本:

cs 复制代码
{
    "id": "123",
    "version": "1.0",
    "params": {
        "temp": {
            "value": 12.5
        }
    }
}

随意版本:

cs 复制代码
{"id":"123","params":{"temp":{"value":2.5}}}

发布之后,你在软件的订阅端也是能够看到的:

相关推荐
麦兜*3 天前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring
晶振厂家-晶发电子3 天前
晶振在5G时代的角色:高精度时钟的核心支撑
单片机·嵌入式硬件·5g·晶振·电子元器件·晶振知识
F137298015573 天前
WD5030A 芯片,12V降5V,输出电流12A,电路设计
stm32·单片机·嵌入式硬件·汽车·51单片机
小莞尔3 天前
【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统
c语言·stm32·单片机·嵌入式硬件·51单片机
三佛科技-187366133973 天前
分享机械键盘MCU解决方案
单片机·嵌入式硬件·计算机外设
李永奉3 天前
51单片机-使用IIC通信协议实现EEPROM模块教程
单片机·嵌入式硬件·51单片机
小莞尔3 天前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
bing_feilong3 天前
STM32精准控制水流
单片机·嵌入式硬件
Hello_Embed3 天前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
亿坊电商3 天前
物联网领域中PHP框架的最佳选择有哪些?
物联网·struts·php