203-STM32+BC26基本控制篇-移植使用-移植微信小程式MQTT底層包到自己的工程專案
阿新 • • 發佈:2020-12-17
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLBC26AA/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
說明
paho-mqtt.js 是官方原始碼包
mqtt.js是我再次封裝的包
public.js是存放了公共函式(字串轉16進位制,隨機數)
新建一個微信小程式工程
拷貝以下三個檔案到新工程的utils資料夾
連線MQTT
1.根據自己的MQTT伺服器更改以下資訊
2.在軟體啟動的地方呼叫一次連線函式
注:只要寫上連線,內部自動斷線重連
var MQTT = require("./utils/mqtt.js");
MQTT.ConnectMqtt();//連結MQTT
3.編譯下工程,成功連線MQTT,列印如下
4.測試斷線重連
訂閱一個主題
MQTT.subscribeTopic( "1111", //訂閱1111 0,//訊息等級 function () { console.log("訂閱成功"); }, function () { console.log("訂閱失敗"); } );//訂閱主題
建議
var MQTT = require("../../utils/mqtt.js"); var TimeNumber;//迴圈訂閱裝置主題定時器 //訂閱裝置釋出的主題 try { clearInterval(TimeNumber); } catch (e) { } TimeNumber = setInterval(function() { MQTT.subscribeTopic( "1111", //訂閱1111 0,//訊息等級 function () { console.log("訂閱成功"); clearInterval(TimeNumber);//訂閱成功清除定時 }, function () { console.log("訂閱失敗"); } );//訂閱主題 }, 1000, "null");//啟動定時器,迴圈訂閱主題,直至訂閱成功
訂閱多個主題
1.本身底層包不支援一次性訂閱多個主題,我修改了底層包
2.使用
var TopicMultiple = ["1111", "2222"];//訂閱的主題 var QosMultiple = [0, 0];//各個主題訊息等級 MQTT.subscribeTopicMultiple( TopicMultiple, QosMultiple, function () { console.log("訂閱成功"); }, function () { console.log("訂閱失敗"); });
取消訂閱的主題
MQTT.unSubscribeTopic( "1111", //取消訂閱的主題 function() { console.log("取消訂閱成功"); } );
釋出訊息
1.釋出字串訊息
MQTT.publishTopic( "222", //釋出的主題 "message", //釋出的訊息 0, //訊息等級 false, //不需要伺服器保留 function()//傳送成功回撥 { console.log("傳送訊息成功"); } );
2.釋出16進位制訊息
0xAA 0x88 0xFF 0xdd
MQTT.publishStringToHex( "222", //釋出的主題 "AA 88 FF dd", //釋出的訊息 0, //訊息等級 false, //不需要伺服器保留 function ()//傳送成功回撥 { console.log("傳送訊息成功"); } );
接收訊息
MQTT.SetonMessageArrivedCallBack( function (arg) { console.log(arg.destinationName + " " + arg.payloadString); } );//註冊接收訊息回撥函式
注意:如果接收的資料有16進位制,有字串,需要加入try
MQTT.SetonMessageArrivedCallBack( function (arg) { try{ console.log(arg.destinationName + " " + arg.payloadString);//處理字串訊息 }catch(e){ console.log(e); } try { console.log(arg.payloadBytes);//處理16進位制訊息 let byt = arg.payloadBytes; } catch (e) { console.log(e); } } );//註冊接收訊息回撥函式
監聽MQTT連線狀態
1.監聽掉線
MQTT.SetonConnectionLostCallBack(function(arg){ console.log(arg);//列印連結失敗詳細資訊 });//軟體掉線
2.監聽上線
MQTT.SetonConnectionSuccessCallBack(function(){ console.log("連線上MQTT"); });//連線上MQTT
其它
封裝的訂閱多個主題函式也支援訂閱一個主題
直接用paho-mqtt.js,訂閱的主題 1111 訊息等級 0
client.subscribeMultiple( "1111" , { qos: 0 , invocationContext: { arg: null }, onSuccess: function() { console.log("訂閱成功"); }, onFailure: function() { console.log("訂閱失敗"); } } );
用 mqtt.js
MQTT.subscribeTopicMultiple( "1111", //訂閱的主題 0, //訊息等級 function () { console.log("訂閱成功"); }, function () { console.log("訂閱失敗"); });