一闷愤、小程序開發(fā)準(zhǔn)備
首先在小程序注冊(cè)網(wǎng)站注冊(cè)賬號(hào)獲取AppID為后續(xù)發(fā)布做準(zhǔn)備
在微信開發(fā)工具網(wǎng)站下載開發(fā)者工具進(jìn)行微信小程序開發(fā)
二膝宁、MTTQ連接準(zhǔn)備材料
在GitHub上下載MTTQ.js庫(kù)癞埠,庫(kù)中有編程方法的案例供參考,本人沒使用這個(gè)庫(kù)(聽說容易報(bào)錯(cuò))。但還有現(xiàn)成的單文件可用的,mqtt.min.js,右鍵點(diǎn)擊下載鏈接文件即可梁沧。
-
去阿里云官方庫(kù)下載hmac-sha1算法庫(kù)hex_hmac_sha1.js,右鍵點(diǎn)擊下載鏈接文件即可蝇裤。(以前看官方文檔是沒有小程序開發(fā)的廷支,最近我查閱阿里云官方文檔是有小程序開發(fā)的)
阿里云官方小程序開發(fā)
如果大家成功了可以與我分享分享 打開微信開發(fā)者工具創(chuàng)建項(xiàng)目
-
拷貝上面提供的兩個(gè)mqtt.min.js和hex_hmac_sha1.js到項(xiàng)目中utils目錄中去,下圖為小程序默認(rèn)創(chuàng)建的小程序項(xiàng)目目錄
utils目錄 域名的設(shè)置:(1). 使用不校驗(yàn)域名的方法栓辜,在開發(fā)者工具項(xiàng)目中的菜單欄的詳情中勾選【不校驗(yàn)合法域名恋拍、web-view(業(yè)務(wù)域名)、TLS 版本以及 HTTPS 證書】(2).注冊(cè)了小程序后藕甩,在后臺(tái)可以添加socket 合法域名施敢,格式為:wxs://productKey.iot-as-mqtt.cn-shanghai.aliyuncs.com(替換productKey為自己的產(chǎn)品productKey)
代碼
隨便在一個(gè)頁(yè)面的js文件中加入以下代碼,注意替換參數(shù)為自己產(chǎn)品和設(shè)備的參數(shù)
//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為你自己的產(chǎn)品的
const client = mqtt.connect('wxs://productKey.iot-as-mqtt.cn-shanghai.aliyuncs.com',options)
client.on('connect', function () {
console.log('連接服務(wù)器成功')
//訂閱主題,替換productKey和deviceName
client.subscribe('/productKey/deviceName/get', function (err) {
if (!err) {
//這里其實(shí)不能發(fā)布的僵娃,需要后臺(tái)設(shè)置權(quán)限羡藐,請(qǐng)參考阿里云官方文檔
client.publish('presence', 'Hello mqtt')
}
})
})
//接收消息
client.on('message', function (topic, message) {
// message is Buffer
console.log('收到消息:'+message.toString())
//關(guān)閉連接 client.end()
})
},
//IoT平臺(tái)mqtt連接參數(shù)初始化
initMqttOptions(deviceConfig) {
const params = {
productKey: deviceConfig.productKey,
deviceName: deviceConfig.deviceName,
timestamp: Date.now(),
clientId: Math.random().toString(36).substr(2),
}
//CONNECT參數(shù)
const options = {
keepalive: 60, //60s
clean: true, //cleanSession不保持持久會(huì)話
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);
}
})
運(yùn)行代碼即可看到:
更多的參數(shù)設(shè)置請(qǐng)查看mqtt.js文檔和阿里云物聯(lián)網(wǎng)Iot官方文檔
我自己的開發(fā)代碼就不貼出了,大家可以根據(jù)本文章進(jìn)行自己個(gè)人的開發(fā)
參考:
微信小程序-MQTT模擬器 連接阿里云IoT物聯(lián)網(wǎng)平臺(tái)
https://blog.csdn.net/ngl272/article/details/87887885