當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 小麥大叔
[導(dǎo)讀]點(diǎn)擊上方“小麥大叔”,選擇“置頂/星標(biāo)公眾號(hào)”福利干貨,第一時(shí)間送達(dá)大家好,我是小麥,之前寫(xiě)過(guò)一篇MQTT的文章,里面用來(lái)測(cè)試的mqttclient程序是自己編譯的??梢詤⒖忌弦黄恼隆禡QTT協(xié)議,終于有人講清楚了》。在這篇文章里我簡(jiǎn)單總結(jié)了如何基于Qt的Mqtt庫(kù),編譯一個(gè)m...

點(diǎn)擊上方“小麥大叔”,選擇“置頂/星標(biāo)公眾號(hào)”

福利干貨,第一時(shí)間送達(dá)

大家好,我是小麥,之前寫(xiě)過(guò)一篇MQTT的文章,里面用來(lái)測(cè)試的mqtt client程序是自己編譯的。可以參考上一篇文章MQTT協(xié)議,終于有人講清楚了。

在這篇文章里我簡(jiǎn)單總結(jié)了如何基于QtMqtt庫(kù),編譯一個(gè)mqtt client.

Qt開(kāi)發(fā)MQTT程序有兩種方式;

  • Qt官方已經(jīng)提供了基于MQTT的封裝,但是并沒(méi)有正式加入到Qt的標(biāo)準(zhǔn)庫(kù)中,需要自己進(jìn)行編譯添加;
  • 基于第三方EMQ開(kāi)發(fā)的MQTT接口;
本文主要介紹第一種方式,即使用Qt官方的MQTT封裝庫(kù),我們將編譯MQTT庫(kù),并編譯一個(gè)官方的Demo,實(shí)際需要寫(xiě)的代碼其實(shí)并不多。

下載地址

Qt已經(jīng)在GitHub上托管了相應(yīng)的MQTT庫(kù)的代碼,地址:https://github.com/qt/qtmqtt

這個(gè)庫(kù)是基于MQTT V3.1和V3.1.1實(shí)現(xiàn)的,這里要注意協(xié)議版本。

如上圖所示,這里有很多分支;

這里我測(cè)試6.2這個(gè)版本,它需要通過(guò)CMake對(duì)項(xiàng)目進(jìn)行構(gòu)建,但是發(fā)現(xiàn)這個(gè)版本的MQTT需要QT 6 以上的版本才行,具體報(bào)錯(cuò)信息如下圖所示:

下面,簡(jiǎn)單羅列一下,整體的環(huán)境;

QT版本:Qt5.12.11

MQTT庫(kù)版本:5.12.10

整體環(huán)境:Win10 QtCreator MinGW-W64

編譯QtMqtt庫(kù)

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

在Qt的安裝目錄下新建QtMqtt文件夾;

然后將qtmqtt-5.12.10路徑下的文件復(fù)制到D:\Qt\Qt5.12.11\5.12.11\mingw73_64\include路徑下;

總結(jié)一下上述的過(guò)程,具體如下圖所示;

具體的實(shí)際路徑要根據(jù)自己的安裝情況為主。

這時(shí)候我們重新回到qtmqtt-5.12.10路徑下,打開(kāi)qtmqtt.pro,就可以進(jìn)行編譯了;

這里可以編譯成Debug和Release模式,編譯成功之后就可以找到 Qt5Mqtt.dllQt5Mqttd.dll;

復(fù)制DLL庫(kù)和lib庫(kù)

將lib文件夾的文件復(fù)制到

這時(shí)候,我們可以打開(kāi)simple mqtt client項(xiàng)目進(jìn)行測(cè)試了,路徑如下所示;

這時(shí)候已經(jīng)可以進(jìn)行編譯了,但是會(huì)發(fā)現(xiàn)有還兩個(gè)報(bào)錯(cuò)情況:

第一個(gè)報(bào)錯(cuò)信息如下:

Unknown?module(s)?in?QT:?mqtt
無(wú)法識(shí)別mqtt模塊;

解決方案如下:

qt_lib_mqtt.pri文件和qt_lib_mqtt_private.pri復(fù)制到Qt的安裝路徑下的mkspecs\modules路徑中即可,例如我的電腦上的路徑是D:\Qt\Qt5.12.11\5.12.11\mingw73_64\mkspecs\modules

mingw73_64是我具體使用的工具鏈,這里要根據(jù)實(shí)際使用的工具鏈進(jìn)行選擇。

第二個(gè)報(bào)錯(cuò)信息如下:

QMqttClient?does?not?exist
原因是頭文件無(wú)法找到,做出如下修改;

//#include?
#include?
再次編譯運(yùn)行,程序可以正常運(yùn)行。

簡(jiǎn)單總結(jié)一下:

  • 庫(kù)版本和位置是否放置在相應(yīng)編譯工具鏈目錄下。
  • 頭文件是否對(duì)應(yīng)到類(lèi)名文件,并放置到編譯工具鏈目錄下。
  • modules-inst下的pri文件是否放置到編譯工具鏈目錄的相應(yīng)目錄下, QT =mqtt 能否正常工作都依賴(lài)目錄里的pri文件。
為了方便測(cè)試mqtt的一些自定義指令,我在原來(lái)的demo基礎(chǔ)上簡(jiǎn)單修改了一下,最多支持9條消息編輯和單獨(dú)發(fā)送,具體如下所示;

這里可以通過(guò)修改cmd.ini文件進(jìn)行配置主機(jī)地址,端口,以及需要發(fā)送的TopicMessage的內(nèi)容;

注意:cmd.ini必須和可執(zhí)行文件處于同一路徑下;

代碼已經(jīng)上傳到Github,目前功能比較簡(jiǎn)單,不支持設(shè)置QoS,支持文本格式數(shù)據(jù)接收,不支持遺囑消息,感興趣的同學(xué)可以看一下,地址如下:https://github.com/hotsauce1861/mqtt-client-debug-helper.git

如果大家更好的推薦,可以在下方留言區(qū)積極討論。

另外我編譯了一個(gè)可執(zhí)行程序;


星標(biāo)公眾號(hào),后臺(tái)回復(fù)【MQTT】,即可獲取。


—— The End?——
推薦好文??點(diǎn)擊藍(lán)色字體即可跳轉(zhuǎn)??狀態(tài)機(jī)的三種騷操作,值得你了解
??推薦一個(gè)直接用于項(xiàng)目開(kāi)發(fā)的PID庫(kù)!很好用,很穩(wěn)定??這14種嵌入式實(shí)時(shí)系統(tǒng),你用過(guò)哪些???推薦一款我私藏已久的串口示波神器
歡迎轉(zhuǎn)發(fā)、留言、點(diǎn)贊、分享給你的朋友,感謝您的支持!


點(diǎn)擊上方名片關(guān)注公眾號(hào)


分享???點(diǎn)贊???在看????

以“三連”行動(dòng)支持優(yōu)質(zhì)內(nèi)容!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉