一、前言
阿里雲物聯網平台為設備提供了可靠的通信能力,更加方便的支持設備采集數據並存儲在雲端,同時也提供了API,實現設備的遠程控制功能。
要實現本文所述功能,請准備:
- 樹莓派或其他物聯網設備
- 開通阿里雲賬號
- 開通阿里雲物聯網平台
二、快速連接設備
這樣可以快速的:創建連接的產品與設備
1. 快速連接設備
引導
點擊 "物聯網平台 -> 概覽 -> 快速連接設備 -> 開始體驗" ,開始快速連接設備。該引導將通過4個步驟,來幫助我們快速的連接設備到阿里雲物聯網平台。
接下來按照步驟進行。
2. 注冊設備
填寫產品和設備的信息
3. 選擇開發包
因為開發的設備是樹莓派,安裝的系統鏡像為 Raspberry(linux)
,所以選擇設備平台為 Linux
,然后選擇的協議是MQTT,設備開發工具有三種選擇,node.js、Java、嵌入式c,這里我選擇的是node.js,因為其他的兩個開發工具包需要比較復雜的工具包。
當然,選擇Node.js的前提是在 Raspberry
上已經安裝該環境,可以用這兩個命令查看是否安裝Node.js環境。
pi@raspberrypi:~ $ node -v
v10.15.2
pi@raspberrypi:~ $ npm -v
5.8.0
如果沒有安裝,則要通過這篇文章安裝在樹莓派上安裝最新版Nodejs
4. SDK 下載
點擊"下載 Linux 工具包",將文件傳到樹莓派上。然后進行下一步
5. 配置與測試
按照這一步的要求,解壓工具包,並在樹莓派上運行./start.sh文件,就可以在該引導頁面下方 "設備日志" 中看到樹莓派上報的數據,初步的連接完成。
unzip aliyun_iot_device_quickstart.zip
cd aliyun_iot_device_quickstart
sudo sh start.sh
連接成功以后,可以看到樹莓派已將在上報數據,不過上報的數據是不變的,是預設好的,我們通過更改功能定義和修改上報代碼,可以實現我們想要的功能。
點擊完成,進行下一步樹莓派的配置。
三、上報樹莓派設備信息
一個上報的數據就是一個功能,比如我們想要讓樹莓派將CPU的溫度上傳到雲端,這時就要增加一個溫度的功能定義。
增加功能定義可以選擇標准功能和自定義功能,如果我們要添加的功能在標准功能中沒有,可以在自定義功能中進行添加。
1. 添加功能定義
點擊 "物聯網平台 -> 產品 -> 查看 -> 功能定義" ,就可以查看已有功能:
在 "功能定義" ,點擊 "編輯草稿" 就可以添加 標准/自定 功能:
1.1 添加標准功能
這里上報CPU溫度選擇的是標准功能,其余的都是自定義功能。
1.2 添加自定功能
2. 發布更新
產品功能定義完成后,要將其從草稿中發布。
在 "發布物模型" 中,填寫版本號和版本描述,確定發布。這是就可以看到無數據的運行狀態。
3. 修改上報代碼
在樹莓派本地打開 index.js 文件,修改程序代碼,使得按照雲端功能的定義上報數據。修改之后的代碼如下,可參考並依據自己定義的功能進行修改。
const aliyunIot = require('aliyun-iot-device-sdk');
const deviceConfig = require('./device_id_password.json');
const device = aliyunIot.device(deviceConfig);
const fs = require("fs");
const os = require("os");
device.on('connect', () => {
console.log('Connect successfully!');
console.log('Post properties every 5 seconds...');
setInterval(() => {
var temp;
temp = fs.readFileSync("/sys/class/thermal/thermal_zone0/temp");
temp = temp.toString() / 1000 ;
var memusage;
var usedmem = (os.totalmem() - os.freemem())/1024/1024;
var freemem = os.freemem()/1024/1024;
memusage = (os.totalmem() - os.freemem()) * 100 / os.totalmem();
var uptime = os.uptime();
var valtime = 0;
if(uptime< 60){
valtime = uptime + "秒";
}else if(uptime >= 60 && uptime < 3600){
valtime = (uptime /60 ) .toFixed(1)+ "分鍾";
}else if(uptime >= 3600 && uptime < 86400){
valtime = (uptime /3600).toFixed(1)+ "小時";
}else{
valtime = (uptime /86400).toFixed(1) + "天";
}
var loadavg = [];
var loadavg_1;
var loadavg_5;
var loadavg_15;
loadavg = os.loadavg();
loadavg_1 = loadavg[0];
loadavg_5 = loadavg[1];
loadavg_15 = loadavg[2];
const params = {
CurrentTemperature: temp ,
UpTime: valtime ,
FreeMem: freemem,
UsedMem: usedmem,
MemoryUsage: memusage,
LoadAvg_1: loadavg_1,
LoadAvg_5: loadavg_5,
LoadAvg_15:loadavg_15
};
console.log(`Post properties: ${JSON.stringify(params)}`);
device.postProps(params);
}, 5000);
device.serve('property/set', (data) => {
console.log('Received a message: ', JSON.stringify(data));
});
});
device.on('error', err => {
console.error(err);
});
修改之后保存,然后運行 ./start.sh
文件,在與雲端連接后,即可看到樹莓派成功上報數據的顯示。
這時打開阿里雲物聯網平台的設備管理頁面,就可以看到上報的數據了。
四、自啟動
請參考下一博客 樹莓派 自啟動連接阿里雲物聯網平台(二) 內容。