微信小程序连接自搭建emq(emqx)的MQTT服务器

总体和连接阿里云物联网差不多,步骤如下:

  1. 去Github下载MQTT.js 库;一开始没注意,搞了很久,还把项目下下来自己编译,各种报错,最终也编译出来了,可后来发现其实有现成的单文件可用的,https://unpkg.com/mqtt/dist/mqtt.min.js,点击打开链接然后右键另存为即可(当前版本:2.18.8)
  2. 下载微信开发者工具,并新建一个项目
  3. 拷贝刚刚下载的mqtt.min.js到utils目录中去
  4. 勾选微信开发工具----【不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书】选项或者配置开发者后台socket 合法域名
  5. 修改index.js文件成如下:
// index.js
// 获取应用实例
const app = getApp()
var mqtt = require('../../utils/mqtt.min.js') //根据自己存放的路径修改
Page({
  data: {
    motto: 'Hello World',
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    canIUseGetUserProfile: false,
    canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName') // 如需尝试获取用户信息可改为false
  },
  // 事件处理函数
  bindViewTap() {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  onLoad() {
    if (wx.getUserProfile) {
      this.setData({
        canIUseGetUserProfile: true
      })
    }
    this.doConnect();
  },
  doConnect(){
  	//如果你服务器开了连接验证,这里的参数要自己加上username和password等
    const options = {
      keepalive: 60, //60s
      clean: true, //cleanSession不保持持久会话
      protocolVersion: 4 ,//MQTT v3.1.1
      clientId:Math.random().toString(36).substr(2)
    };
    console.log(options)
    let url = "wxs://broker.emqx.io:8084/mqtt";//这个地址是emq官方的公开免费地址,请换成自己服务器的地址
    console.log(url);
    const client = mqtt.connect(url,options)
    client.on('connect', function () {
      console.log('连接服务器成功')
    })
	//接收消息监听
    client.on('message', function (topic, message) {
      // message is Buffer
      let msg = message.toString();
      console.log('收到消息:'+msg);
     //关闭连接 client.end()
    })
  },
  getUserProfile(e) {
    // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
    wx.getUserProfile({
      desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: (res) => {
        console.log(res)
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    })
  },
  getUserInfo(e) {
    // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
    console.log(e)
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  }
})

看到控制台输出
微信小程序连接自搭建emq(emqx)的MQTT服务器_第1张图片

服务器连接已完成

你可能感兴趣的:(websocket,mqtt,小程序,微信小程序,小程序,emq,emqx,mqtt)