1. 程式人生 > 實用技巧 >203-STM32+BC26基本控制篇-移植使用-移植微信小程式MQTT底層包到自己的工程專案

203-STM32+BC26基本控制篇-移植使用-移植微信小程式MQTT底層包到自己的工程專案

<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("訂閱失敗");
        });