• 基于Ubuntu Qt mqtt库的mqtt客户端实现


    花了一天时间,幸好看到了这篇知乎的文章,虽说是windows 平台,但是原理和步骤差不多,我稍微修改了下,总结了如何基于Ubuntu QtMqtt库,编译一个mqtt client.

    Qt开发MQTT程序有两种方式;

    • Qt官方已经提供了基于MQTT的封装,但是并没有正式加入到Qt的标准库中,需要自己进行编译添加;
    • 基于第三方EMQ开发的MQTT接口;

    本文主要介绍第一种方式,即使用Qt官方的MQTT封装库,我们将编译MQTT库,并测试一个官方的Demo。

    下载地址

    Qt已经在GitHub上托管了相应的MQTT库的代码,git clone https://github.com/qt/qtmqtt,到本地后,然后和本地QT版本保持同步。git checkout 5.15.2,

    然后可以用git branch-a查看目前分支

    下面,简单罗列一下,整体的环境;

    QT版本:Qt5.15.2

    MQTT库版本:5.15.2

    整体环境:Ubuntu+QtCreator + GCC

    编译QtMqtt库

    D:\Qt\Qt5.12.11\5.12.11\mingw73_64\include

    在Qt的安装目录下新建QtMqtt文件夹;

    然后将qtmqtt-5.12.10路径下的文件复制到D:\Qt\Qt5.12.11\5.12.11\mingw73_64\include路径下;这一步在

    总结一下上述的过程,具体如下图所示;

    具体的实际路径要根据自己的安装情况为主。

    这时候我们重新回到qtmqtt-5.12.10路径下,打开qtmqtt.pro,就可以进行编译了;

    这里可以编译成Debug和Release模式,编译成功之后就可以找到 Qt5Mqtt.dllQt5Mqttd.dll

    复制DLL库和lib库

    将lib文件夹的文件复制到

    这时候,我们可以打开simple mqtt client项目进行测试了,路径如下所示;

    这时候已经可以进行编译了,但是会发现有还两个报错情况:

    第一个报错信息如下:

    Unknown module(s) in QT: mqtt
    

    无法识别mqtt模块;

    解决方案如下:

    qt_lib_mqtt.pri文件和qt_lib_mqtt_private.pri复制到Qt的安装路径下的mkspecs\modules路径中即可,例如我的电脑上的路径是D:\Qt\Qt5.12.11\5.12.11\mingw73_64\mkspecs\modules

    mingw73_64是我具体使用的工具链,这里要根据实际使用的工具链进行选择。

    第二个报错信息如下:

    QMqttClient does not exist
    

    原因是头文件无法找到,做出如下修改;

    1. //#include
    2. #include

    再次编译运行,程序可以正常运行。

    简单总结一下:

    • 库版本和位置是否放置在相应编译工具链目录下。
    • 头文件是否对应到类名文件,并放置到编译工具链目录下。
    • modules-inst下的pri文件是否放置到编译工具链目录的相应目录下, QT +=mqtt 能否正常工作都依赖目录里的pri文件。

    为了方便测试mqtt的一些自定义指令,我在原来的demo基础上简单修改了一下,最多支持9条消息编辑和单独发送,具体如下所示;

    这里可以通过修改cmd.ini文件进行配置主机地址,端口,以及需要发送的TopicMessage的内容;

    注意:cmd.ini必须和可执行文件处于同一路径下;

    代码已经上传到Github,目前功能比较简单,不支持设置QoS,支持文本格式数据接收,不支持遗嘱消息,感兴趣的同学可以看一下,地址如下:https://github.com/hotsauce1861/mqtt-client-debug-helper.git

    发布于 2022-03-05 15:42

  • 相关阅读:
    【Neo4j系列】Neo4j概念简介及整合SpringBoot
    Go: Struct 匿名字段简介与实践
    Opencv 基本操作三 实现各个形态学处理并实现多图展示
    持续测试(CT)实战经验分享
    JAVA学习-行为抽象和Lambda.收集器
    Python实现猎人猎物优化算法(HPO)优化LightGBM分类模型(LGBMClassifier算法)项目实战
    SpringCloud-微服务架构演变
    【Java】FileUtils练习题3
    SpringBoot整合Kafka的快速使用教程
    Anaconda常用操作(亲测有效果)
  • 原文地址:https://blog.csdn.net/brave_heart_lxl/article/details/125876723