模组:ESP-12F || ESP-12S || 待补充 ...
平台:阿里云物联网平台
固件:ESP8266 MQTT透传AT固件
目录
一、烧录ESP8266 MQTT透传AT固件
二、部署阿里云物联网平台
三、连接阿里云物联网平台
四、ESP-12F模组烧录固件带来的问题
下载地址:https://docs.ai-thinker.com/esp8266/sdk
固件说明:推荐下载第二个AT固件,即 ESP8266 MQTT透传AT固件(AT口改为UART0),记得下载使用指导。不过需要提醒大家,这个固件是针对ESP-12S模组开发,应该可以完美运行于ESP-12S模组;但是,我发现在ESP-12F模组中,MQTT指令可以运行,而以前默认AT固件的某些基础命令则无法执行,一直ERRPOR。后面会提及这里。
两个固件都可以下载,区别不大,只是AT指令使用串口不同。如果有探究精神,可以选择ESP8266 MQTT默认透传AT固件,个人觉得那个固件很麻烦,AT指令需要一个串口,log需要一个串口,因为我也没调通那个固件。推荐第二个,只需要一个串口。
注意,不同模组的烧录参数、连线方式,这里就不细说。烧录成功后,开始测试AT指令连接阿里云物联网平台。
1. 创建产品
点击“创建产品”,产品命名为“TestProduct”
2. 创建设备
点击“添加设备”,选择产品为“TestProduct”,设备命名“TestDevice”
3. 生成物模型
选择“产品”,选择“功能定义”,选择“编辑草稿”
添加自定义功能
发布上线
说明:阿里云物联网平台有多种连接方式,官方比较推荐使用SDK方式连接,因为这样通信比较安全,官方SDK帮你做了很多处理。作为测试,我们选用开放协议自主接入方式,使用MQTT-TCP连接通信,使用MQTT AT 指令连接上云。
文档:https://help.aliyun.com/document_detail/73742.html?spm=a2c4g.11174283.6.593.349f1668tBCTLM
1. MQTT 连接参数的计算(强烈推荐先使用方法3,新手自己推算比较麻烦,示例方法3)
查看产品参数、设备参数
一键复制,保存在文本中,待用
方法1:阅读文档,可以自己计算
Hash在线计算工具:https://1024tools.com/hmac
方法2:使用安信可在线生成工具
在线地址:https://www.ai-thinker.com/service/mqttPassword
工具说明:安信可在线生成工具,默认不使用timestamp连接参数,默认哈希函数 hmasha1
方法3:使用阿里云物联网平台配置工具
链接:https://pan.baidu.com/s/1SrEbNda0V3abT7EZXaE4sw
提取码:rfa0
参数计算:
复制下来,保存在文本中,待用
{
"ProductKey": "a1TGuTWhjR8",
"DeviceName": "TestDevice",
"DeviceSecret": "D5JIkQ5iAuhRjJuGbSgGlpYd3mmjOhPX"
}
连接域名:a1TGuTWhjR8.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883
ClientId: 123456|securemode=3,signmethod=hmacsha1,timestamp=789|
Username: TestDevice&a1TGuTWhjR8
Password: 0EE972B6F5075EEFB0569DBC8871D0FE7FABD7C3
2. 阿里云物联网平台的连接
指令查看(下载AT固件的使用指导手册)
连接过程:
//ESP12F MQTT AT ALIYUN 2020-06-06
//1.连接上云
AT+RST
AT+RESTORE
AT+CWMODE=1
AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
AT+CWJAP="WiFi名字","WiFi密码"
AT+MQTTUSERCFG=0,1,"NULL","用户名","密码",0,0,""
AT+MQTTCLIENTID=0,"ClienId" //clientId第二个参数注意每个逗号后加分隔符“\”,例如:t|securemode=3\,signmethod=hmacsha1\,
AT+MQTTCONN=0,"连接域名",1883,1 //连接域名中的端口号已经被提到后面了,所以删去“:1883”
//2.断开连接(先别断开,我们还要做通信测试)
AT+MQTTCLEAN=0
参考示例:
此时,我们已经成功连接上阿里云物联网平台,可以查看到设备处于在线状态,下面就可以进行通信啦
3. 阿里云物联网平台的通信
(1)查看设备的Topic列表,选择物模型通信Topic,可以看到有很多Topic,(当然,你也可以选择自定义Topic)
(2)打开在线调试,我们可以进行调试真实设备
(3)打开运行状态,我们可以看到云端设备的实时状态
(4)下面,开始进行通信测试
//MQTT指令示例: SUB PUB
//1. 订阅
AT+MQTTSUB=0,"topic",1
//2. 发布
AT+MQTTPUB=0,"topic","test",1,0
//Topic列表
//属性设置
/sys/a1TGuTWhjR8/TestDevice/thing/service/property/set
/sys/a1KIUPF4pAV/TestDevice/thing/service/property/set_reply
//属性上报
/sys/a1TGuTWhjR8/TestDevice/thing/event/property/post
/sys/a1TGuTWhjR8/TestDevice/thing/event/property/post_reply
//事件上报
/sys/a1TGuTWhjR8/TestDevice/thing/event/${tsl.event.identifer}/post
/sys/a1TGuTWhjR8/TestDevice/thing/event/${tsl.event.identifer}/post_reply
//服务调用
/sys/a1TGuTWhjR8/TestDevice/thing/service/${tsl.service.identifer}
/sys/a1TGuTWhjR8/TestDevice/thing/service/${tsl.service.identifer}_reply
//1.订阅设备属性设置
AT+MQTTSUB=0,"/sys/a1TGuTWhjR8/TestDevice/thing/service/property/set",1
++ESP8266 订阅设备属性设置
--云端 下发设备属性设置指令
++ESP8266 接收到设备属性设置指令
//2.订阅云端响应属性上报
AT+MQTTSUB=0,"/sys/a1TGuTWhjR8/TestDevice/thing/event/property/post_reply",1
//3.上报设备属性信息
// 上报参考格式:
AT+MQTTPUB=0,"/sys/a1TGuTWhjR8/TestDevice/thing/event/property/post","test",1,0
// 上报JSON格式:
AT+MQTTPUB=0,"/sys/a1TGuTWhjR8/TestDevice/thing/event/property/post","{\"method\":\"thing.service.property.set\"\,\"id\":\"2012934115\"\,\"params\":{\"PowerSwitch\":0}\,\"version\":\"1.0.0\"}",1,0
//注意:JSON格式,,字符串遇到逗号(,)和双引号(“)需要加转义字符
++ESP8266 上报设备属性信息
可以看到上报设备信息错误,因为我们在定义产品时选择的AJSON数据格式
上报数据成功,并且成功接收到云端的反馈信息
当上报为"1"时,运行状态实时刷新
笔者发现,烧录了ESP8266 MQTT透传AT固件后,有些基础 AT指令运行失败,可能时裁剪了或者怎么滴,我没有ESP-12S模组,无法查找问题来自哪里,有可能是不能完美适配ESP-12F模组,如下图
但是,通过查看使用指导手册里面的指令,发现还是能满足我们的需求,所以我不是很在意这些,够用就好啊。
另外,如果大家测试完后想恢复出厂默认AT固件,可以下载出厂默认 AT 固件,烧录即可,掌握烧录方法不虚。
嘿嘿,下一篇:《STM32F103 通过 ESP8266 AT指令连接阿里云物联网平台》