ESP8266/01s AT指令连接OneNET MQTT篇上报和下发数据
1. 前言
在上一次的实验里,我们借助电脑软件mqttx的帮助,成功地与OneNet平台上的设备建立了MQTT协议连接。不仅模拟发送了温湿度数据,还接收到了控制LED1的指令。这次,我们将使用硬件模块ESP8266再次实现同样的目标。相信这将是一次既有趣又能学到新知识的经历!
2. 获取资料
扫描下方二维码加入嵌入式技术交流群,即可获取源码压缩包,群内有更多相关资料,并同步答疑驱动开发、移植问题及后续版本更新,同时有更多嵌入式问题也欢迎讨论~ 181-921-938
3. 硬件准备
3.1. 联芯物联网开发板-LX-IOT-F103
本教程原文都将使用此开发板进行展示,关于开发板详细请浏览:
此处为语雀内容卡片:https://www.yuque.com/u54102073/mol0bc/wa9y5yt2qfvip1mh
优点:
- 板载DAP-Link烧录器+虚拟串口:实现一根USB Typec线烧录+串口打印,无需多调试器与杜邦线连接。
- 板载ESP8266+拨码开关:只需要将拨码开关的DAP串口与ESP8266串口连接,即可实现在电脑串口调试软件中实现直接与ESP8266通信,减少杜邦线连接与降低因杜邦线产生的问题概率。
- 板载多执行器与传感器,能够作为学习,方案快速验证板。
3.2. 或自行购买硬件
无需额外配件,准备以下 4 款工具即可完成全部功能:
- STM32F103C8T6 最小系统板
- ESP-01S / 直插引脚版 ESP8266-12F
- CH340 串口调试工具
- ST-Link 烧录工具
4. wifi烧录固件
4.1. 进入烧录下载模式 (关键步骤)
分两种硬件场景,操作略有区别,看到 WiFi 蓝灯单次闪烁 = 成功进入模式:
- 联芯开发板烧录wifi固件
用杜邦线或镊子短接板载 WiFi 的两个烧录焊盘 → 按下 WiFi 复位键 → 蓝灯闪烁后松开短接工具即可。
- 自行购买的模块烧录固件
将 GPIO0 引脚与 GND 短接(拉低电平)→ 重新给模块上电 / 短接 RST 复位引脚后松开 → 蓝灯单次闪烁即完成。
4.2. 串口连线 (电脑 与 ESP8266)
- 联芯开发板烧录wifi 与 电脑串口连线
调整串口拨码开关:最上方 2 位拨到右侧(导通),下方 4 位拨到左侧(断开)。
- 自行购买的模块 与 电脑串口连线
严格交叉连接:WiFi 的 RX 引脚 ↔ 串口工具 TX 引脚;WiFi 的 TX 引脚 ↔ 串口工具 RX 引脚。
4.3. 烧录固件
- 打开官方 ESP8266 固件烧录软件,芯片型号选择
ESP8266;

- 固件选择:1471 号 AT 固件(兼容 1MB Flash 的 ESP-01S、4MB Flash 的 ESP8266-12F,通用无兼容问题);
- 参数设置:烧录地址填
0,选择电脑识别的串口号,波特率固定115200(稳定性最佳); - 点击开始进行烧录;若长时间无反应,重新进入烧录模式,并检查 RX/TX 接线、拨码开关。

4.4. 烧录成功验证
- 烧录完成后点击停止,关闭烧录软件;
- 打开串口调试助手,波特率设置为
115200; - 取消 GPIO0 短接,给 ESP8266 复位 / 重新上电;
- 查看串口打印:输出信息与教程图示一致(核对固件版本号、编译时间),即为烧录成功;
- 功能测试:串口发送指令
AT(必须加回车换行),模块返回OK,说明 AT 指令功能正常。

5. 基础AT指令
这里放一个乐鑫官方的AT指令手册:AT 命令集 - ESP32 - — ESP-AT 用户指南 latest 文档
烧录的固件默认波特是115200,数据位:8,校验位:无,停止位:1。
这里我是用微软商店下载的《串口调试助手》软件,免费使用基础功能,当然用其他的串口软件也可以。
串口如下图配置,还有下面的勾选:“显示发送字符串”,方便查看我们发送的数据是否有被模组响应。

5.1. AT:测试 AT 启动
| 指令 | 响应 | 功能 |
| AT | OK | 测试模组是否处于工作状态 |
5.2. AT+RST:重启模块
| 指令 | 响应 | 功能 |
| AT+RST | OK | 软件复位,恢复所有运行状态 |
5.3. AT+RESTORE:恢复出厂设置
| 指令 | 响应 | 功能 |
| AT+RESTORE | OK | 恢复所有参数为默认值,并重启 |
主要用于系统第一次运行时候,清空所有参数。
5.4. ATE:开启或关闭 AT 回显功能
| 指令 | 响应 | 功能 |
| ATE1 | OK | 打开回显 |
| ATE0 | OK | 关闭回显 |
ATE1:开启回显后,使用串口助手发送AT指令,模组会返回AT指令和响应。
ATE0:关闭回显后,使用串口助手发送AT指令,模组只会返回响应。
这个功能不会保存进flash中,复位后效果消失,默认开启回显,所以需要在复位指令后使用。
5.5. 执行效果图
发送指令时,注意要在后面加上换行回车,按下键盘回车即可。

发送效果

①:AT,接收到:回显的"AT",和响应的“OK”数据,说明模组和通信正常。
②:AT+RST复位,接收到:回显的"AT+RST",和响应的“OK”数据,以及后面的模组初始化运行Log。
③:ATE0关闭回显,接收到:回显的"ATE0",和响应的“OK”数据。
④:再次发送AT,只有响应的“OK”数据,刚刚发送的回显指令生效。
6. wifi指令
6.1. AT+CWMODE:查询/设置 Wi-Fi 模式
| 指令 | 响应 | 功能 |
| AT+CWMODE=1 | OK | 设置Wi-Fi为Station模式连接热点 |
6.2. AT+CWJAP:连接 AP
| 指令 | 响应 | 功能 |
| AT+CWJAP="iqoo123","12345678" | | 连接2.4GHz wifi |
这里修改成自己的wifi账号与密码。
注意:连接的wifi必须是2.4GHz,否则无法连接。
如果返回其他错误,确保wifi账号密码正确,以及频段是2.4GHz的,建议电源可支持峰值电流500mA以上。
6.3. AT+CWSTATE:查询 Wi-Fi 状态和 Wi-Fi 信息
| 指令 | 响应 | 功能 |
| AT+CWSTATE? | | 查询当前wifi连接状况 |
在后续的单片机程序中,通过此指令state字段是否为2,来判断wifi是否成功连接。
参数
- <state>:当前 Wi-Fi 状态
-
- 0: ESP32 station 尚未进行任何 Wi-Fi 连接
- 1: ESP32 station 已经连接上 AP,但尚未获取到 IPv4 地址
- 2: ESP32 station 已经连接上 AP,并已经获取到 IPv4 地址
- 3: ESP32 station 正在进行 Wi-Fi 连接或 Wi-Fi 重连
- 4: ESP32 station 处于 Wi-Fi 断开状态
- <”ssid”>:目标 AP 的 SSID
6.4. 执行效果图
发送指令时,注意要在后面加上换行回车,按下键盘回车即可。

①:设置Station模式。
②:连接2.4GHz wifi。
③:查询当前wifi信息,可以看到state字段是2,说明连接成功。
7. mqtt指令
7.1. AT+MQTTUSERCFG:设置 MQTT 用户属性

| 指令 | 响应 | 功能 |
| OK | 配置MQTT参数 |
- <”client_id”>:MQTT 客户端 ID,最大长度:256 字节。替换自己的“设备名称”。
- <”username”>:用户名,用于登陆 MQTT broker,最大长度:64 字节。替换自己的“产品ID”。
- <”password”>:密码,用于登陆 MQTT broker,最大长度:64 字节。替换自己的“鉴权Token”。
- 其他参数默认。
这里有个值得注意的地方:

这里不知道是文档写错了还是啥原因,我的password长度大于64字节,还是可以正常设置,而且client_id长度一般比password长度短,感觉是这里的长度写反了。
7.2. AT+MQTTCONN:连接 MQTT Broker

| 指令 | 响应 | 功能 |
| OK | 连接MQTT服务器 |
- <”host”>:MQTT broker 域名,最大长度:128 字节。替换OneNET MQTT域名:"mqtts.heclouds.com"。
- <port>:MQTT broker 端口,最大端口:65535。替换OneNET MQTT端口:1883
7.3. AT+MQTTCONN?:查询 MQTT Broker

| 指令 | 响应 | 功能 |
| AT+MQTTCONN? | | 查询连接MQTT信息与状态 |
在后续的单片机程序中,通过此指令state字段是否为6,来判断mqtt是否连接成功并订阅了主题。
7.4. AT+MQTTSUB:订阅 MQTT Topic

| 指令 | 响应 | 功能 |
| OK | 订阅“设备属性上报响应”主题 |
| OK | 订阅“设备属性设置请求”主题 |
- <”topic”>:订阅的 topic。替换自己的“产品ID”与“设备名称”。
这里实现订阅“设备属性上报响应”主题,是为了接收上报数据的响应,来判断数据是否成功上报。
这里实现订阅“设备属性设置请求”主题,是为了接收平台下行的数据,来根据数据中的指令来执行对应的操作。
7.5. 执行效果图
发送指令时,注意要在后面加上换行回车,按下键盘回车即可。

①:设置MQTT属性,注意填写自己的信息。
②:连接MQTT服务器,填写自己的信息,如果显示断开连接,那么就是信息不对。
③:获取MQTT状态,第二个参数是state参数,4代表连接成功,但是还没订阅主题。
④:订阅“设备属性上报响应”主题,这里如果主题内容是错的,那么OneNET那边会主动断开MQTT连接。
⑤:订阅“设备属性设置请求”主题,这里如果主题内容是错的,那么OneNET那边会主动断开MQTT连接。
⑥:再次获取MQTT状态,第二个参数是state参数,6代表连接成功,并且成功订阅了主题。
8. 上行数据
这里上报模拟温湿度数据到OneNET上。
8.1. AT+MQTTPUBRAW:发布长 MQTT 消息

需要“发送的字符串长度”可以使用这个在线字符串计数网站:字符计数器:计算字符数,
注意在“数据模式”下发送数据可以不用加换行回车符。
统计好字符串长度后,填写长度参数。
| 指令 | 响应 | 功能 |
| | 进入数据模式,发送指定长度到“设备属性上报请求”主题之后自动退出 |
| +MQTTPUB:OK | 发送数据 |
订阅了主题的情况下还会接收到“设备属性上报响应”主题的数据:
+MQTTSUBRECV:0,"$sys/0g8ZhlAicM/dev-001/thing/property/post/reply",39,{"id":"123","code":200,"msg":"success"}
8.2. 执行效果图
将上方的指令依次发送:

①:发布长数据,这里发布115字节的数据到“设备属性上报请求”主题。
②:发送115字节数据,之后自动退出。
③:由于前面订阅了“设备属性上报响应”主题,上报数据后,会接收到响应内容,可以看到msg是success,说明上报数据成功。
9. 下行数据
这里接收OneNET下行的数据,例如"LED1":false指令。
9.1. OneNET API调试

这里进行API调试,填写自己的产品ID,设备名称,
params填写:
{
"LED1": true
}
然后点击执行。
9.2. 串口接收到数据

这里接收到数据:
+MQTTSUBRECV:0,"$sys/0g8ZhlAicM/dev-001/thing/property/set",50,{"id":"17","version":"1.0","params":{"LED1":true}}
可以看到里面有{"LED1":true},后续单片机程序就解析里面的标识符"LED1"和"true"数值,来进行对应的操作,例如这里对应的“开灯”。
9.3. 响应

我们刚刚只是纯接收数据,并没有进行响应数据,所以OneNET这边显示“设备响应超时”,所以我们需要在接收到数据5s内进行数据回应
通过我们之前使用MQTTX软件,知道了响应的方法与主题。
这里的发送数据的id,需要和接收到数据的id保持一致,例如接收到的数据,里面的json数据的id是"17":
+MQTTSUBRECV:0,"$sys/0g8ZhlAicM/dev-001/thing/property/set",50,
{
"id":"17",
"version":"1.0",
"params":{
"LED1":true
}
}
那么等会回应的数据,里面的id也要是"17",每次执行一次属性设置后,id会自增1:
{
"id":"17",
"code":200,
"msg":"user_succ"
}
这里还是需要计算 需要发送字符串的长度:字符计数器:计算字符数,
注意在数据模式下发送数据可以不用加换行回车符。
| 指令 | 响应 | 功能 |
| | 进入数据模式,发送指定长度到“设备属性设置响应”主题之后自动退出 |
| +MQTTPUB:OK | 发送数据 |
再次在OneNET API进行一次执行操作,这里需要快速发送两次AT指令,建议先提前预判一下消息id号,等收到数后快速粘贴到发送框发送,时间不超过5s。
9.4. 执行效果图
在接收OneNET的下行数据后,依次将上面的指令发送:

①:接收到:“设备属性设置请求”主题的数据,这里面id是:25
②:进入长数据模式,注意计算需要发送字符的长度
③:回应数据,里面的id需要和①的id一致,例如都是25
④:在OneNET API调试页面,可以看到显示成功。
10. 总结
在本章节中,我们通过AT指令成功建立了与OneNET MQTT服务器的连接,并实现了数据的上行和下行通信。具体而言,我们上传了模拟的温湿度数据,并接收到了用于控制LED灯状态的指令。接下来,在下一章节里,我们将探讨如何利用单片机的串行接口自动发送和接收这些数据,从而取代之前手动操作的过程。下一阶段的主要任务是将该程序移植到单片机上,并根据个人需求调整OneNET配置信息(如WiFi网络参数等)以及设备属性设置,以确保系统能够正常运行。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)