一、小程序开发准备
首先在小程序注册网站注册账号获取AppID为后续发布做准备
在微信开发工具网站下载开发者工具进行微信小程序开发
二、MTTQ连接准备材料
在GitHub上下载MTTQ.js库,库中有编程方法的案例供参考,本人没使用这个库(听说容易报错)。但还有现成的单文件可用的,mqtt.min.js,右键点击下载链接文件即可。
-
去阿里云官方库下载hmac-sha1算法库hex_hmac_sha1.js,右键点击下载链接文件即可。(以前看官方文档是没有小程序开发的,最近我查阅阿里云官方文档是有小程序开发的)
如果大家成功了可以与我分享分享 打开微信开发者工具创建项目
-
拷贝上面提供的两个mqtt.min.js和hex_hmac_sha1.js到项目中utils目录中去,下图为小程序默认创建的小程序项目目录
域名的设置:(1). 使用不校验域名的方法,在开发者工具项目中的菜单栏的详情中勾选【不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书】(2).注册了小程序后,在后台可以添加socket 合法域名,格式为:wxs://productKey.iot-as-mqtt.cn-shanghai.aliyuncs.com(替换productKey为自己的产品productKey)
代码
随便在一个页面的js文件中加入以下代码,注意替换参数为自己产品和设备的参数
//logs.js
const util = require('../../utils/util.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为你自己的产品的
const client = mqtt.connect('wxs://productKey.iot-as-mqtt.cn-shanghai.aliyuncs.com',options)
client.on('connect', function () {
console.log('连接服务器成功')
//订阅主题,替换productKey和deviceName
client.subscribe('/productKey/deviceName/get', function (err) {
if (!err) {
//这里其实不能发布的,需要后台设置权限,请参考阿里云官方文档
client.publish('presence', 'Hello mqtt')
}
})
})
//接收消息
client.on('message', function (topic, message) {
// message is Buffer
console.log('收到消息:'+message.toString())
//关闭连接 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;
},
/*
生成基于HmacSha1的password
参考文档:https://help.aliyun.com/document_detail/73742.html?#h2-url-1
*/
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);
}
})
运行代码即可看到:
更多的参数设置请查看mqtt.js文档和阿里云物联网Iot官方文档
我自己的开发代码就不贴出了,大家可以根据本文章进行自己个人的开发
参考:
微信小程序-MQTT模拟器 连接阿里云IoT物联网平台
https://blog.csdn.net/ngl272/article/details/87887885