1. 準備工作
1.1 註冊阿里雲賬號
使用個人淘寶賬號或手機號,開通阿里雲賬號,並通過支付寶實名認證
1.2 免費開通IoT物聯網套件
產品官網 www.aliyun.com/product/iot
1.3 軟體環境
Nodejs安裝 nodejs.org
2. 開發步驟
2.1 IoT雲端開發
1)建立高階版產品
2)功能定義,新增產品屬性
3)註冊裝置,獲得身份三元組
2.2 裝置端開發
我們用nodejs程式來模擬裝置,建立連線,上報資料。
1)建立裝置端專案
建立資料夾 iot-demo 建立2個檔案 package.json 和 device.js
2)package.json檔案
新增阿里雲IoT套件sdk依賴
{
"name": "aliyun-iot-demo",
"dependencies": {
"mqtt": "2.18.8"
}
}
複製程式碼
3)npm下載安裝IoT套件SDK
$ npm install
複製程式碼
4)device.js 應用程式程式碼
/**
"dependencies": { "mqtt": "2.18.8" }
*/
const crypto = require('crypto');
const mqtt = require('mqtt');
//裝置身份三元組+區域
const deviceConfig = {
productKey: "替換",
deviceName: "替換",
deviceSecret: "替換",
regionId: "cn-shanghai"
};
//根據三元組生成mqtt連線引數
const options = initMqttOptions(deviceConfig);
const url = `tcp://${deviceConfig.productKey}.iot-as-mqtt.${deviceConfig.regionId}.aliyuncs.com:1883`;
//2.建立連線
const client = mqtt.connect(url, options);
//3.屬性資料上報
const topic = `/sys/${deviceConfig.productKey}/${deviceConfig.deviceName}/thing/event/property/post`;
setInterval(function() {
//釋出資料到topic
client.publish(topic, getPostData());
}, 5 * 1000);
//4.訂閱主題,接收指令
const subTopic = `/${deviceConfig.productKey}/${deviceConfig.deviceName}/control`;
client.subscribe(subTopic)
client.on('message', function(topic, message) {
console.log("topic " + topic)
console.log("message " + message)
})
//IoT平臺mqtt連線引數初始化
function 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: false, //cleanSession保持持久會話
protocolVersion: 4 //MQTT v3.1.1
}
//1.生成clientId,username,password
options.password = signHmacSha1(params, deviceConfig.deviceSecret);
options.clientId = `${params.clientId}|securemode=3,signmethod=hmacsha1,timestamp=${params.timestamp}|`;
options.username = `${params.deviceName}&${params.productKey}`;
return options;
}
function getPostData() {
const payloadJson = {
id: Date.now(),
params: {
temperature: Math.floor((Math.random() * 20) + 10),
humidity: Math.floor((Math.random() * 20) + 60)
},
method: "thing.event.property.post"
}
console.log("===postData\n topic=" + topic)
console.log(payloadJson)
return JSON.stringify(payloadJson);
}
/*
生成基於HmacSha1的password
參考文件:https://help.aliyun.com/document_detail/73742.html?#h2-url-1
*/
function 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.createHmac('sha1', deviceSecret).update(contentStr).digest('hex');
}
複製程式碼
3.裝置執行
3.1 裝置啟動
3.2 IoT控制檯檢視裝置執行狀態
至此,完成了物聯網裝置接入阿里雲IoT物聯網雲平臺的開發實踐