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

 

其它

1.封裝的訂閱多個主題函數也支持訂閱一個主題

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

 

2.底層代碼還有一個修改的地方

在 paho-mqtt.js 連接WebSocket的地方增加了一個參數  protocols: ['mqtt']

目的是服務器配置反向代理的時候不用再去寫下面兩句話配置這個參數.

proxy_set_header Sec-WebSocket-Protocol mqtt;

more_clear_headers Sec-WebSocket-Protocol;

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM