乐趣区

关于云服务:使用ESP8266腾讯云定制固件对接腾讯云平台IoThub

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}为平台设置的变量, 即设施名;
  • controldata 以及 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 之间的转发操作, 咱们须要正当的设置规定引擎能力实现多个设施之间的数据收发, 因为了解起来比较复杂, 咱们这里简要解说下为什么须要规定引擎, 规定引擎的作用, 如何设置规定引擎.

  1. 为什么须要规定引擎

    在上节的 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/eventTopic 上发送数据, 那么 dev1 想要取得 dev2 公布的音讯, 最间接的方法是订阅同样的 Topic, 即25KCIUIR1G/dev2/event, 然而这里存在几个问题, 首先, event Topic 只具备公布权限, 没有订阅权限, 其次, 在平台侧, 规定了, 不容许跨设施公布或是订阅 Topic, 也就是说, 对于 dev1, 只能看到或只容许拜访 WDRRDCF1T/dev1 这个 Topic 以及其上司的 Topic, 不能拜访 WDRRDCF1T/dev2 及其上司 Topic.

    平台侧增加不容许跨设施拜访 Topic 的规定尽管不直观, 但却是正当的. 如果不增加这条限度, 那么一个设施能够不加限度的订阅同一个产品下所有其余设施的 Topic, 获取其上报的音讯, 这存在潜在的安全漏洞.

  2. 规定引擎的作用

    因为不容许间接跨设施拜访 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 同理。

  1. 设置规定引擎

在物联网通信界面抉择 ” 规定引擎 ”–“新建规定”, 随便指定一个规定名称, 咱们这里无妨设置为 ”1to2″:

这里, 咱们看到规定的具体设置信息, 次要包含 ” 筛选数据 ” 和 ” 行为操作 ”。

“筛选数据 ” 针对指定 Topic 接管到的音讯内容进行进一步的筛选, 比方匹配音讯中的字段来决定是否执行之后的设置的 ” 行为操作”.,而 ” 行为操作 ” 则是指定对通过匹配的音讯进行何种操作, 次要的操作有 ” 数据转发到另一个 Topic(Republish)”, “ 转发到第三方服务(Forward)” 以及转发到腾讯云各个对应组件中。

上图是设置好的规定, 这里, 咱们将 ” 筛选数据 ” 局部的筛选字段设置为*, 筛选的 Topic 为WDRRDCF1T/dev1/event, 条件设置为空, 即不筛选数据, 全副匹配,而后, 执行的操作是将数据转发到WDRRDCF1T/dev2/control, 设置完这条规定, 就实现了 dev2 通过订阅 control 就能收到 dev1 发送到 event 的数据。

对于 ” 筛选数据 ” 的设定:

因为咱们在新建产品, 设置数据格式的时候抉择了自定义数据格式, 在自定义数据格式的状况下, 以后平台将其当做二进制流来解决, 也就无奈通过匹配字段进行数据筛选.

如果在进行产品的时候, 应用数据格式是 json, 那么此处就能够依据 json 中的字段进行 SQL 的匹配和筛选.

同理, 咱们再设置新的一个规定 ”2to1″, 实现 WDRRDCF1T/dev2/eventWDRRDCF1T/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 指令是否失常:

AT

OK

设置 ESP8266 工作模式为 AP 和 STA 并存:

AT+CWMODE=3

OK

设置传输模式为一般传输模式:

AT+CIPMODE=0

OK

开启多路模式:

AT+CIPMUX=1

OK

入网:

AT+CWJAP="Mculover666","mculover666"
WIFI CONNECTED
WIFI GOT IP

OK

3.2. 设置腾讯云对接信息

示例:

AT+TCDEVINFOSET=1,"WDRRDCF1TE","dev1","ULtbpSxXtSQyaFyeaax6pw=="
OK
+TCDEVINFOSET:OK

此信息会保留到 Flash 中,能够应用上面的命令查看:

AT+TCDEVINFOSET?
+TCDEVINFOSET:1,"WDRRDCF1TE","dev1",113

OK

3.3. 连贯腾讯云

示例:

AT+TCMQTTCONN=1,5000,240,1,1
OK
+TCMQTTCONN:OK

连贯胜利,此时在腾讯云 IoThub 平台即可看到设施在线:

3.4. 订阅主题

示例:

AT+TCMQTTSUB="WDRRDCF1TE/dev1/data",0
OK
+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 字节,示意读取完结。

退出移动版