ESP8266 SDK开发 - 4.05 - 自建MQTT服务器篇-编写微信小程序连接MQTT服务器程序

2021-04-28 11:21:51 浏览数 (1)

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/Learn8266ForSDK" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

注意

如果想自己实现MQTT服务器供微信小程序连接,建议购买云主机(电脑)

https://www.cnblogs.com/yangfengwu/p/13208227.html

以下教程有Windows版和Linux版,下面的教程是用来做产品项目的

配置起来周期比较长,需要等2个星期才会审核完成!

对于学习开发者使用我提供的MQTT服务器地址信息测试就可以.

下载MQTT包

https://unpkg.com/mqtt@3.0.0/dist/mqtt.min.js

按下键盘的CTRL A 全选

然后按下键盘的 CTRL C 复制

建一个名字为 mqtt.min 后缀名为.js的文件,然后把上面的内容复制进去即可

我已经复制好了

另外我给用户封装了一个mqtt.js文件

这个文件是对MQTT操作函数的再一次封装

使得用户能够快速的和MQTT通信

新建微信小程序工程

1.新建一个文件夹用来保存微信小程序工程 名字随意

2.新建微信小程序工程

注:目录选择刚才新建的文件夹

3.把mqtt.min.js 和 mqtt.js文件放到utils目录

4.微信小程序选择不校验域名

5.在软件启动的地方调用一次连接函数

注:只要写上连接,内部自动断线重连

var MQTT = require("./utils/mqtt.js");

MQTT.ConnectMqtt();//链接MQTT

6.默认连接我的服务器

7.保存编译一下,如果日志打印 connect 说明连接成功

8.订阅主题

建议用户使用下面的定时器轮训方式订阅主题

/**

* @brief //订阅主题

* @param topic 订阅的主题

* @param q 消息等级

* @param SuccessFun 订阅成功回调函数 SuccessFun(e)

* @param FailureFun 订阅失败回调函数 FailureFun(e)

* @example subscribeTopic("1111",0,SuccessFun,FailureFun);

**

代码语言:javascript复制
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");//启动定时器,循环订阅主题,直至订阅成功

9.设置接收消息回调

代码语言:javascript复制
    /**设置接收消息回调*/
    MQTT.SetonMessageArrivedCallBack(
      function(arg){
        console.log("主题:"   arg.destinationName   " 消息:"   arg.payloadString);
      }
    )

10.打开一个MQTT调试助手,可以发送数据给微信小程序

11.微信小程序使用MQTT发送数据

在接收回调函数里面发送数据出去,发布的主题:2222 发送的数据:msg=====

代码语言:javascript复制
        MQTT.publishTopic(
          "2222", //主题
          "msg=====", //消息
          0, //消息等级
          false, //是否需要服务器保留消息
          function (arg) { //发送成功回调
            console.log("发送数据成功");
          }
        );

其它

1.一次性订阅多个主题

注:下面是订阅两个主题

订阅消息等级为0的主题topic

订阅消息等级为1的主题 device/1111

代码语言:javascript复制
//订阅多个主题
      MQTT.subscribeTopicMultiple(
        { 'topic': { qos: 0 }, 'device/1111': { qos: 1 } }, 

          function (){
            console.log("订阅成功");
          }, 
          function () {
            console.log("订阅失败");
          }
        );

2.小程序和服务器断开连接

代码语言:javascript复制
    MQTT.SetonConnectionLostCallBack(function (arg) {
      //offline / reconnect / disconnect / close / error
      if (arg == 'offline') console.log('断线');
      else if (arg == 'reconnect') console.log('尝试重连');
      
    });

3.小程序和服务器连接上

代码语言:javascript复制
MQTT.SetonConnectionSuccessCallBack(function () {
      console.log("连接上MQTT");
    });//连接上MQTT

4.取消订阅主题

列如:取消订阅主题 1111

代码语言:javascript复制
MQTT.unSubscribeTopic('1111', function () {});

0 人点赞