天天看點

使用 AWS 雲平台建構物聯網應用

摘要:本文介紹了如何使用亞馬遜的AWS IoT來開發物聯網應用。

當我們沒有足夠的能力或者時間去開發一些物聯網雲平台的時候,使用一些現有的成熟的雲平台是一個很好的選擇。通常來說,這些平台可以為我們帶來更快的開發速度和更簡單的解決方案,并且可以讓我們集中于實作上的業務邏輯。我們隻需連接配接上我們的裝置、上傳我們的資料,就可以在地球的另一端觀察這些資料的變化。

在這些物聯網平台中,做得比較不錯的有:

  • IBM的Bluemix Internet of Things
  • Microsoft的Azure IoT Suite
  • Amazon的AWS IoT

由于亞馬遜的雲服務比較領先,是以這裡我們以亞馬遜的AWS IoT作為示例。

AWS IoT 是亞馬遜推出的一款托管的雲平台,它可以使互聯裝置輕松安全地與雲應用程式及其他裝置互動。它可以支援數十億台裝置和數萬億條消息,并且我們可以對這些消息進行處理,同時将其安全可靠地路由至 AWS 終端節點和其他裝置。我們還可以結合AWS的其他服務,如AWS Lambda、Amazon Kinesis、Amazon S3、Amazon Machine Learning 和 Amazon DynamoDB,來建構 IoT 應用程式,以友善我們收集、處理和分析互聯裝置生成的資料。

亞馬遜的物聯網解決方案和我們之前寫的服務端代碼一樣,如圖1所示。我們将在服務端接收裝置傳過來的資料并存儲到伺服器上,然後,通過手機等就可以直接通路這個API,并可以對裝置進行控制—這裡采用的是MQTT協定。

使用 AWS 雲平台建構物聯網應用

圖1 AWS IoT

現在讓我們登入AWS背景,可以看到如圖2所示的内容。在本書寫作的時候,AWS IoT處于測試版。但是相信在讀者看到這本書的時候,已經可以使用了。

使用 AWS 雲平台建構物聯網應用

圖2 AWS IoT控制台

現在,讓我們建立一個Thing。這個步驟很簡單,如圖3所示,我們隻需填寫Name就可以建立。在AWS IoT中,Thing代表了裝置的一個影子,即Device Shadow。而Rule則可以對資料進行過濾——我們可以建立一些規則,如當溫度大于某個值時我們才将其釋出到AWS IoT上。

使用 AWS 雲平台建構物聯網應用

圖3 AWS IoT 建立Thing

這時,我們建立了一個名為Led的裝置,如圖4所示。上面會顯示這個裝置的REST API位址,及其MQTT Topic——我們隻需訂閱這個主題就可以使用這個裝置了。然後單擊下面的“Connect a device”按鈕就會進入如圖5所示的密鑰配置頁,确認并下載下傳相應的檔案就可以使用了。

使用 AWS 雲平台建構物聯網應用

圖4 建立了一個名為Led的裝置

使用 AWS 雲平台建構物聯網應用

圖5 密鑰配置頁

現在,我們可以編寫代碼來測試我們的裝置是否能正常使用了。這裡我們需要使用到AWS IoT的SDK,這個SDK實際上隻是對mqtt進行一些封裝,安裝這個SDK的過程很簡單:

我們需要配置相應的keyPath、certPath和caPath。這裡的caPath需要到網上下載下傳(網址:https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign- Class%203- Public-Primary-Certification-Authority-G5.pem,這個網址包含在代碼裡)。需要注意的是,這裡的clientId實際上也是我們要控制的Thing的名字:

var awsIot = require('aws-iot-device-sdk');

var thingName = 'Led';
var thingShadows = awsIot.thingShadow({
    keyPath: 'certs/fa635d3140-private.pem.key',
    certPath: 'certs/fa635d3140-certificate.pem.crt',
    caPath: 'certs/root-CA.crt',
    clientId: thingName,
    region: 'us-west-2'
});

thingShadows.on('connect', function () {
    console.log("Connected...");
    thingShadows.register(thingName);

    setTimeout(function () {
        console.log("Updating Led Status...");
        var led = thingShadows.update(thingName, {
            "state": {
                "reported": {
                    "led": true
                }
            }
        });
        console.log("Update:" + led);
    }, );


    thingShadows.on('status',
        function (thingName, stat, clientToken, stateObject) {
            console.log('received ' + stat + ' on ' + thingName + ': ' +
                JSON.stringify(stateObject));
        });
});
           

接着運作這個腳本會接收到下面的結果,同時我們可以觀察到網頁上的Shadow值也發生了相應的變化。

Connected...
Updating Led Status...
Update:Led-
received accepted on Led: {"state":{"reported":{"led":true}},"metadata": {"reported":{"led":{"timestamp":}}},"timestamp":}
           

下面的Python代碼講述了更多的細節——使用SSL/TLS來連接配接MQTT伺服器:

mqttc.tls_set("./certs/root-CA.crt",
              certfile="./certs/fa635d3140-certificate.pem.crt",
              keyfile="./certs/fa635d3140-private.pem.key",
              tls_version=ssl.PROTOCOL_TLSv1_2,
              ciphers=None)

mqttc.connect("a1dul237m8y7r3.iot.us-west-2.amazonaws.com", port=)  # AWS IoT service hostname and portno
           

現在接上傳感器,我們就可以上傳資料了。

相關閱讀

  • 基于物聯網平台開發手機混合 App

本文經授權節選自圖書《自己動手設計物聯網》第六章,作者黃峰達。

本書内容包括設計一個基于文本檔案的物聯網系統、實作以網際網路為基礎的物聯網系統,即以HTTP協定與Web程式設計為基礎的物聯網系統、最後打造一個能結合多個物聯網協定的物聯網系統。讀者将學會如何打造物聯網的相關應用——手機App、溫度趨勢、網頁端控制等,以及如何打造智能、安全的物聯網系統的相關内容。

使用 AWS 雲平台建構物聯網應用
使用 AWS 雲平台建構物聯網應用

繼續閱讀