小程序连接MQTT服务器,以及设置,避坑

打印 上一主题 下一主题

主题 887|帖子 887|积分 2661

1、MQTT服务器域名设置

由于小程序必须利用域名方式连接socket,所以必须为MQTT服务器设置域名,并设置SSL证书。
1.1相干文档:

EMQX 企业版安装 | EMQX 企业版 4.4 文档
EMQX MQTT 微信小程序接入 | EMQX 4.2 文档
MQTT 下载引入和设置连接 | ESP32全栈应用开辟文档 (icce.top)
1.2实现方法:

①宝塔面板新建网站:mqtt.yh***.com ,申请免费证书,然后设置SSL。
②网站设置修改,在设置文件中添加以下内容:
注意:端口选择8083/8084等,参考:设置阐明 | EMQX 企业版 4.4 文档

  1. # 添加反向代理,重点!解决android无法连接mqtt问题
  2.     location /mqtt {
  3.       proxy_pass http://127.0.0.1:8083/mqtt;
  4.       proxy_set_header Host $host;
  5.       proxy_set_header X-Real-IP $remote_addr;
  6.       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  7.       # client_max_body_size 35m;
  8.       proxy_http_version 1.1;
  9.       proxy_set_header Upgrade $http_upgrade;
  10.       proxy_set_header Connection "upgrade";   
  11.     }
复制代码
2、小程序编写

引入mqtt.min.js文件,MQTT 下载引入和设置连接 | ESP32全栈应用开辟文档 (icce.top)
  1. <template>
  2.         <view>
  3.                 <view class="btn-box status" style="width: 100%;">
  4.                         <u-button size="medium" :type="status==0?'default':'success'" @click="send" :loading="!linked">
  5.                         {{status==0?'运行设备':'暂停设备'}}</u-button>
  6.                 </view>
  7.         </view>
  8. </template>
  9. <script>
  10.         import mqtt from "../js/mqtt.min";
  11.         let client = null; // MQTT服务
  12.         export default {
  13.                 data() {
  14.                         return {
  15.                                 loading:false,
  16.                                 status:0,//设备状态,0关闭,1运行
  17.                                 options: {
  18.                                       protocolVersion: 4, //MQTT连接协议版本
  19.                                       clientId: 'miniTest',
  20.                                       clean: false,
  21.                                       password: 'Ch199410',
  22.                                       username: 'taskone',
  23.                                       reconnectPeriod: 1000, //1000毫秒,两次重新连接之间的间隔
  24.                                       connectTimeout: 3 * 1000, //1000毫秒,两次重新连接之间的间隔
  25.                                       resubscribe: true //如果连接断开并重新连接,则会再次自动订阅已订阅的主题(默认true)
  26.                                 },
  27.                                 topic:"BlueLED",//发布主题
  28.                                 linked:false,//是否连接
  29.                         }
  30.                 },
  31.                 onReady() {
  32.                         this.connectMqtt()
  33.                 },
  34.                 destroyed() {
  35.                         client?.end(true, error => {});
  36.                         client = null;
  37.                 },
  38.                 methods: {
  39.                         //连接mqtt服务器
  40.                         connectMqtt() {
  41.                           let that = this;
  42.                           client = mqtt.connect("wxs://mqtt.yh**.com/mqtt", this.options); // 连接方法
  43.                           client.on("connect", error => {
  44.                             console.log("连接成功");
  45.                             // 可以在这里写一些连接成功的逻辑
  46.                                 that.linked  = true
  47.                                 that.bindSubscribe()
  48.                           });
  49.                           client.on("reconnect", error => {
  50.                             console.log("正在重连:", error);
  51.                             wx.showToast({ icon: "none", title: "正在重连", });
  52.                           });
  53.                           client.on("error", error => {
  54.                             console.log("连接失败:", error);
  55.                             wx.showToast({ icon: "none", title: "MQTT连接失败", });
  56.                           });
  57.                           client.on("message", (topic, message) => {
  58.                             console.log(topic,message)
  59.                           });
  60.                         },
  61.                         //订阅主题
  62.                         bindSubscribe(){
  63.                                 // 订阅一个主题
  64.                                 client.subscribe(this.topic, { qos: 0 }, function (err) {
  65.                                   if (!err) {
  66.                                     console.log("成功");
  67.                                     wx.showToast({ icon: "none", title: "添加成功" });
  68.                                     // 可以在这里写一些订阅主题成功的逻辑
  69.                                   }
  70.                                 });
  71.                         },
  72.                         //发送消息
  73.                         pushMsg(msg){
  74.                                 let that = this
  75.                                 client.publish(this.topic, msg, { qos: 0 }, err => {
  76.                                   if (!err) {
  77.                                           that.status = that.status==0?1:0
  78.                                     console.log("topic:", "想要发送消息的Topic变量", "成功发出消息", msg);
  79.                                   }
  80.                                 });
  81.                         },
  82.                         send(){
  83.                                 this.pushMsg(this.status==0?'on':'off')
  84.                         }
  85.                 }
  86.         }
  87. </script>
  88. <style lang="less" scoped>
  89. .btn-box{
  90.         width: 100%;
  91.         text-align: center;
  92.         padding:50rpx 0;
  93. }
  94. </style>
复制代码
运行表现MQTT连接成功: 


3、小程序连接MQTT问题

真机运行可能会遇到问题,小程序连接MQTT问题和方法。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表