Qt/C++編寫的mqtt除錯助手使用說明

飞扬青云發表於2024-10-14

一、使用說明

  1. 第一步,選擇協議字首,可選mqtt://、mqtts://、ws://、wss://四種,帶s結尾的是走ssl通訊,ws表示走websocket通訊。一般選預設的mqtt://就好。
  2. 第二步,填寫服務所在主機地址,可以是IP地址也可以是網址,只要真實存在的就行。
  3. 第三步,填寫通訊所用埠號,mqtt預設埠號是1883,以實際真實埠號為準。
  4. 第四步,填寫資源路徑,這個要websocket通訊才需要填寫。
  5. 第五步,選擇協議版本,這個要和實際的一致,比如伺服器不支援5.0,而這裡選擇的5.0則會失敗。一般伺服器都會支援所有協議,因為在通訊過程中會告知當前用哪個協議。
  6. 第六步,填寫客戶端唯一編號,這個可選,如果伺服器要求一定要填寫則填寫,不然通訊會失敗。
  7. 第七步,單擊啟動服務按鈕,連線成功後會變成斷開服務按鈕。
  8. 第八步,釋出主題,先要在主題文字框中輸入主題字串,再單擊發布主題按鈕。
  9. 第九步,訂閱主題,先要在主題文字框中輸入主題字串,再單擊訂閱主題按鈕。
  10. 既可以釋出主題,也可以訂閱主題,還可以取消訂閱的主題。
  11. 有些場景只需要釋出主題,比如下位機採集到的資料,則只需要釋出主題帶上資料內容即可。
  12. 有些場景只需要訂閱主題,比如上位機透過訂閱主題獲取到最新的資料,訂閱對應主題後,有新的主題資料釋出,就會立即更新通知訂閱過的客戶端。
  13. 釋出的主題和訂閱的主題,標識可以相同也可以不同,同一個標識的才會觸發通知機制,一旦釋出主題就會觸發通知訂閱過該主題的客戶端。
  14. 切換到高階引數選項卡,有一堆高階引數可以設定,比如使用者驗證,這樣可以防止非法使用者訪問。一般合法的使用者資訊需要在mqtt服務的後臺設定,相當於許可權控制。

//例項化mqtt採集類
IotMqttBase *mqttBase = new IotMqttBase(this);
//取出mqtt通訊物件
QMqttClient *mqttClient = mqttBase->getMqttClient();
//關聯收到資料訊號
connect(mqttClient, SIGNAL(messageReceived(QByteArray, QMqttTopicName)), this, SLOT(messageReceived(QByteArray, QMqttTopicName)));
//設定通訊引數/主機地址和埠引數必須設定
mqttClient->setHostname("broker.emqx.io");
mqttClient->setPort(1883);
//還有其他一堆引數根據情況按需設定
.....
//連線到伺服器
mqttBase->connectToHost();
//從伺服器斷開
mqttBase->disconnectFromHost();

//釋出主題
mqttClient->publish("qtmqtt/topic", "hello");
//訂閱主題
mqttClient->subscribe("qtmqtt/topic");

二、功能特點

  1. 支援多種物聯網通訊協議,包括modbus和mqtt。
  2. 協議方式支援串列埠com通訊、網路tcp通訊、網路udp通訊、網路websocket通訊。
  3. 資料規則支援rtu模式和網路模式,網路rtu模式也就是modbus rtu over tcp/udp/websocket。相當於modbus串列埠協議資料走網路方式通訊。
  4. 支援批次連續寫入暫存器數值和單個寫入暫存器數值。
  5. 支援資料順序格式的設定,比如大端小端,高位元組在前低位元組在前的設定。支援Short_AB、Short_BA、Long_ABCD、Long_CDAB、Long_BADC、Long_DCBA、Float_ABCD、Float_CDAB、Float_BADC、Float_DCBA等。
  6. 支援資料位位元組數設定,比如短整型、長整型、浮點型等。常規的一般是2位元組表示一個資料位,也有裝置是4位元組表示一個資料位,還有4位元組浮點數的形式。後期可能還有8位元組一個資料位。
  7. 支援mqtt協議,可設定主機地址和埠、協議版本、唯一標號、使用者名稱稱、使用者密碼。
  8. 支援mqtt釋出主題、訂閱主題、取消訂閱。
  9. 定時自動釋出主題,可設定保活時間、超時時間、過期時間。mqtt通訊自動重連。
  10. mqtt模擬資料收發支援多種格式,文字、json、base64、hex等。
  11. mqtt同時支援websocket方式,還支援ssl方式通訊。
  12. 支援多種採集通訊方式,包括串列埠和網路等,可自由擴充其他方式。可同時採集多路。
  13. 自定義採集間隔(精確到毫秒)和超時次數,超時後自動將離線的檔案從輪詢佇列中移除,加快輪詢速度。
  14. 可設定最大超時重連間隔,將離線的裝置重新探測一次,保證裝置恢復正常後能夠重新加入輪詢佇列。
  15. 同時提供了裝置模擬工具,支援各種協議,支援設定多個裝置的資料值。
  16. 模擬工具可隨機切換模擬資料值,要正常隨機資料就模擬生成正常範圍的資料,要報警資料就模擬生成報警範圍的資料。方便測試。
  17. 多執行緒採集和解析資料,以訊號的方式傳送解析結果,不卡主執行緒。
  18. 架構採用基類繼承方式,通用處理在基類,極易擴充其他通訊方式。
  19. 介面友好,使用非常簡單,設定要採集的地址集合、開始索引集合、採集數量集合、資料順序格式四個引數即可。會自動組裝對應協議的資料傳送。
  20. 採集後的資料以統一格式的訊號發出來,非常簡單易用。支援浮點型資料。
  21. 採集指令有優先順序,如果有自定義的資料需要優先執行。可以將優先順序高的指令呼叫append方法插入即可。可批次採集也可單個採集。
  22. 支援利用現有的通訊鏈路傳送自定義資料,這個資料可以不是標準的modbus協議,比如有時候需要一些私有協議資料,利用現有鏈路傳送下去執行。
  23. 多執行緒高併發,每個埠採集都是一個獨立的執行緒,互不干擾,支援成千上萬個裝置採集。
  24. 程式碼做了相容,支援各種編譯器,同時支援Qt4、Qt5、Qt6。
  25. 跨平臺,支援windows、linux、mac、嵌入式linux、android、各種國產系統和開發板等。

三、相關連結

  1. 體驗地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取碼:o05q 檔名:bin_iottool.zip
  2. 國內站點:https://gitee.com/feiyangqingyun
  3. 國際站點:https://github.com/feiyangqingyun

相關文章