目錄
- 準備階段
- 阿里云配置
- 下載mqtt.min.js文件
- 小程序實現
- 注意
- 小程序配置服務器域名
概述:介紹使用微信小程序連接到阿里云平臺的快捷方法和完整過程。
阿里云平臺建立設備,提供mqtt連接參數,小程序借助mqtt.min.js,也就是基于Github下的MQTT.js 庫,實現mqtt通信連接到阿里云,過程簡單清晰。
https://github.com/mqttjs/MQTT.js
準備階段
1.需要有阿里云物聯網平臺賬號,已注冊。
2.需要下載好微信開發者工具。
3.下載mqtt.min.js文件。
阿里云配置
阿里云上創建設備獲取相關連接信息的參數,相關操作可參考物聯網平臺配置(MQTT)
需要用到的參數如下圖所示:
下載mqtt.min.js文件
這個的話,確實也是網上找的資源,鏈接:源代碼
但是需要自己保存為文件。
我也保存了文件,大家可以直接免費下載使用。
通過網盤分享的文件:mqtt.min.js
鏈接: https://pan.baidu.com/s/1IXoG50OWMruQ6I4iYeNtWg?pwd=wbs9 提取碼: wbs9
小程序實現
首先創建項目
選用測試號即可,這里不用選云服務,看個人需求吧,模板選js 基礎模板即可。
界面控件什么的就不多說了,自己隨便弄個開關什么,按鈕什么的即可。
或者直接就是登錄到該界面就直接后臺自動連接到阿里云平臺。
先說下目錄結構
vx-app-test/
├── app.js # 小程序全局邏輯
├── app.json # 全局配置
├── app.wxss # 全局樣式
├── project.config.json # 項目配置文件
├── pages/
│ └── index/ # 首頁
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
└── utils/└── mqtt-client.js # 封裝的MQTT連接模塊
index.js是json源碼,控制邏輯實現,index.wxml和 index.wxss這個是界面配置文件,login.json和頁面也有關聯,默認即可。mqtt-client.js 可以理解為接口庫。
index.js的詳細源碼:
const mqtt = require('../../utils/mqtt.min.js');
const subTopic = "" //訂閱的topic,接收訂閱信息
const publishTopic = "" //發布的topic,用來向平臺傳遞信息
Page({
//定義全局變量data: {userInfo: null, // 用戶信息mqttStatus: '未連接', // MQTT連接狀態mqttConnected: false, // MQTT連接標識mqttClient: null, //MQTT連接},onLoad() { // 初始化MQTT連接this.initMQTT()},onUnload() {// 頁面卸載時斷開MQTT連接this.data.mqttClient.disconnect()},initMQTT(){const options = {keepalive: 60, //60sclean: true, //cleanSession不保持持久會話protocolVersion: 4 //MQTT v3.1.1}//將前面阿里云平臺獲取到的連接信息,復制到下面對應變量中即可。options.clientId =""options.username =""options.password = ""const mqtt_url = "wxs:/{ProductKey}.iot-as-mqtt.{Region ID}.aliyuncs.com"const client = mqtt.connect(mqtt_url ,options)//連接事件client.on('connect', function () {console.log('連接服務器成功')//連接后可進行訂閱// 訂閱多個主題// client.subscribe(['topic1', 'topic2'], {qos: 0}, function(err)/*QoS級別說明:0:最多一次,發送者只發送一次消息,不進行重試1:至少一次,確保消息到達Broker2:恰好一次,使用兩階段確認保證消息不丟失不重復*/client.subscribe(subTopic, {qos: 1}, function (err) {if (!err) {console.log('訂閱成功!');}})});//接收消息監聽client.on('message', function (topic, message) {// message is Buffer // message 是 Buffer 類型,需要轉換為字符串let msg = message.toString();console.log('收到消息:'+ msg);//關閉連接 client.end()});//理論上有這兩個就夠了,訂閱后,接收消息,處理消息。//錯誤事件client.on('error', function(error) {console.error('連接錯誤:', error);}); this.data.mqttClient = client; // 保存到全局},//舉例一個開關觸發接口,實現消息上報。
// 開關狀態變化onPowerChange(e) {const powerOn = e.detail.value//獲取開關值this.setData({ powerOn }) // 發送控制命令 構建msg消息,字符或者整型,自行處理,最終需要轉為json// const msg = {staus: powerOn ? '1' : '0' };const message = JSON.stringify({cmd: 'status',value: powerOn ? 1 : 0})this.data.mqttClient.publish(publishTopic , message, {qos: 1});},
})
一些其他接口
//重連事件
client.on('reconnect', function() {console.log('正在嘗試重新連接...');
});//斷開連接事件
client.on('close', function() {console.log('連接已關閉');
});
注意
這里有幾個需要注意的地方
mqtt鏈接域名問題
const mqtt_url = "wxs:/{ProductKey}.iot-as-mqtt.{Region ID}.aliyuncs.com"
這里的{ProductKey},要替換為你的產品key,來自阿里云平臺,這里的{Region ID}也需要替換為你的地域。
物聯網平臺中的地域是什么,如何查詢?
常用地域對照表
地域名稱 | 所在城市 | Region ID |
---|---|---|
華北 2 | 北京 | cn-beijing |
華東 2 | 上海 | cn-shanghai |
華南 1 | 深圳 | cn-shenzhen |
官網地域對照表鏈接
綜上:一個案例,ProductKey : h6xxxxxwI , Region ID:cn-shanghai
const mqtt_url = "wxs:h6xxxxxwI.iot-as-mqtt.cn-shanghai.aliyuncs.com"
小程序配置服務器域名
此外小程序需要設置服務器域名,才能訪問,不然無法訪問阿里云物聯網平臺。
登錄微信公眾平臺-》掃碼登錄(用開發者助手同一個vx)
登錄的時候會有一個選項,需要根據開發者助手中的信息選擇登錄。
登錄后可以找到下面的頁面,修改并在對應欄下添加域名即可。
注意一個關鍵的地方,這里輸入的域名是wss:的,而實際代碼中使用的是wssd :
const mqtt_url = "wxs:h6xxxxxwI.iot-as-mqtt.cn-shanghai.aliyuncs.com"
注意將代碼中的mqtt_url進行替換為:
wss:h6xxxxxwI.iot-as-mqtt.cn-shanghai.aliyuncs.com
這不會影響連接。
完成以上操作,編譯后,觀察控制臺輸出正常,就可以觀察阿里云設備在線就說明成功登錄,建立連接了。
以上就是小程序連接阿里云的全部過程了,看了下網上一些其他的博客,有點亂,還要用上加密方法,實際上是不需要的,可以直接使用阿里云中的連接參數就可以了,當然這可能是不安全的,其他考慮就需要各位自己考慮了,有啥問題歡迎評論區留言。