樹莓派 自啟動連接阿里雲物聯網平台(一)


一、前言

阿里雲物聯網平台為設備提供了可靠的通信能力,更加方便的支持設備采集數據並存儲在雲端,同時也提供了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 文件,在與雲端連接后,即可看到樹莓派成功上報數據的顯示。

這時打開阿里雲物聯網平台的設備管理頁面,就可以看到上報的數據了。

四、自啟動

請參考下一博客 樹莓派 自啟動連接阿里雲物聯網平台(二) 內容。

五、參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM