1\. 腾讯云ESP8266定制固件烧录
此局部请参考腾讯云官网文档:腾讯云 IoT AT ESP8266 定制固件及阐明。
2\. 云端配置
登录腾讯云, 搜寻"云产品"下的"物联网通信"产品, 或间接拜访:
https://console.cloud.tencent.com/iotcloud
2.1. 创立新产品
对于认证形式, 指定了设施通过何种形式和云端进行双向认证. 默认的证书形式绝对于密钥认证安全性高一点, 然而问题在于证书形式须要在嵌入式设施端存储证书同时实现证书的相干解决, 对设施的RAM和ROM要求较高, 相对而言, 密钥认证的形式资源占用量就小点, 因为咱们次要反对的设施都是小型嵌入式设施, 因而选用密钥认证。数据格式指的是设施和云端进行数据交互时候应用的格局, json格局为文本字符串, 可读性高, 并且便于解析, 对于性能简单的设施交互而已比拟现实, 然而对于小型设施或是定制设施, 数据繁多, 或是有自定义的格局(二进制或是文本), 这种时候, 用自定义的数据格式, 一方面节约流量, 另一方面比拟灵便.。
创立胜利后,获取到产品ID:
2.2. 创立新设施
增加完设施后, 会告知设施对应的密钥. 该密钥将会用于之后设施与平台通信时的认证:
为了实现设施间的通信, 咱们还须要创立第二个设施, 操作同上, 将其命名为"dev2":
2.3. 设置Topic
能够在"权限列表"中看到Topic对应的操作权限:
平台默认配置了三类的Topic, 用于执行公布和订阅.,这里之所以是三类而不是三个, 是因为Topic里应用了变量.。
WDRRDCF1TE
实际上是productID;${deviceName}
为平台设置的变量, 即设施名;control
和data
以及event
为Topic名字.;
所以, 在咱们创立了2个设施dev1和dev2的状况下, 在 BearPiTest 产品下, 即存在6个Topic, 别离为:
- WDRRDCF1T/dev1/control 订阅权限
- WDRRDCF1T/dev1/data 公布和订阅权限
- WDRRDCF1T/dev1/event 公布权限
- WDRRDCF1T/dev2/control 订阅权限
- WDRRDCF1T/dev2/data 公布和订阅权限
- WDRRDCF1T/dev2/event 公布权限
这里默认的Topic曾经足够咱们应用, 不须要额定增加Topic和权限了。
2.4. 设置规定引擎
规定引擎自身不属于MQTT协定的领域, 然而平台侧出于平安角度思考增加了规定引擎, 实现了Topic之间的转发操作, 咱们须要正当的设置规定引擎能力实现多个设施之间的数据收发, 因为了解起来比较复杂, 咱们这里简要解说下为什么须要规定引擎, 规定引擎的作用, 如何设置规定引擎.
为什么须要规定引擎
在上节的Topic中, 咱们晓得, 在平台侧, 对于不同的Topic, 规定了不同的权限, 例如, 对于
WDRRDCF1T/dev1/event
这个Topic, 只具备公布权限, 而对于WDRRDCF1T/dev1/control
这个Topic, 只具备订阅权限. 对于设施dev1, 很天然的, 会朝WDRRDCF1T/dev1/event
这个Topic发送数据, 并且订阅WDRRDCF1T/dev1/control
这个Topic的音讯. 然而这里就会波及到, event的数据最初到哪去, control的数据从哪里来的问题.在本文的例子中, 咱们心愿dev1和dev2产生交互, 即互相收发音讯. 因为MQTT是基于Topic的公布订阅机制, 因而, dev1想要取得dev2的数据, 直觉上, 须要订阅dev2公布音讯的那个Topic. 假设dev2朝
25KCIUIR1G/dev2/event
Topic上发送数据, 那么dev1想要取得dev2公布的音讯, 最间接的方法是订阅同样的Topic, 即25KCIUIR1G/dev2/event
, 然而这里存在几个问题, 首先, event Topic只具备公布权限, 没有订阅权限, 其次, 在平台侧, 规定了, 不容许跨设施公布或是订阅Topic, 也就是说, 对于dev1, 只能看到或只容许拜访WDRRDCF1T/dev1
这个Topic以及其上司的Topic, 不能拜访WDRRDCF1T/dev2
及其上司Topic.平台侧增加不容许跨设施拜访Topic的规定尽管不直观, 但却是正当的. 如果不增加这条限度, 那么一个设施能够不加限度的订阅同一个产品下所有其余设施的Topic, 获取其上报的音讯, 这存在潜在的安全漏洞.
- 规定引擎的作用
因为不容许间接跨设施拜访Topic, 所以须要依附"规定引擎"来手动增加规定, 将指定的Topic音讯转发到另一个Topic上, 实现不同设施之间的通信.
上图介绍了规定引擎的次要作用"republish", 行将一个Topic下的音讯republish到另一个Topic下. 从图中咱们能够看到, 规定引擎将WDRRDCF1TE/dev2/event
的音讯republish到了WDRRDCF1TE/dev1/control
下. 将WDRRDCF1TE/dev1/event
的音讯republish到了WDRRDCF1TE/dev2/control
下。
这样, 对于dev1而言, 只须要订阅WDRRDCF1TE/dev1/control
就能够接管来自25KCIUIR1G/dev2/event
的音讯了,dev2同理。
- 设置规定引擎
在物联网通信界面抉择"规定引擎"–“新建规定”, 随便指定一个规定名称, 咱们这里无妨设置为"1to2":
这里, 咱们看到规定的具体设置信息, 次要包含"筛选数据"和"行为操作"。
“筛选数据"针对指定Topic接管到的音讯内容进行进一步的筛选, 比方匹配音讯中的字段来决定是否执行之后的设置的"行为操作”.,而"行为操作"则是指定对通过匹配的音讯进行何种操作, 次要的操作有"数据转发到另一个Topic(Republish)", "转发到第三方服务(Forward)"以及转发到腾讯云各个对应组件中。
上图是设置好的规定, 这里, 咱们将"筛选数据"局部的筛选字段设置为*
, 筛选的Topic为WDRRDCF1T/dev1/event
, 条件设置为空, 即不筛选数据, 全副匹配,而后, 执行的操作是将数据转发到WDRRDCF1T/dev2/control
, 设置完这条规定, 就实现了dev2通过订阅control就能收到dev1发送到event的数据。
对于"筛选数据"的设定:因为咱们在新建产品, 设置数据格式的时候抉择了自定义数据格式, 在自定义数据格式的状况下, 以后平台将其当做二进制流来解决, 也就无奈通过匹配字段进行数据筛选.
如果在进行产品的时候, 应用数据格式是json, 那么此处就能够依据json中的字段进行SQL的匹配和筛选.
同理, 咱们再设置新的一个规定"2to1", 实现WDRRDCF1T/dev2/event
到WDRRDCF1T/dev1/control
的转发:
规定引擎都设置好后,记得点启用按钮,这样, 在平台侧dev1到dev2的双向数据通路就买通了:
2.5. 云日志
在平台侧都设置好后, 咱们在之后的测试过程或是通信过程中, 往往还须要查看平台是否收到了设施发送上来的音讯, 对音讯执行了哪些操作, 音讯的具体内容(payload)是什么. 腾讯云提供了物联网通信产品的"云日志"性能和腾讯云组件"音讯队列CMQ"。
日志中能够看到日志记录了设施的连贯, 连贯断开, 公布, 订阅等行为, 也记录了规定引擎的操作, 还有CMQ队列的一些行为日志.。
2.6. 音讯队列CMQ
能够在产品列表中找到"音讯队列"选项, 设置队列所想要接管的音讯类型后保留配置, 即可将平台侧收到的设施音讯额定发送到腾讯云音讯队列CMQ组件中:
在密钥认证下, 音讯的内容(payload)是通过base64编码的, 所以在平台侧看到的数据相似乱码实际上是通过编码后的后果, 想要查看具体的内容, 能够在linux下, echo <payload> | base64 --decode
.
3\. 设施端对接测试
应用USB转串口将烧录好腾讯云定制固件的ESP8266连贯到PC,应用串口助手关上串口开始调试。
3.1. 入网
测试AT指令是否失常:
ATOK
设置ESP8266工作模式为AP和STA并存:
AT+CWMODE=3OK
设置传输模式为一般传输模式:
AT+CIPMODE=0OK
开启多路模式:
AT+CIPMUX=1OK
入网:
AT+CWJAP="Mculover666","mculover666"WIFI CONNECTEDWIFI GOT IPOK
3.2. 设置腾讯云对接信息
示例:
AT+TCDEVINFOSET=1,"WDRRDCF1TE","dev1","ULtbpSxXtSQyaFyeaax6pw=="OK+TCDEVINFOSET:OK
此信息会保留到Flash中,能够应用上面的命令查看:
AT+TCDEVINFOSET?+TCDEVINFOSET:1,"WDRRDCF1TE","dev1",113OK
3.3. 连贯腾讯云
示例:
AT+TCMQTTCONN=1,5000,240,1,1OK+TCMQTTCONN:OK
连贯胜利,此时在腾讯云IoThub平台即可看到设施在线:
3.4. 订阅主题
示例:
AT+TCMQTTSUB="WDRRDCF1TE/dev1/data",0OK+TCMQTTSUB:OK
订阅胜利之后,在云端进入设施在线调试,发送测试数据:
在串口助手中能够看到ESP8266模组通过URC形式上报的数据:
3.5. 公布音讯
示例:
AT+TCMQTTPUB="WDRRDCF1TE/dev1/data",0,"helloworld"
返回后果为:
OK+TCMQTTPUB:OK
在云端能够看到设施上报的音讯:
4\. OTA降级
腾讯云定制固件中内置了与IoThub平台OTA固件降级对接的AT指令,整个降级流程如下:
在模组连贯IoThub平台胜利之后进行如下的操作。
4.1. 使能OTA性能
AT+TCOTASET=1,"0.1"
返回后果如下:
OK+TCOTASET:OK
指令胜利,此时模组曾经处于监听降级命令状态。
4.2. 云端下发固件
将待降级的固件上传到云平台:
抉择下发0.2版本的固件:
在串口助手中能够看到模组上报的URC数据:
+TCOTASTATUS:ENTERUPDATE+TCOTASTATUS:UPDATESUCCESS
4.3. 读取模组缓存的固件信息
AT+TCFWINFO?
返回后果为:
OK+TCFWINFO:"0.2",6892,"1eb6c5f8622f5b005bc3ff8f01575df8",716800
从中失去缓存的固件信息如下:
- 固件版本:0.2
- 固件大小:6892字节
- 固件MD5
- 用户待降级的OTA固件的最大字节数,700KB
4.4. 读取模组缓存的固件数据
每次读取512字节:
AT+TCREADFWDATA=512
当最初一次读取的时候,模组理论返回读取大小为236字节,小于512字节,示意读取完结。