微信小程序使用MQTT的小例子

马肤
这是懒羊羊

本文章大部分内容来自MQTT官方教程,有需要的可以去MQTT官网查看,这里只分享一下自己的使用过程。谢谢大家观看!

首先我们使用微信开发者工具创建一个空项目。

不使用云开发,不使用模板。

然后我们去MQTT网址,或者下方链接下载mqtt.mini.js

这个可以下载mqtt.mini.js微信小程序使用MQTT的小例子,icon-default.png?t=N7T8,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,服务,服务器,程序,第2张https://unpkg.com/mqtt@4.2.1/dist/mqtt.min.js

在项目根目录下新建 utils 文件夹,有的话就不用新建了,将下载好的对应版本的 mqtt.min.js 文件放入该文件夹中,在 index.js 中通过如下方式引入 mqtt:

import mqtt from "../../utils/mqtt.min.js";

然后再pages目录中找到index文件夹,里面有四个文件:

在index.js中输入如下代码:

index.js

import mqtt from "../../utils/mqtt.min.js";
Page({
  data: {
    client: null,
    conenctBtnText: "连接",
    host: "mqtt-server.lierxun.com.cn",
    subTopic: "testtopic",
    pubTopic: "testtopic",
    pubMsg: "Hello! I am from WeChat miniprogram",
    receivedMsg: "",
    mqttOptions: {
      username: "",
      password: "",
      reconnectPeriod: 1000, // 1000毫秒,设置为 0 禁用自动重连,两次重新连接之间的间隔时间
      connectTimeout: 30 * 1000, // 30秒,连接超时时间
      // 更多参数请参阅 MQTT.js 官网文档:https://github.com/mqttjs/MQTT.js#mqttclientstreambuilder-options
      // 更多 EMQ 相关 MQTT 使用教程可在 EMQ 官方博客中进行搜索:https://www.emqx.com/zh/blog
    },
  },
  setValue(key, value) {
    this.setData({
      [key]: value,
    });
  },
  setHost(e) {
    this.setValue("host", e.detail.value);
  },
  setSubTopic(e) {
    this.setValue("subTopic", e.detail.value);
  },
  setPubTopic(e) {
    this.setValue("pubTopic", e.detail.value);
  },
  setPubMsg(e) {
    this.setValue("pubMsg", e.detail.value);
  },
  setRecMsg(msg) {
    this.setValue("receivedMsg", msg);
  },
  connect() {
    // MQTT-WebSocket 统一使用 /path 作为连接路径,连接时需指明,但在 EMQX Cloud 部署上使用的路径为 /mqtt
    // 因此不要忘了带上这个 /mqtt !!!
    // 微信小程序中需要将 wss 协议写为 wxs,且由于微信小程序出于安全限制,不支持 ws 协议
    try {
      this.setValue("conenctBtnText", "连接中...");
      const clientId = new Date().getTime();
      this.data.client = mqtt.connect(`wxs://${this.data.host}:8084/mqtt`, {
        ...this.data.mqttOptions,
        clientId,
      });
      this.data.client.on("connect", () => {
        wx.showToast({
          title: "连接成功",
        });
        this.setValue("conenctBtnText", "连接成功");
        this.data.client.on("message", (topic, payload) => {
          wx.showModal({
            content: `收到消息 - Topic: ${topic},Payload: ${payload}`,
            showCancel: false,
          });
          const currMsg = this.data.receivedMsg ? `
${payload}` : payload; this.setValue("receivedMsg", this.data.receivedMsg.concat(currMsg)); }); this.data.client.on("error", (error) => { this.setValue("conenctBtnText", "连接"); console.log("onError", error); }); this.data.client.on("reconnect", () => { this.setValue("conenctBtnText", "连接"); console.log("reconnecting..."); }); this.data.client.on("offline", () => { this.setValue("conenctBtnText", "连接"); console.log("onOffline"); }); // 更多 MQTT.js 相关 API 请参阅 https://github.com/mqttjs/MQTT.js#api }); } catch (error) { this.setValue("conenctBtnText", "连接"); console.log("mqtt.connect error", error); } }, subscribe() { if (this.data.client) { this.data.client.subscribe(this.data.subTopic); wx.showModal({ content: `成功订阅主题:${this.data.subTopic}`, showCancel: false, }); return; } wx.showToast({ title: "请先点击连接", icon: "error", }); }, unsubscribe() { if (this.data.client) { this.data.client.unsubscribe(this.data.subTopic); wx.showModal({ content: `成功取消订阅主题:${this.data.subTopic}`, showCancel: false, }); return; } wx.showToast({ title: "请先点击连接", icon: "error", }); }, publish() { if (this.data.client) { this.data.client.publish(this.data.pubTopic, this.data.pubMsg); return; } wx.showToast({ title: "请先点击连接", icon: "error", }); }, disconnect() { this.data.client.end(); this.data.client = null; this.setValue("conenctBtnText", "连接"); wx.showToast({ title: "成功断开连接", }); }, });

在index.wxml中输入如下代码:

  连接地址(域名):
  

文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码