玩转 ESP32 + Arduino (十三) 通过MQTTs协议上传数据至OneNet云平台
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩转 ESP32 + Arduino (十三) 通过MQTTs协议上传数据至OneNet云平台相关的知识,希望对你有一定的参考价值。
参考技术A这里我们使用了一个库: PubSubClient
创建产品
创建新设备
(1). 产品ID, 用户ID,和登录key
(2). 设备名称, ID和 设备key
OneNet MQTTS用携带token的方式进行鉴权
访问者(可以为应用或者设备)固化访问密钥于软件中,在需要进行服务访问时,通过密钥计算临时token,通过临时token进行服务访问认证
访问者首先通过访问管理者获取临时访问token,访问管理者可根据需要自定义该token的访问有效期(即过期时间),访问者获取该token后方才能访问OneNET
访问管理者直接将密钥授权给访问者(例如,直接为设备烧写key),访问者通过密钥生成token进行访问
计算方法: https://open.iot.10086.cn/doc/mqtt/book/manual/auth/token.html
token生成工具: https://open.iot.10086.cn/doc/mqtt/book/manual/auth/tool.html
根据软件界面, 我们应提供 res et key method
格式为: products/产品ID/devices/设备名
以我们刚刚创建的产品和设备为例:
时间戳 (也叫:格林威治时间戳,或者UNIX时间戳)
计算地址:
https://tool.lu/timestamp/
我直接计算到了 2099年
设备的key (不是产品的access key)
相关文档: https://open.iot.10086.cn/doc/mqtt/book/device-develop/topics/introduce.html
MQTTS物联网套件中设备相关服务(存储、命令等)的面向设备的接口,均以 topic 的形式提供,设备可以通过 publish 消息到系统 topic 调用服务接口,也可以订阅系统 topic 用于接收服务消息通知,服务提供的系统 topic 的集合形成了 topic 簇
MQTTS物联网套件目前包含:数据点topic簇、命令topic簇、子设备topic簇、设备影子topic簇,如下图所示:
数据点topic簇
设备可以通过数据点 topic 簇上传数据存储并即时获取数据存储结果
簇中topic 以 $sys/pid/device-name/dp 开头
通过publish上传数据时,payload需要满足平台约定数据格式
支持一次上报多条数据,支持设备自带时间戳上报
即时通知数据处理结果(需订阅)
MQTT物联网套件支持用户以 数据流-数据点 模型( 模型详情 )将数据上传至平台并进行存储,设备可以通过数据点 topic 簇调用数据点存储服务存储数据,可以通过订阅系统 topic 获取数据处理结果通知,如下图所示:
对于本文中的例子, 应如下订阅:
上传的JSON数据必须采用以下规则
MQTT物联网套件支持应用通过API直接向设备发送单播命令,设备可以通过设备命令 topic 簇获取消息并进行消息应答
设备命令交互流程见下图:
topic中cmdid为变量,为每条命令的唯一id,可通过通配符的方式进行订阅,比如: $sys/pid/device-name/cmd/request/+ ,或者 $sys/pid/device-name/cmd/#
对于本位中 的例子,应如下订阅:
本连接实现了设备模拟上传温湿度数据, 设备接收平台下发的命令
(但没有给平台回复收到命令的消息)
老样子,写个小点灯.
玩转 ESP32 + Arduino (十六) 通过mqtt协议连接阿里云
参考技术A需要用到的库:
引入"PubSubClient.h"后
打开"PubSubClient.h"
修改如下内容:
关于MQTT协议, 请参考文章: https://zhuanlan.zhihu.com/p/89057819
请参考我之前整理的文档:
【腾讯文档】MQTT连接阿里云示例(1) https://docs.qq.com/sheet/DWXBaUE9nWmZVaGJX
如果使用了AliyunMqttArduino, 就不需要关系协议的报文和加密方式了
首先创建一个mqtt客户端
返回值: 连接结果
返回: 状态码
mqttClient.publish(主题, 内容)
首先, 创建产品:
其次, 为产品添加设备
第三, 查看设备关键信息:
创建完后,我们发现系统已经自动创建了一些功能定义
找到产品的功能页面, 点击"编辑草稿"
最后发布新的物模型
非常简单的修改, 只修改了要发送json里的param
注意同步修改param和json的内存占用大小
以上是关于玩转 ESP32 + Arduino (十三) 通过MQTTs协议上传数据至OneNet云平台的主要内容,如果未能解决你的问题,请参考以下文章
玩转 ESP32 + Arduino (八) U8G2驱动OLED
玩转 ESP32 + Arduino(二十八) TFT_eSPI库驱动ST7789
掌控板IO接口编程入门 | 用Arduino玩转掌控板(ESP32)系列
玩转 ESP32 + Arduino (二十五) SSD1306库驱动OLED