我是靠谱客的博主 活力月亮,最近开发中收集的这篇文章主要介绍基于Qt的mqtt client调试助手,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

点击加入嵌入式交流群https://t.1yb.co/FOLAhttps://t.1yb.co/FOLA

大家好,我是小麦,之前写过一篇MQTT的文章,里面用来测试的mqtt client程序是自己编译的。可以参考上一篇文章MQTT协议,终于有人讲清楚了https://great.blog.csdn.net/article/details/118503059在这篇文章里我简单总结了如何基于QtMqtt库,编译一个mqtt client.

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

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

  • 基于第三方EMQ开发的MQTT接口;

本文主要介绍第一种方式,即使用Qt官方的MQTT封装库,我们将编译MQTT库,并编译一个官方的Demo,实际需要写的代码其实并不多。

下载地址

Qt已经在GitHub上托管了相应的MQTT库的代码,地址:https://github.com/qt/qtmqtt

fce30c6899da8681279a74ae1d7ddacb.png

这个库是基于MQTT V3.1和V3.1.1实现的,这里要注意协议版本。

741f0d63f2b31c695817634439349883.png

如上图所示,这里有很多分支;

这里我测试6.2这个版本,它需要通过CMake对项目进行构建,但是发现这个版本的MQTT需要QT 6 以上的版本才行,具体报错信息如下图所示:

3e53e23b2e4a5dcb68571568513c451b.png

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

QT版本:Qt5.12.11

MQTT库版本:5.12.10

整体环境:Win10+QtCreator + MinGW-W64

编译QtMqtt库

D:QtQt5.12.115.12.11mingw73_64include

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

ccaae12f3db71c5161b5fa03f970717f.png

然后将qtmqtt-5.12.10路径下的文件复制到D:QtQt5.12.115.12.11mingw73_64include路径下;

0baed560f1a371d4c864fd36939f0cfe.png

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

435182b5656bd750b91cfaedde004bae.png

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

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

cec4660ab0bf0afd887caab4bd08ca0f.png

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

db24939ee2fc39258ab01e9a86830ac7.png

复制DLL库和lib库

f58af5b9dfa6fee37bfd8f2dd03e31dc.png

将lib文件夹的文件复制到

6e8ab65783760ddcdc1dc5bac412264d.png 09ee1907630086769b412d1263282be4.png

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

ab3fcdb99e42317951c708d55b26d91c.png

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

第一个报错信息如下:

Unknown module(s) in QT: mqtt

无法识别mqtt模块;

解决方案如下:

40573fb04bfdd1fefd7e14092bab3939.png

qt_lib_mqtt.pri文件和qt_lib_mqtt_private.pri复制到Qt的安装路径下的mkspecsmodules路径中即可,例如我的电脑上的路径是D:QtQt5.12.115.12.11mingw73_64mkspecsmodules

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

第二个报错信息如下:

QMqttClient does not exist
e1aa36f8dd1182369c5b28072ffa8659.png

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

//#include <QMqttClient>
#include <QtMqtt/qmqttclient.h>

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

简单总结一下:

  • 库版本和位置是否放置在相应编译工具链目录下。

  • 头文件是否对应到类名文件,并放置到编译工具链目录下。

  • modules-inst下的pri文件是否放置到编译工具链目录的相应目录下, QT +=mqtt 能否正常工作都依赖目录里的pri文件。

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

fb35a8ff206da649b7f3ee142fc41615.png

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

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

6ce6ff8fbc866a4767f594be515b92d5.png

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

如果大家更好的推荐,可以在下方留言区积极讨论。

另外我编译了一个可执行程序;

414b3a381e9bac3ff3c61e59e38cb4fa.png

c3cbeaa9689ab1f06348b1e749f74061.gif

星标公众号,后台回复【MQTT】,即可获取。

—— The End ——

推荐好文  点击蓝色字体即可跳转

☞ 状态机的三种骚操作,值得你了解

☞ 推荐一个直接用于项目开发的PID库!很好用,很稳定a0deff5bb41bf4df14bd0f0da5e29ac3.gif

☞ 这14种嵌入式实时系统,你用过哪些?

☞ 推荐一款我私藏已久的串口示波神器

欢迎转发、留言、点赞、分享给你的朋友,感谢您的支持!

点击上方名片关注公众号

分享 ????  点赞 ????  在看 ❤️ 

以“三连”行动支持优质内容!

最后

以上就是活力月亮为你收集整理的基于Qt的mqtt client调试助手的全部内容,希望文章能够帮你解决基于Qt的mqtt client调试助手所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部