• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

MQTT客户端mosquitto库上报温度到腾讯云

武飞扬头像
xiongsiyu979
帮助1

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
系列文章
更多 icon
同类精品
更多 icon
继续加载