Qt5编译qmqtt库使用MQTT协议连接华为云IOT完成数据上传与交互

一、前言

随着物联网技术的发展,越来越多的设备通过网络互相连接,形成了庞大的智能系统。这些系统能够收集、分析并响应各种数据,从而实现自动化控制和智能化管理。在这个背景下,MQTT 成为了一个广泛使用的轻量级消息传输协议,特别适用于资源受限的环境,如移动应用或远程传感器网络。MQTT 的设计原则是低带宽、低延迟以及最小化网络流量,这使得它成为物联网场景中的理想选择。

Qt 是一个跨平台的应用程序开发框架,被广泛应用于桌面、移动和嵌入式系统的图形用户界面开发。Qt 提供了丰富的工具和库,使得开发者能够轻松地构建高性能、美观的应用程序。为了进一步增强 Qt 在物联网领域的适用性,Qt官方提供了的 MQTT 库——qmqtt,这让 Qt 开发者可以直接利用这一强大的消息传输协议来构建连接物联网的服务和应用。

但是在QT5的版本中,Qt官方提供的qmqtt没有集成到Qt标准库里,需要开发者自己编译集成使用。当前文章主要目的就是详细介绍如何在 Qt5 中集成 qmqtt 库,并通过实际案例演示如何使用 qmqtt 连接华为云物联网平台,完成数据上传交互。将从编译集成 qmqtt 库开始,完成库的编译,然后完成与华为云物联网平台的连接,并实现数据的上传和接收。

这是开发好的MQTT客户端软件:

image-20240814165315470

在文章结尾提供了所有需要使用的工具软件以及源代码。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在C语言中实现MQTT协议通信华为云IOT可以使用MQTT C语言客户端,以下是具体的实现步骤: 1. 首先需要在华为云IOT上创建设备并获取设备证书以及设备ID和物联网平台的服务地址。 2. 下载MQTT C语言客户端,例如Eclipse Paho MQTT C,该可以在Linux、Windows和Mac OS等平台上使用。下载地址:https://github.com/eclipse/paho.mqtt.c 3. 在代码中引入相关头文件: ```c #include "MQTTClient.h" ``` 4. 创建MQTT客户端并初始化MQTT连接参数: ```c MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; ``` 5. 设置连接参数,包括设备证书、设备ID、服务地址、连接超时时间等: ```c char* address = "ssl://XXXX.iot-mqtts.cn-north-4.myhuaweicloud.com:8883"; char* clientID = "XXXX"; char* username = "XXXX"; char* password = "XXXX"; char* root_ca = "XXXX.pem"; conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1; conn_opts.username = username; conn_opts.password = password; conn_opts.ssl = &ssl_opts; ``` 其中,`ssl://XXXX.iot-mqtts.cn-north-4.myhuaweicloud.com:8883`为华为云IOT物联网平台的服务地址,`clientID`为设备ID,`username`和`password`为设备证书的用户名和密码,`root_ca`为根证书。 6. 创建MQTT连接: ```c MQTTClient_create(&client, address, clientID, MQTTCLIENT_PERSISTENCE_NONE, NULL); if (MQTTClient_connect(client, &conn_opts) != MQTTCLIENT_SUCCESS) { printf("Failed to connect\n"); return -1; } ``` 7. 发布消息: ```c MQTTClient_message pubmsg = MQTTClient_message_initializer; pubmsg.payload = "Hello world!"; pubmsg.payloadlen = strlen("Hello world!"); pubmsg.qos = QOS; MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token); ``` 其中,`TOPIC`为MQTT主题,`QOS`为消息发布的质量等级。 8. 订阅主题: ```c MQTTClient_subscribe(client, TOPIC, QOS); ``` 9. 接收消息: ```c void messageArrived(void *context, char *topicName, int topicLen, MQTTClient_message *message) { printf("Message arrived\n"); printf(" topic: %s\n", topicName); printf(" message: "); fwrite(message->payload, 1, message->payloadlen, stdout); printf("\n"); MQTTClient_freeMessage(&message); MQTTClient_free(topicName); } ``` 10. 断开MQTT连接: ```c MQTTClient_disconnect(client, 10000); MQTTClient_destroy(&client); ``` 完整的代码示例如下: ```c #include "MQTTClient.h" #include <string.h> #define QOS 1 #define TIMEOUT 10000L void messageArrived(void *context, char *topicName, int topicLen, MQTTClient_message *message) { printf("Message arrived\n"); printf(" topic: %s\n", topicName); printf(" message: "); fwrite(message->payload, 1, message->payloadlen, stdout); printf("\n"); MQTTClient_freeMessage(&message); MQTTClient_free(topicName); } int main(int argc, char* argv[]) { MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; MQTTClient_SSLOptions ssl_opts = MQTTClient_SSLOptions_initializer; char* address = "ssl://XXXX.iot-mqtts.cn-north-4.myhuaweicloud.com:8883"; char* clientID = "XXXX"; char* username = "XXXX"; char* password = "XXXX"; char* root_ca = "XXXX.pem"; char* topic = "XXXX"; MQTTClient_message pubmsg = MQTTClient_message_initializer; MQTTClient_deliveryToken token; int rc; MQTTClient_create(&client, address, clientID, MQTTCLIENT_PERSISTENCE_NONE, NULL); conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1; conn_opts.username = username; conn_opts.password = password; ssl_opts.enableServerCertAuth = 1; ssl_opts.trustStore = root_ca; conn_opts.ssl = &ssl_opts; if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { printf("Failed to connect, return code %d\n", rc); return -1; } MQTTClient_subscribe(client, topic, QOS); MQTTClient_setCallbacks(client, NULL, NULL, messageArrived, NULL); pubmsg.payload = "Hello world!"; pubmsg.payloadlen = strlen("Hello world!"); pubmsg.qos = QOS; pubmsg.retained = 0; MQTTClient_publishMessage(client, topic, &pubmsg, &token); printf("Waiting for up to %d seconds for publication of %s\n" "on topic %s for client with ClientID: %s\n", (int)(TIMEOUT/1000), "Hello world!", topic, clientID); rc = MQTTClient_waitForCompletion(client, token, TIMEOUT); printf("Message with delivery token %d delivered\n", token); MQTTClient_disconnect(client, 10000); MQTTClient_destroy(&client); return rc; } ``` 注意,在使用该代码前需要将其中的`XXXX`替换为对应的设备证书、设备ID和华为云IOT服务地址等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DS小龙哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值