天天看點

阿裡雲開發闆HaaS510将序列槽擷取資料發送到物聯網平台1.常用的物聯網平台JavaScript方法 2.上報裝置屬性的json字元串處理方法3.編寫上報屬性源代碼4.觀察實驗效果

摘要:阿裡雲HaaS510開發闆以4G網絡形式聯網,可以擺脫wifi依賴,進而可以廣泛應用于各類物聯網裝置開發。作為一款專門用來與阿裡雲物聯網平台通信的子產品,它有一個基本而強大的功能就是将序列槽擷取的資料或指令通過4G網絡發送到物聯網平台,通過JavaScript以極短的代碼來實作。

阿裡雲開發闆HaaS510将序列槽擷取資料發送到物聯網平台1.常用的物聯網平台JavaScript方法 2.上報裝置屬性的json字元串處理方法3.編寫上報屬性源代碼4.觀察實驗效果

實驗目的:通過haas510接收上位機發來的序列槽指令,将它作為物聯網裝置的屬性值發送。

硬體:haas510 (2.0版本),USB序列槽

軟體:win7 x64,vscode

目錄

1.常用的物聯網平台JavaScript方法

 2.上報裝置屬性的json字元串處理方法

3.編寫上報屬性源代碼

4.觀察實驗效果

1.常用的物聯網平台JavaScript方法

常用方法有“上報屬性”“上報事件”,另外還有“關閉執行個體”“注冊回調函數”等。

阿裡雲開發闆HaaS510将序列槽擷取資料發送到物聯網平台1.常用的物聯網平台JavaScript方法 2.上報裝置屬性的json字元串處理方法3.編寫上報屬性源代碼4.觀察實驗效果

 本實驗用到的是postProps方法。該方法作用就是上報裝置屬性。參數隻有1個,就是屬性的json格式字元串。這個是有固定格式的,格式有誤也不能正常上報。一般是屬性名--冒号---屬性值,但是要經過處理才行,具體的處理方法請繼續閱讀本文。

阿裡雲開發闆HaaS510将序列槽擷取資料發送到物聯網平台1.常用的物聯網平台JavaScript方法 2.上報裝置屬性的json字元串處理方法3.編寫上報屬性源代碼4.觀察實驗效果

 2.上報裝置屬性的json字元串處理方法

假如我們的裝置屬性是text類型,辨別符是beizhu。

阿裡雲開發闆HaaS510将序列槽擷取資料發送到物聯網平台1.常用的物聯網平台JavaScript方法 2.上報裝置屬性的json字元串處理方法3.編寫上報屬性源代碼4.觀察實驗效果

 那麼一個标準的屬性字元串就是      {"beizhu":"xxxxxxxx"}

使用JavaScript編寫程式上報這個屬性時,您不能提前預料到序列槽收到的資料是什麼,是以不能直接使用一條完整的字元串發送給物聯網平台。

正确的做法是擷取序列槽資料後,和半條字元串連接配接成一條。具體代碼是

JSON.stringify({beizhu:ArrayToString(data)})
           

data就是序列槽接收到的資料,通過stringify反複就把花括号在内的字元串統一轉換為一條完整的json字元串了。

json是什麼?

JSON = JavaScript Object Notation,有的翻譯為JS 對象簡譜

從字面意思就可以看出來它是JavaScript的親兒子,JavaScript支援它是預設的。

這意味着在 JavaScript 中處理 JSON資料不須要任何特殊的 API 或工具包。

本實驗就用的是stringify方法,因為是原生,是以代碼量很少。

3.編寫上報屬性源代碼

本文直接将經過調試的源代碼貢獻出來,大家複制粘貼即可。

var iot = require('iot');
var network = require('network');
var uart = require('uart');
var net = network.openNetWorkClient();
/* 裝置三元組資訊擷取請參考common目錄下的iot元件說明 */
var productKey = 'gcXXXXXvu2';
var deviceName = 'cewSSSSS001';
var deviceSecret = 'ee213aSSSSSSSSSadcdedb3a9';
// 建構物聯網連接配接執行個體
var device;
var lightSwitch = 0;
 
 
  // 打開使用者序列槽,在HaaS中,使用者序列槽号是UART2
  var serial = uart.open({
    id: 'UART2'
  });
 
  var msgbuf = [97, 98, 99, 100];
 
  function ArrayToString(fileData) {
    var dataString = "";
    for (var i = 0; i < fileData.length; i++) {
      dataString += String.fromCharCode(fileData[i]);
    }
    return dataString;
  }
 
//net.on用來使用三元組資料連接配接物聯網平台,核心是實作了一個MQTT用戶端
net.on('connect', function () {
    device = iot.device({
        productKey: productKey,
        deviceName: deviceName,
        deviceSecret: deviceSecret,
        region: 'cn-shanghai',
        success: function () {
            console.log('iot: [success] connect');
        },
        fail: function () {
            console.log('iot: [failed] connect');
        }
    });
})
//定時程式,這個程式實作的是5秒鐘定時,每次都翻轉主燈開關的狀态,向使用者序列槽發送一個數組資料
//再将主燈開關狀态發送到物聯網平台
setInterval(function () {
    lightSwitch = 1 - lightSwitch;
 
    // user uart send data
    serial.write(msgbuf);
    
 
/* 錯誤示範   iot.postProps({
                       payload: {LightSwitch:'0'}
                    })*/
/*正确示範,要想發送屬性,就得使用stringify才行*/
    device.postProps(
        JSON.stringify({
            LightSwitch: lightSwitch
        })
    );
  
  }, 5000);
 
 
// serial.on用于響應序列槽資料接收事件,使用者序列槽接收啥,就通過調試序列槽發送啥到物聯網平台的備注屬性。
//注意,兩個序列槽不是同一個。
serial.on('data', function(data) {
  console.log('uart receive data is ' + ArrayToString(data));
  device.postProps( 
                  JSON.stringify({
                  beizhu: ArrayToString(data)
                                 })
                   );
});
           

4.觀察實驗效果

硬體連接配接如下圖所示

阿裡雲開發闆HaaS510将序列槽擷取資料發送到物聯網平台1.常用的物聯網平台JavaScript方法 2.上報裝置屬性的json字元串處理方法3.編寫上報屬性源代碼4.觀察實驗效果

實驗效果有以下幾個方面呈現。

首先裝置會線上,這個是net.on實作的

其次使用者序列槽會定時5秒發送4個字元(其實是數組)到上位機,這個是setInterval實作的。

阿裡雲開發闆HaaS510将序列槽擷取資料發送到物聯網平台1.常用的物聯網平台JavaScript方法 2.上報裝置屬性的json字元串處理方法3.編寫上報屬性源代碼4.觀察實驗效果

然後是當上位機通過序列槽發送一個字元串的時候,HaaS510會将這個字元串發送到物聯網平台,作為beizhu屬性的值。

阿裡雲開發闆HaaS510将序列槽擷取資料發送到物聯網平台1.常用的物聯網平台JavaScript方法 2.上報裝置屬性的json字元串處理方法3.編寫上報屬性源代碼4.觀察實驗效果

 至此,實驗成功。

存在的一點不足是:當設計的物聯網裝置隻有1個屬性的時候,可以這樣直接将序列槽資料發送到物聯網平台。但是實際研發工作中,每一台裝置的屬性不可能僅僅有一個屬性,它往往有很多個屬性。如果簡單粗暴的将序列槽資料一股腦上報為一個字元串,那麼顯然并不是一個成熟的裝置應該具備的。

是以,我們還需要對序列槽發來的資料進行解析,将每個屬性的值提取出來,再對應發送到雲平台。

這是下一步我們需要做的。

繼續閱讀