微信小程序+MQTT实现远程控制家用灯泡

相逢意气为君饮,系马高楼垂柳边。这篇文章主要讲述微信小程序+MQTT实现远程控制家用灯泡相关的知识,希望能为你提供帮助。
1,本程MQTT服务端使用阿里云物联网IOT平台的MQTT服务器
基本流程:创建产品-----创建设备-----规则引擎------云产品流转配置设备间转发规则,参考如下图


设备证书参数,MQTT连接参数如图【点击查看可一键复制相应参数】
设备证书参数:【ProductKey,DeviceName,Devicesecret】
MQTT连接参数:【clientId,username,password,mqttHosturl,port】

【微信小程序+MQTT实现远程控制家用灯泡】MQTT客户端软件连接测试如图 【MQTT.fx】
MQTT连接参数生成工具如图,复制设备证书三要素,粘贴即可生成,如图
设备间通信具体配置如图

特别注意:不要使用同一组参数(即三元组:ProductKey,DeviceName,DeviceSecret)在多个地方同时进行连接,即一组三元组同一时间只能存在一个连接,否则会相互挤掉线反复重连!!!(常见情形为:模拟打开运行同时又真机调试运行或者小程序和硬件设备使用同一组参数等等)



2,准备就绪后,注册开发微信小程序如图,重点放在index.js 和index.wxml

注意:勾选微信开发工具中详情里面的本地设置选项中的----【不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书】选项或者配置开发者后台socket 合法域名 为:wss://productKey.iot-as-mqtt.cn-shanghai.aliyuncs.com(替换productKey为自己的产品key,还有注意区域是不是cn-shanghai,不是也要替换)
问:为什么设备连上之后小程序就断开或者小程序连上之后设备就断开(或者反复断开和重连)?
答:这是因为同一时间使用了同一组设备参数【ProductKey,DeviceName,DeviceSecret】 连接了两次以上,通常表现为小程序进行了两次以上连接(例如模拟器和真机调试一起运行)或者小程序和设备使用了同一组设备参数【ProductKey,DeviceName,DeviceSecret】导致的,mqtt协议里规定同一clientId只能有一个连接(具体请查看mqtt协议文档),但是阿里云物联网稍有不同,还会根据使用的参数【ProductKey,DeviceName,DeviceSecret】做判断;通常做法是我们在阿里云物联网控制台创建一个产品对应小程序端,另一个产品对应硬件设备端,然后分别在相应的产品下创建设备,之后分别获取各自设备参数设置小程序和硬件设备即可(即需要两组参数【ProductKey,DeviceName,DeviceSecret】)。
问:接上一问题,既然不能使用同一组设备参数【ProductKey,DeviceName,DeviceSecret】,那小程序和设备之间该如何通信? 答: 标准的mqtt协议里,我们一般相互通信是直接订阅双方相应的主题,然后往主题发布消息即可,但是阿里云物联网平台的主题订阅是设有权限的,并且在订阅主题之后还需要设定相应的规则去转发数据,否则即使你订阅了相应的主题,但还是不会收到控制端或其他的设备端发过来的消息的。具体的主题订阅权限和默认设置可查看对应产品详情里的Topic类列表即可,那么数据转发方式有以下几种:使用RRPC方式(此方式只能app主动发消息给设备,设备进行应答,设备无法主动向app发送消息,适用场景为app需要确认设备已经接收和处理好信息),但需要自建后台服务器,集成服务器端SDK(当然也是可以不用搭建服务器,直接本地调用,但是非常非常不推荐这样做,因为这样很容易暴露一些关键的配置信息,有着非常非常大的安全隐患) 使用规则引擎—云产品流转(推荐,可实现标准mqtt里的相互收发)或者路由转发(需要搭建后台服务器),具体使用方式可以参考官方的最佳实践文档:基于规则引擎的M2M设备间通信和基于Topic消息路由的M2M设备间通信,通常来说,实际的业务需求是离不开后台服务器的,所以基本上都是要搭建后台服务器的。
3,开发连接测试Nodemcu-Esp8266 ,主要有2步操作,设置连接WIFI,初始化MQTT客户端,如图


4,发布小程序颁发,手机端测试是否可以正常发送消息到设备,测试效果如图

5,至此简单了介绍了如何实现远程控制台设备步骤,感谢与大家分享,如有不足之处欢迎评论。

    推荐阅读