QT使用MQTT协议连接ONENET云平台:智能家居PC客户端开发笔记-1 环境搭建

前言

前端时间做了一个项目,要求在PC端使用QT制作一个客户端,用来接收从单片机上传到Onennet的数据,并且还要下发指令。当时弄了好几天,中途遇见了非常多的问题,所以写下这篇文章记录一下,同时分享一下自己的经验。

我的环境:QT 5.12.6

难点

总结下我遇见的难点:

1,环境配置极难,当时光环境配置这一项就弄了我好几天

Qt在5,10版本开始支持mqtt,但是也没有集成到安装包里面,需要自己下载编译。Qt开发MQTT程序有两种方式,一个是Qt官方提供的基于MQTT的封装,一个是第三方(EMQ)开发的用于Qt调用MQTT的接口,二者使用方法大同小异,并且均提供了源码

下载

Qt官方在github上提供了源代码,地址:https://github.com/qt/qtmqtt

第三方的mqtt库GitHub地址:https://github.com/emqx/qmqtt

在下载官方库文件时需要注意,要下载与自己版本相符合的程序源码,像我是5.12.6版本的QT。我就要下载5.12.6版本的mqtt库文件

环境搭建

第一步,编译构建qmqtt源码

下面我们使用第三方的MQTT库来进行环境搭建,第三方公司的MQTT库环境搭建过程与官方库的环境搭建过程基本上都是相同的步骤,只是他们两方的头文件名字不太一样而已。

将第三方的源码下载后点击qmqtt.pro

出现这个界面点红框即可

后面直接点击左下角的小锤子进行构建

有时候可能会出现构建失败的提示,这也是我花费时间最多的地方,当时找了许多教程都没弄清楚

问题

你出现这个现象可能有一下几个原因:

1,需要安装一个perl

perl下载地址:https://www.perl.org/get.html

2,你可能需要使用release模式进行构建

点击左下角的这个小显示器形的图标就可以调节模式

3,你的QT版本太低,不支持

这时候下载一个更新的,5.10以上版本的

4,此时开始编译后会出现如下类型错误

接下来我们将源码路径下C:\Users\maogu\Desktop\qtmqtt-5.10\src\mqtt 的所有头文件复制,

粘贴到C:\Users\maogu\Desktop\build-qtmqtt-Desktop_Qt_5_10_1_MSVC2013_64bit-Release\include\QtMqtt路径中,

我在include文件夹中已经建好QtMqtt文件夹,(以上路径仅作参考)

最后一步还要在QtMqtt文件夹下建立private文件夹,将名称为*_p.h的四个头文件存放进去。

5,之后若是还出现以下问题

这时,我们将所有错误的包含文件名换为相应*.h文件,如下:

之后就可以正常编译了

构建完成后你会得到一个文件夹

第二步:部署到QT项目

这里有两种方法进行环境配置,

第一种是直接在项目中导入外部库和头文件。

第二种是将其以模块的形式部署到QT的安装目录。

其中第二种的好处就是,只需要一次操作,以后需要再用MQTT库就可以直接调用了,不用每次都导入外部库

所以在这里我们主要演示第二种

首先,将qmqtt源码目录下(qmqtt\src\mqtt)的所有.h后缀的头文件拷贝,然后打开QT安装目录下的include文件夹,创建一个mqtt目录,将拷贝的头文件粘贴进去

我的文件目录如下:D:\QT\5.12.6\mingw73_64

注意:当你的QT安装了不同的编译环境时会有

之后,将源码编译生成目录下的lib中以下6个文件拷贝

并粘贴到QT安装目录下对应环境的lib文件夹去

例如D:\QT\5.12.6\mingw73_64\lib

接下来将源码编译生成的bin文件夹下两个库文件拷贝到Qt安装目录的bin中:

之后将编译构建得到的目录下的\mkspecs\modules-inst中的文件复制到QT对应安装目录中

这样就配置完成了

以这种方式配置的在新工程中引用只需要引入模块就可以直接使用了

QT += mqtt

包含头文件

#include <QtMqtt/QtMqtt>

问题

在我配置好使用过程中出现了一下问题:

1,头文件不对

这时候查看你刚刚添加的头文件具体名字,官方库和第三方库的头文件名并不相同

2,显示找不到头文件

这时尝试自己导入文件试试

新建一个项目,在项目的.pro文件中右键,点击添加库

选择外部库

选择库文件,找到QT安装目录相应环境下的lib文件

之后再次运行应该就没有问题了

接下来就是正式的客户端开发了,将会在我下一篇博客发出,敬请期待

参考文献:

(112条消息) Qt开发MQTT(一) 之Qt官方Qt MQTT_luoyayun361的博客-CSDN博客

(112条消息) 【QT配置第三方MQTT协议】_mqtt qt_自然醒欧的博客-CSDN博客

(112条消息) Qt开发技术:mqtt介绍、QtMqtt编译和开发环境搭建_qt mqtt_长沙红胖子Qt的博客-CSDN博客

代码分享:http://t.csdn.cn/ufC4W

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
连接 OneNet 云平台MQTT 协议需要以下步骤: 1. 注册 OneNet 账号并创建设备,在设备管理中获取设备 ID 和 API Key。 2. 安装 ESP8266 的 MQTT 库,如 PubSubClient。 3. 在 ESP8266 中连接 Wi-Fi 网络。 4. 在 ESP8266 中连接 MQTT 服务器,并使用设备 ID 和 API Key 鉴权。 5. 订阅需要接收的主题或发布需要发送的消息。 下面是一个简单的 ESP8266 连接 OneNet MQTT 的示例代码: ```c #include <ESP8266WiFi.h> #include <PubSubClient.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* mqtt_server = "mqtt.heclouds.com"; const char* device_id = "your_DEVICE_ID"; const char* api_key = "your_API_KEY"; WiFiClient espClient; PubSubClient client(espClient); void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); client.setServer(mqtt_server, 1883); while (!client.connected()) { Serial.println("Connecting to MQTT server..."); if (client.connect(device_id, api_key, "")) { Serial.println("Connected to MQTT server"); } else { Serial.print("Failed to connect to MQTT server, rc="); Serial.println(client.state()); delay(1000); } } client.subscribe("your_topic"); } void loop() { client.loop(); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Received message: "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } ``` 其中,需要将 `your_SSID` 和 `your_PASSWORD` 替换为实际的 Wi-Fi SSID 和密码,将 `your_DEVICE_ID` 和 `your_API_KEY` 替换为在 OneNet 上创建的设备 ID 和 API Key,将 `your_topic` 替换为需要订阅的主题。在 `callback` 函数中可以处理收到的消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值