微信小程序连接阿里云物联网
寻梦&之璐 时间:2022-08-20
添加文件至utils目录
一个是mqtt.min.js
,另一个是hex_hmac_sha1.js
,这两个文件的话,我已上传资源,下载即可,或者直接私我,我发邮箱,或者上github,上面也有
把下面代码粘贴至需要通信的页面的JS中
举例:我放在goExpress.js下
var mqtt = require('../../utils/mqtt.min.js') //根据自己存放的路径修改const crypto = require('../../utils/hex_hmac_sha1.js'); //根据自己存放的路径修改Page({ data: { }, onLoad: function () { //注意:这里在程序运行后会直接进行连接,如果你要真机调试,记得关掉模拟器或者使用一个按钮来控制连接,以避免模拟器和真机同时进行连接导致两边都频繁断线重连! this.doConnect() }, doConnect(){ const deviceConfig = { productKey: "替换", deviceName: "替换", deviceSecret: "替换", regionId: "cn-shanghai"//根据自己的区域替换 }; const options = this.initMqttOptions(deviceConfig); console.log(options) //替换productKey为你自己的产品的(注意这里是wxs,不是wss,否则你可能会碰到ws不是构造函数的错误) const client = mqtt.connect('wxs://productKey.iot-as-mqtt.cn-shanghai.aliyuncs.com',options) client.on('connect', function () { console.log('连接服务器成功') //注意:订阅主题,替换productKey和deviceName(这里的主题可能会不一样,具体请查看控制台-产品详情-Topic 类列表下的可订阅主题),并且确保改主题的权限设置为可订阅 client.subscribe('/productKey/deviceName/user/get', function (err) { if (!err) { console.log('订阅成功!'); } }) }) //接收消息监听 client.on('message', function (topic, message) { // message is Buffer let msg = message.toString(); console.log('收到消息:'+msg); //关闭连接 client.end() }) }, //IoT平台mqtt连接参数初始化 initMqttOptions(deviceConfig) { const params = { productKey: deviceConfig.productKey, deviceName: deviceConfig.deviceName, timestamp: Date.now(), clientId: Math.random().toString(36).substr(2), } //CONNECT参数 const options = { keepalive: 60, //60s clean: true, //cleanSession不保持持久会话 protocolVersion: 4 //MQTT v3.1.1 } //1.生成clientId,username,password options.password = this.signHmacSha1(params, deviceConfig.deviceSecret); options.clientId = `${params.clientId}|securemode=2,signmethod=hmacsha1,timestamp=${params.timestamp}|`; options.username = `${params.deviceName}&${params.productKey}`; return options; }, signHmacSha1(params, deviceSecret) { let keys = Object.keys(params).sort(); // 按字典序排序 keys = keys.sort(); const list = []; keys.map((key) => { list.push(`${key}${params[key]}`); }); const contentStr = list.join(''); return crypto.hex_hmac_sha1(deviceSecret, contentStr); }})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
改动
改动1
把三元组:ProductKey,DeviceName,DeviceSecret
内容和regionId填好
改动2
/productKey/deviceName/user/get
- 1
这个东西,需要根据自身的物联网平台中的设备Topic来进行更换,
我这里用一个操作权限是发布和订阅来进行更换,即/a1d2nqlFkQ8/n5o8r6WCEHE8ZuFqIaEP/user/topic
测试
发送给阿里云端消息:
client.publish('/a1d2nqlFkQ8/n5o8r6WCEHE8ZuFqIaEP/user/topic','hello mqtt')
- 1
然后查看日志,收到
特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。