如何在微信小程序的websocket上使用mqtt协议

Python019

如何在微信小程序的websocket上使用mqtt协议,第1张

第一步:

参考此库官方说明:https://github.com/mqttjs/MQTT.js#browserify

npm install -g webpack // install webpack

cd node_modules/mqtt

npm install . // install dev dependencies

webpack mqtt.js ./my_mqtt.js --output-library-target commonjs2

第二步:

将生成的my_mqtt.js文件里所有的:

(function() { return this}())

替换为:

window

第三步:

在my_mqtt.js文件顶部加上代码:

var setImmediate = setTimeout

var clearImmediate = clearTimeout

var socketOpen = false

var socketMsgQueue = []

function sendSocketMessage(msg) {

console.log('send msg:', typeof msg)

console.log(msg)

if (socketOpen) {

wx.sendSocketMessage({

data: msg

})

} else {

socketMsgQueue.push(msg)

}

}

var document = {

URL: ''

}

var window = {

setTimeout: setTimeout,

clearTimeout: clearTimeout,

WebSocket: function (url) {

console.log('call window WebSocket', arguments)

var ws = {

send: sendSocketMessage,

close: wx.closeSocket,

onopen: null,

onmessage: null,

onclose: null,

onerror: null

}

wx.connectSocket({ url: url })

wx.onSocketOpen(function (res) {

console.log('收到onopen事件:', arguments)

socketOpen = true

for (var i = 0i <socketMsgQueue.lengthi++) {

sendSocketMessage(socketMsgQueue[i])

}

socketMsgQueue = []

ws.onopen &&ws.onopen.apply(ws, arguments)

})

wx.onSocketMessage(function (res) {

console.log('收到onmessage事件:', arguments)

console.log(res.data)

ws.onmessage &&ws.onmessage.apply(ws, arguments)

})

wx.onSocketClose(function () {

console.log('收到onclose事件:', arguments)

ws.onclose &&ws.onclose.apply(ws, arguments)

})

wx.onSocketError(function () {

console.log('收到onerror事件:', arguments)

ws.onerror &&ws.onerror.apply(ws, arguments)

})

return ws

}

}

这里我们使用了一个库: PubSubClient

找到多协议接入入口

添加旧版MQTT产品

添加产品

添加产品成功

然后添加设备

接下来我们来找到旧版MQTT关键的信息:

2.设备ID(在设备界面)

3.设备鉴权信息

思路: 1.连接网络 2.登录ONENET 3.发布主题信息

可以上传数据,也能接收到OneNet下发的命令

后来又在接收命令的callback里写了一个点灯, 下发命令1就开灯, 0就关灯

需要用到的库:

引入"PubSubClient.h"后

打开"PubSubClient.h"

修改如下内容:

关于MQTT协议, 请参考文章: https://zhuanlan.zhihu.com/p/89057819

请参考我之前整理的文档:

【腾讯文档】MQTT连接阿里云示例(1) https://docs.qq.com/sheet/DWXBaUE9nWmZVaGJX

如果使用了AliyunMqttArduino, 就不需要关系协议的报文和加密方式了

首先创建一个mqtt客户端

返回值: 连接结果

返回: 状态码

mqttClient.publish(主题, 内容)

首先, 创建产品:

其次, 为产品添加设备

第三, 查看设备关键信息:

创建完后,我们发现系统已经自动创建了一些功能定义

找到产品的功能页面, 点击"编辑草稿"

最后发布新的物模型

非常简单的修改, 只修改了要发送json里的param

注意同步修改param和json的内存占用大小