600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > ESP8266 AT指令连接阿里云物联网平台

ESP8266 AT指令连接阿里云物联网平台

时间:2020-12-22 15:27:45

相关推荐

ESP8266 AT指令连接阿里云物联网平台

模组:ESP-12F || ESP-12S || (保险来说,ESP模组的flash应该 大于4MB、或者说为32Mbit 才可以)待补充 ...

平台:阿里云物联网平台

固件:ESP8266 MQTT透传AT固件

目录

一、烧录ESP8266 MQTT透传AT固件

二、部署阿里云物联网平台

三、连接阿里云物联网平台

四、ESP-12F模组烧录固件带来的问题

一、烧录ESP8266 MQTT透传AT固件

下载地址:https://docs.ai-/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 指令连接上云

文档:/document_detail/73742.html?spm=a2c4g.11174283.6.593.349f1668tBCTLM

1. MQTT 连接参数的计算(强烈推荐先使用方法3,新手自己推算比较麻烦,示例方法3)

查看产品参数、设备参数

一键复制,保存在文本中,待用

方法1:阅读文档,可以自己计算

Hash在线计算工具:/hmac

方法2:使用安信可在线生成工具

在线地址:https://www.ai-/service/mqttPassword

工具说明:安信可在线生成工具,默认不使用timestamp连接参数,默认哈希函数 hmasha1

方法3:使用阿里云物联网平台配置工具

链接:/s/1SrEbNda0V3abT7EZXaE4sw

提取码:rfa0

工具界面:

参数计算:

复制下来,保存在文本中,待用

{"ProductKey": "a1TGuTWhjR8","DeviceName": "TestDevice","DeviceSecret": "D5JIkQ5iAuhRjJuGbSgGlpYd3mmjOhPX"}连接域名:a1TGuTWhjR8.iot-as--:1883ClientId: 123456|securemode=3,signmethod=hmacsha1,timestamp=789|Username: TestDevice&a1TGuTWhjR8Password: 0EE972B6F5075EEFB0569DBC8871D0FE7FABD7C3

2. 阿里云物联网平台的连接

指令查看(下载AT固件的使用指导手册)

连接过程:

//ESP12F MQTT AT ALIYUN -06-06//1.连接上云AT+RSTAT+RESTOREAT+CWMODE=1AT+CIPSNTPCFG=1,8,""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)

-11-28:最近,阿里云物联网平台把topic移到产品了,凡是变量带${}的,如${deviceName},都要自己展开

(2)打开在线调试,我们可以进行调试真实设备

(3)打开运行状态,我们可以看到云端设备的实时状态

(4)下面,开始进行通信测试

//MQTT指令示例: SUB PUB //1. 订阅AT+MQTTSUB=0,"topic",1 //2. 发布AT+MQTTPUB=0,"topic","test",1,0

特别提示:

(1)"topic"列表需要查看你们自己的topic列表,${}变量名要具体展开;

(2)"test"是要发送的内容,如果你们和我一样选择了AJSON格式(即使用了物模型方式),那就需要查看官方文档,看一下AJSON格式;如果使用的是自定义topic,应该没有格式要求,test可以为任意内容 。

(3)再提醒一次:不要使用我的产品和topic,不要使用我的产品和topic,不要使用我的产品和topic!! 使用自己的产品和topic !!

//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\":\"934115\"\,\"params\":{\"PowerSwitch\":0}\,\"version\":\"1.0.0\"}",1,0//注意:JSON格式,,字符串遇到逗号(,)和双引号(“)需要加转义字符

++ESP8266 上报设备属性信息

可以看到上报设备信息错误,因为我们在定义产品时选择的AJSON数据格式

上报数据成功,并且成功接收到云端的反馈信息

当上报为"1"时,运行状态实时刷新

问:指令AT+MQTTPUB=<LinkID>,<topic>,<data>,<qos>,<retain>,对于其中<data>这个数据,您是如何获取的呢?

答:这个data,因为选择的物模型方式定义,使用的是AJSON格式,所以要符合data要符合AJSON格式。

这个通信格式要参考阿里云文档《通信方式概述》中的“设备发送数据到物联网平台”,那里应讲得还算明白:/document_detail/146382.html?spm=a2c4g.11186623.6.616.218d2155A9a3mZ

/document_detail/73736.html?spm=a2c4g.11186623.6.649.6e66ed92YcijNL

有空也可参读“消息通信”那一章节,如 “通信方式概述” 和 “数据结构” 等,配合物模型,应该大致可以理解数据格式。

(补充:如果大家觉得麻烦,就看我的下面数据格式获取示例,不过很简陋哦 !!!)

如果实在不懂,可以在阿里云物联网平台那里开启虚拟设备上报数据,那里可以清晰看到数据的组织形式,然后配合文档,去对比上报的数据帧就可以大致理解AJSON格式。阿里云物联网平台有在线调试和设备模拟器,都挺好用的。(笔者也是查看一下博客和文档自己简单理解,当初我是通过MQTT客户端上报、发布去查看到一些数据格式的问题,所以不能深入讨论,我也是一只小菜鸡,害)

(这几天,由于课设需要,笔者重新看了阿里云物联网平台,这里演示我是如何利用设备模拟器获取data数据格式的,希望对大家有所帮助,也看到很多朋友在问,呵呵 ,看上面的图)

步骤:

(1)打开设备模拟器,选择对应产品和设备,一开始是“离线”,我们点击开启“在线”;

(2)选择“上行指令调试”,选择“属性上报”,选择“电源开关”,这里就上报关闭吧,然后点击“发送指令”

(3)数据格式分析,请看下图,其中第2步中的payload就是我获取的 data 数据,是不是差不多一样,哈哈哈哈。大家可以拿下面这两条指令对比一下,其实他们是一样的,就是json变量顺序变换了。

* * * * * * * * * * * * * 设备模拟器的数据格式 * * * * ** * * * * * * * * * * * * * *

设备到云平台消息 /11/26 20:25:08.329

publish topic=/sys/a1TGuTWhjR8/TestDevice/thing/event/property/post, payload={"id":1606393508326,"params":{"PowerSwitch":0},"version":"1.0","method":"thing.event.property.post"}

* * * * * * * * * * * * * 笔者参考自写的AT指令 * * * * * * * * * * * * * * ** * * * ** *

// 上报JSON格式:

AT+MQTTPUB=0,"/sys/a1TGuTWhjR8/TestDevice/thing/event/property/post","{\"method\":\"thing.service.property.set\"\,\"id\":\"934115\"\,\"params\":{\"PowerSwitch\":0}\,\"version\":\"1.0.0\"}",1,0

(当然,比较认真的可以看到两个问题:

(1)"method":"thing.event.property.post" 和\"method\":\"thing.service.property.set\"有区别,一个是post而另一个是set,这里是笔者的问题,那时候没有去注意这个问题,不过它在这里也不影响我们实验,呵呵。不过建议大家根据情况,上报属性和设置属性是两回事,我们应该根据实际选择method,上报属性就是post,设置属性就是set;

(2) id值是会变化的,我们这里自己用了固定值,肯定不严谨,是吧,代码中id应该是变化的,大家记得,id是如何生成的,大家自个儿去查吧)

四、ESP-12F模组烧录固件带来的问题

笔者发现,烧录了ESP8266 MQTT透传AT固件后,有些基础AT指令运行失败,可能时裁剪了或者怎么滴,我没有ESP-12S模组,无法查找问题来自哪里,有可能是不能完美适配ESP-12F模组,如下图

但是,通过查看使用指导手册里面的指令,发现还是能满足我们的需求,所以我不是很在意这些,够用就好啊。

另外,如果大家测试完后想恢复出厂默认AT固件,可以下载出厂默认 AT 固件,烧录即可,掌握烧录方法不虚。

嘿嘿,下一篇:《STM32F103 通过ESP8266 AT指令连接阿里云物联网平台》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。