MQTT客户端mosquitto库上报温度到腾讯云
Linux C MQTT上报温度到腾讯云(基于mosquitto库)
一、创建产品
1.进入腾讯云官网,登陆或注册账号
2.进入控制台
3.鼠标滑到云产品,进入物联设备服务中的物联网通信
4.点击创建新产品,现在我们来创建一个上报温度产品
5.产品创建信息如下,点击确定
二、创建设备
1.我们已经创建好了一个产品,如下,现在来创建设备。(设备是产品的实例,一个产品下可以有多个设备。)
2.进入产品页面后点击设备列表,此时该产品下还没有任何设备,点击添加新设备,我们来创建一个设备来实现温度上报的功能
3.设备创建信息如下,点击保存,点击开始管理设备
三、获取MQTT连接信息
1.设备已经创建好了,现在我们收集一下MQTT连接腾讯云的信息。将红线框住的信息保存在txt文件中。
2.现在我们已经知道了Client ID、MQTT Username和MQTT Password还需要知道腾讯云MQTT服务端口、服务器地址、消息通信的topic。在Topic列表中选择图中的topic(选择这个topic的原因有关设备影子,下面会解释)同样保存到刚才的txt文件中
3.在右上角物联网通信帮助文档中有服务器地址选择,文档链接:https://cloud.tencent.com/document/product/634/61228,将替换后的地址:FQ87P6RD9P.iotcloud.tencentdevices.com保存在刚才的txt文件中
4.同样根据腾讯云提供的文档:https://cloud.tencent.com/document/product/634/32546,由于我们创建产品时选择的是密钥认证,故连接端口应为1883,将端口保存在刚才的txt文件中
5.现在我们txt文件中的内容如下,有了这些信息,我们的MQTT客户端已经可以连接上腾讯云,激活设备了,但要想腾讯云正确解析我们上报的消息还需要了解消息主体格式。
四、消息主体
先了解一下设备影子文件,帮助文档“设备影子详情”:https://cloud.tencent.com/document/product/634/11918。设备影子文档是服务器端为设备缓存的一份状态和配置数据。
1.如下图,左边部分就是我们可以配置的设备文档,可以向其中添加设备状态,desired是期待的设备状态,reported是设备上报的状态。现在预备向设备文档中添加temperature属性来记录设备上报的温度,每次上报都会更新该文档。
现在文档版本是0,每次更新该文档版本都会自增1。
2.更改后的设备影子文档如下
3.根据帮助文档“设备影子数据流”:https://cloud.tencent.com/document/product/634/14072
我们可以知道,如果要将temperature属性值由初设的21.5更改为10,则消息主体应该如下
{
"type": "update",
"state": {
"reported": {
"temperature": 27
}
},
"version": 1,
"clientToken": "clientToken"
}
clientToken是用来标识这个消息会话的id,可以由我们自己设为任意值。
五、连接腾讯云
现在我们在Linux下运行我们的C程序客户端来修改设备影子文件。
1.这里展示MQTT客户端相关登录数据传递和消息上报的Linux C代码
char *hostname = "FQ87P6RD9P.iotcloud.tencentdevices.com";
char *topic = "$shadow/operation/FQ87P6RD9P/TGT-DS18B20-1";
char *clientId = "FQ87P6RD9PTGT-DS18B20-1";
char *username = "FQ87P6RD9PTGT-DS18B20-1;12010126;BEWMO;1677010298";
char *password = "259854990dbf546fbf48d57841b5f1a6b4d759511b39522dbc05b7cfb87e45bb;hmacsha256";
int port = 1883;
char *payload = "{\"type\": \"update\",\"state\": {\"reported\": {\"temperature\": %.2f}},\"version\": 1,
\"clientToken\": \"clientToken\"}";
mosq = mosquitto_new(clientId, ture, NULL);
mosquitto_username_pw_set(mosq, username, password);
mosquitto_connect(mosq, serv_ip, port, 60);//serv_ip是经过hostname的DNS解析所得
mosquitto_publish(mosq, NULL, topic, strlen(payload) 1, payload, 0, 0);
查看设备影子文件,temperature的值已修改成功,版本自增1证明温度上报已成功
注意:当设备影子服务端收到此消息时,首先判断消息中的 version 是否与设备影子服务端中的 version 一致。如果一致,设备影子服务端才会执行更新设备影子流程。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgjekji
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13