軟硬兼施,實戰構建基於 AWS IoT 的物聯網解決方案

2021-02-15 西雲數據云計算

隨著市場競爭的加劇,企業傳統的「以生產為主,服務為輔」的運營模式已經無法滿足最終用戶對產品的需求。隨著第四次工業革命的發展和物聯網的逐步普及,越來越多的企業開始重視客戶的個性化服務,並以服務的反饋指導企業的生產。為了滿足這類需求,企業需要從產品端(市場端)獲取大量的信息和數據,並以這些信息和數據為基礎,進行企業的生產、營銷以及運營的決策。要實現這樣一個業務鏈條,物聯網是必不可少的一個環節,通過安裝在產品上的傳感器採集客戶對產品的使用情況以及產品運行情況,並將數據收集到企業的大數據平臺進行處理。這種方式可以打通從產品到企業信息化平臺的整條鏈路,實現整個端到端的業務流程的全連接。物聯網傳感器與信息平臺的打通是一個硬體與軟體相融合的過程,在本文中,我們將以一個演示場景展示通過硬體傳感器進行溫度數據的採集,並對數據進行存儲和簡單的處理。整個場景中包含了數據採集、數據存儲和異常事件觸發的報警等業務環節,後續通過擴展可用於多種企業生產和產品監控的業務當中。

ESP32開發板:ESP-WROOM-32(ESP32) 是一款 WiFi & 藍牙雙模雙核無線通信晶片,擁有 Tensilica LX6  雙核處理器,廣泛應用於行動裝置、可穿戴電子產品和物聯網解決方案。

 LM35 溫度傳感器:LM35是一種常用的溫度傳感器,其輸出電壓為攝氏溫標。LM35有多種不同封裝型式,在常溫下,LM35不需要額外的校準處理即可達到 ±1/4℃的準確率。

上述硬體通過簡單的連接即可組成一個能夠通過 WIFI 網絡發送溫度數據的溫度監測組件。LM35的Vcc,Vout 和GND 針腳分別對接 ESP32的3v3,VP 和 GND 針腳。

這樣一個組件就可以通過 WIFI 與 AWS IoT Core 進行連接,實現對溫度數據的採集和處理。

本方案將用到以下 Amazon Web Service(AWS)服務

 AWS IoT Core:AWS IoT 服務,用於對接我們的溫度監測組件

 AWS Lambda:AWS 無伺服器函數服務,用於處理IoT 服務接收到的數據

 Amazon Relational Database Service (Amazon RDS) :AWS 託管的關係型資料庫,這裡我們使用的是 MySQL,用於存儲接收到的溫度數據

 Amazon Simple Notification Service (Amazon SNS) :AWS 消息通知服務,在溫度異常時,用於發送郵件通知

 Amazon Simple Storage Service (Amazon S3) :對象存儲服務,低成本存儲物聯網數據

實現溫度監控組件與 AWS IoT Core 的對接,整個演示場景的架構如下圖所示。

➤ 溫度監測組件每5秒鐘採集一次數據,包括設備號、時間和溫度值,數據通過 WIFI 傳輸到 AWS IoT Core

➤ AWS IoT Core 接收到溫度監測組件傳輸的數據,做如下三種處理:

◆ 數據存儲到對象存儲 Amazon S3,一方面利用低成本的存儲空間,另一方面為將來的數據湖大數據分析做準備

◆ 數據通過 AWS Lambda 函數進行解析,存入 MySQL 資料庫表,以便於用戶的應用直接去訪問關係型資料庫,對物聯網數據進行處理

◆ 對數據進行實時監測,對於溫度超過閾值(比如40℃),發送郵件提醒相關人員

 設備管理及安全

 設備連接與數據傳輸

 數據存儲與處理

 異常事件處理

物聯網平臺需要連接眾多的終端設備和傳感器,因此,需要一個管理這些設備的工具。另外,設備和傳感器是通過網絡與物聯網平臺進行連接的,設備要連接到物聯網平臺並且進行數據的傳輸需要進行設備身份的認證和數據的加密,來保證設備通訊的安全。

在 AWS IoT 中,通過設備註冊來實現對設備的管理。

通過設備註冊,能夠為設備進行命名、分類、分組、設定權限等操作。

設備註冊後就可以在 AWS IoT 控制臺上對所連接的設備進行管理。

用戶也可以利用 AWS 所提供的 API 將設備管理與企業的EAM(企業資產管理)平臺進行對接,實現設備與物聯網平臺管理的關聯。在進行設備註冊的同時,AWS IoT 的設備管理會為設備生成證書,只有配置了這些證書的設備才能夠連接到 AWS IoT 上,並幫助設備與 AWS IoT 之間的通訊進行加密,確保物聯網接入和通訊的安全。

https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/register-device.html

如要使用 ESP32開發板與 LM35溫度傳感器構建的溫度監測組件與 AWS IoT 進行對接,則需要對 ESP32開發板進行編程。這裡我們使用 Arduino IDE 編程工具通過 C 語言對 ESP32 進行開發。

關於 Arduino IDE 基於 AWS IoT 和ESP32 開發環境的配置可以參考 https://github.com/aws-samples/aws-iot-workshop 中 MacOS 或者 Windows 的安裝與配置部分。

環境安裝與配置完成之後,能夠在開發板菜單選擇「ESP32 Dev Module」和在包含庫中選擇「AWS_IOT」。使用 USB 線將開發機與 ESP32 連接後,需選擇接入埠。後續我們對開發板寫入的程序都通過該埠寫入。

通過 Arduino IDE 構建的 ESP32程序主框架如下:

// 初始化變量,AWS IoT端點、隊列,WIFI配置,LM35引腳,報文等

……

……

// Arduino程序初始化函數

void setup()

{

  WiFi.disconnect(true);

  Serial.begin(115200);

  // 建立WIFI連接

  while (status != WL_CONNECTED) {

    Serial.print("Attempting to connect to Wifi network: ");

    Serial.println(WIFI_SSID);

    status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

    delay(5000);

  }

  Serial.println("Connected to Wifi!");

  // 建立AWS IoT連接

  if(hornbill.connect(HOST_ADDRESS,CLIENT_ID)== 0) {

    Serial.println("Connected to AWS, bru");

    delay(1000);

  }

  else {

    Serial.println("AWS connection failed, Check the HOST Address");

    while(1);

  }

}

// 循環執行函數

void loop()

{   

  int RawValue= 0;

  double Voltage = 0;

  double tempC = 0;

  double tempF = 0;

  // 讀取LM35數據

  RawValue = analogRead(analogIn);

  Voltage = (RawValue / 2048.0) * 3300; // 5000 to get millivots.

  // 攝氏度

  tempC = Voltage * 0.1;

  // 華氏度

  tempF = (tempC * 1.8) + 32; // conver to F

  // 獲得當前時間

  time_t t = time(NULL);

  int ii = time(&t);

  // 生成JSON報文

  sprintf(payload,"{\"state\": {\"reported\": {\"devid\":\" %s \",\"timestamp\":\" %d \",\"temperature\":\" %f \"}}}",CLIENT_ID, ii, tempC);

  

  Serial.println(payload);

  // 向AWS IoT發送報文

  if(hornbill.publish(TOPIC_NAME,payload) == 0) {

    Serial.println("Message published successfully");

  }

  else {

    Serial.println("Message was not published");

  }

  // 每隔5秒執行一次

  delay(5000);  

}

https://github.com/steelren/aws_iot_core_workshop/blob/master/code/Esp32_LM35.ino

在 Arduino IDE 的 AWS 庫文件中,需要將之前配置所得到的證書的內容寫入到 aws_iot_certficates.c 文件,以便程序能夠通過 AWS IoT 的連接認證。

/**

 * @file aws_iot_certifcates.c

 * @brief File to store the AWS certificates in the form of arrays

 */

#ifdef __cplusplus

extern "C" {

#endif

// AWS CA根證書

const char aws_root_ca_pem[] = {"BEGIN CERTIFICATE\n\

MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\n\

……

……

END CERTIFICATE\n"};

// 設備證書

const char certificate_pem_crt[] = {"BEGIN CERTIFICATE\n\

MIIDWTCCAkGgAwIBAgIUWxxS4xnnzBXoaoxwgWQ9Ij7ikKswDQYJKoZIhvcNAQEL\n\

……

……

END CERTIFICATE\n"};

// 設備私鑰

const char private_pem_key[] = {"BEGIN RSA PRIVATE KEY\n\

MIIEogIBAAKCAQEA26qt4XZCtlUSIz1acsyiXHJmqCEEkXBp6YuQUeT4wIihqr2w\n\

……

……

END RSA PRIVATE KEY\n"};

#ifdef __cplusplus

}

#endif

https://github.com/steelren/aws_iot_core_workshop/blob/master/code/aws_iot_certficates.c

程序編譯通過,即可通過 Arduino IDE 寫入 ESP32開發板,就能夠實現程序的在開發板中運行。

通過 AWS IoT 測試工具能夠查看到接收的 ESP32開發板發送的信息。

物聯網數據採集之後,所面臨的首要問題就是如何存儲這些數據,其次就是怎樣使用這些數據。AWS IoT Core 提供了非常便利的手段幫助用戶對數據進行存儲和處理。在本文所介紹的應用場景中,我們主要使用 AWS IoT Core 所提供的規則(Rule)與操作(Action)來對物聯網數據進行處理。

AWS IoT Core 規則由 SQL SELECT 語句、主題篩選條件和規則操作組成。設備通過將消息發布到 MQTT 主題來向  AWS IoT Core 發送信息。利用 SQL SELECT 語句,您可以從傳入的 MQTT 消息提取數據。AWS IoT Core 規則的主題篩選條件用於指定一個或多個 MQTT 主題。當主題收到與主題篩選條件匹配的 MQTT 消息時,將觸發規則。藉助規則操作,您可以獲取從 MQTT 消息提取的信息並將其發送到其他 AWS 服務。

AWS IoT Core 規則操作用於指定規則觸發後應執行的操作。用戶可以定義一些操作以便將數據寫入 Amazon DynamoDB 資料庫或 Amazon Kinesis 流,或者調用 AWS Lambda 函數等。

在該業務場景中,我們使用 AWS IoT Core 規則觸發兩個操作,我們直接對 AWS IoT Core 所接收到的所有溫度監測數據進行處理。

1、將溫度數據以文件方式直接存入 Amazon S3對象存儲,一方面通過對象存儲降低存儲成本,另一方面也為未來基於 Amazon S3構建的數據湖打下基礎。

此種配置方式每條物聯網數據都會在 Amazon S3保存為一個文件,在實際生產環境中,我們推薦用戶通過規則調用 Amazon Kinesis Firehose 對數據進行匯聚和壓縮後,再存入 Amazon S3,會有更佳的管理和成本優勢。2、通過觸發 AWS Lambda 函數,對數據進行解析處理,並將數據存入 AWS RDS MySQL 資料庫。

在該場景中,我們通過 Node.js 構建了 AWS Lambda 函數,包括報文數據解析和資料庫表插入,核心代碼可參考如下:

exports.handler =  (event, context, callback) => {

// Receive Data from IoT Rule

var eventText = JSON.stringify(event, null, 2);

    console.log("Received event:", eventText);

    var devid = (JSON.parse(eventText)).state.reported.devid;

    var timestamp = (JSON.parse(eventText)).state.reported.timestamp;

    var temperature = (JSON.parse(eventText)).state.reported.temperature;

//prevent timeout from waiting event loop

context.callbackWaitsForEmptyEventLoop = false;

pool.getConnection(function(err, connection) {

// Use the connection

var insertSQL = 'insert into shiiottable (devid, msgtimestamp, temperature)values (?, ?, ?)';

var params = [devid, timestamp, temperature];

connection.query(insertSQL, params, function (error, results, fields) {

// And done with the connection.

connection.release();

// Handle error after the release.

if (error)

callback(error);

else

callback(null,results);

console.log('The solution is: ', results);

});

});

};

詳細代碼可參考如下連結:

https://github.com/steelren/aws_iot_core_workshop/blob/master/code/index.js

用戶也可以構建更複雜的處理程序來對數據進行處理。

通過上述的簡單配置即可很方便的完成數據的存儲和處理程序的觸發,為用戶充分利用和發揮物聯網及其數據的作用打下良好的基礎。

在物聯網業務中,大量的數據從設備和傳感器一端產生,這些數據能夠直接的反應出設備或者設備相關的業務所運行的狀態。在實際的生產中,設備或者業務的異常處理是非常常見的一種業務場景,比如設備溫度過高觸發告警,就是非常典型的應用場景。在本業務場景中,我們也利用 AWS IoT Core 的規則來實現超溫觸發郵件告警的功能。

在異常事件規則中,我們設置溫度40度作為報警閾值,從 AWS IoT Core 的 MQTT 隊列中選擇溫度大於等於40度的數據進行告警。告警的方式我們通過 Amazon SNS 消息通知服務觸發郵件進行告警。

通過此方式,用戶就可以在傳感器溫度超過40度的時候,觸發郵件通知。

如果通過該規則觸發 AWS Lambda 函數或者其他方式,則能夠實現更豐富的處理方式。

在本文中,通過實戰場景的方式介紹了設備傳感器與 AWS IoT Core 以及 AWS 其他相關雲服務構建一個雖然簡單但是比較完整的物聯網解決方案。因為篇幅所限,本文中只涉及到了整個解決方案的框架部門,很多細節並沒有體現。為了讓大家能夠更詳細了解整個方案的構建過程,整理了一個詳細的方案配置步驟的說明文檔,大家可以參考如下連結:

https://github.com/steelren/aws_iot_core_workshop

在這個說明文檔當中,會通過 Step by Step 的說明,讓大家自己動手完成搭建並運行該解決方案場景的所有的步驟。

相關焦點

  • 物聯網IoT平臺玩家大點將
    另外就是醫療有關的iot服務,例如患者行動裝置的物聯網連接。2、亞馬遜AWS IoThttps://aws.amazon.com/iot-platform/how-it-works/Aws獨創了「影子」的概念,以解決物聯網連接不可靠的問題。但是這個iot套件的問題在於過於依賴雲和終端的一對一連接。所以在去年的re:invent上發布了aws的邊緣計算組件:greengrass。3、微軟Azure IoT Suite www.microsoft.com/AzureIoT‎
  • 中芯微:全面智慧的IOT產品解決方案供應商
    CCRFID:全面智慧的IOT產品解決方案供應商。「C」:Complete  完整的、全面的多條產線、RFID房間級、AOA亞米級、UWB釐米級全系列室內外定位一網打盡。中芯微(CCRFID)成立於2008年,是國內領先的,室內定位產品解決方案供應商,12年來紮根智慧監管行業,逐步向智慧物流、智慧醫療、智慧商超、智慧工廠、智慧校園等領域不斷延伸拓展,我們通過唯一身份識別、位置服務、高精度定位、室內外追蹤、主動預警、智能聯動
  • 【方案新聞】高性能低成本 大聯大推出基於Semtech LoRa擴頻通信技術的超長距離低功耗物聯網解決方案
    Semtech LoRa擴頻通信技術的超長距離低功耗物聯網解決方案想進一步了解LoRa擴頻通信技術實現的超長距離低功耗物聯網解決方案?那您肯定不能錯過大聯大旗下友尚推出基於Semtech的LoRa擴頻通信技術實現的超長距離低功耗物聯網解決方案,本篇方案新聞對此進行全方位的介紹,方案以Semtech 的SX1276和ST的STM8L151K4為核心器件構成,以最佳的性價比同時將低功耗和長距離二者兼得。快來一睹為快吧!
  • AWS IoT 面向工業、消費者和商業解決方案的 IoT 服務
    AWS IoT雲產品,為面向工業、消費者和商業解決方案提供 IoT 服務,在中國區開放了AWS IoT Core,
  • 譯書《物聯網實戰指南》出版 新成就:翻譯自己的英文簡介
    英文書名《Learning Internet of Things》,中文書名 《物聯網實戰指南》。《物聯網實戰指南》簡介簡單的先上個簡介啦~:本書從探討流行的HTTP、UPnP、CoAP、MQTT和XMPP等物聯網協議開始,並從實戰角度介紹了現有的協議、通信模式、構架以及物聯網安全的重要性。本書適合那些對物聯網感興趣的開發者和工程師閱讀。
  • 物聯網低代碼平臺 IoT Studio 的思考和技術挑戰
    企業信息化的人事管理系統,財務系統,信息系統相似度高,容易抽象成可複製的組件,各公司根據自己的業務流程設計自己的信息化系統,由於內部系統,對交互和視覺要求較低,使用低代碼平臺對比企業saas定製化研發,在研發費用、研發周期、業務靈活度等方面都有較大的優勢。但
  • 物聯網全景動態圖譜2.0|PaaS物聯網平臺匯總(國內篇)
    新華三綠洲物聯網平臺,是針對物聯網解決方案的專用PaaS平臺,在物聯網解決方案中,負責對上支撐應用,對下適配終端,同時實現橫向能力集成。通過全套開發工具,WISE-PaaS簡化了物聯網解決方案部署,使您將資源集中在您所關注的專業領域。
  • 物聯網全景動態圖譜2.0|史上最全!PaaS物聯網平臺匯總(國外篇)
    以靈活、可擴展的高性能方法使用基於 SQL 的語法來設置實時分析,而無需管理複雜的基礎結構和軟體。使用大型算法庫來擴展預測分析解決方案。將 R 和 Python 語言中的代碼直接集成到你的工作區中,從而擴展實時分析和機器學習解決方案。
  • 物聯網安全基礎知識:安全連接到物聯網雲服務
    這些服務不僅在最低程度上支持基於證書的身份驗證,它們還支持使用其他形式的認證。例如,開發人員可以在 AWS IoT 中使用以 JSON Web Token (JWT) 為基礎的基於令牌的身份驗證方法,或在 Azure IoT 中使用共享訪問籤名 (SAS) 令牌。如前文所述,這些服務使用註冊表來保存每臺物聯網設備的元數據。
  • 技術專欄 | 一文帶你了解如何使用 Amazon IoT 安全隧道實現遠程設備連接管理
    使用諸如 VNC 之類等遠程管理工具,很難在物聯網設備上實現。今天我們介紹 Amazon IoT 設備管理中的安全隧道功能,它提供了一個安全的遠程訪問解決方案,Amazon IoT 安全隧道幫助客戶通過由亞馬遜雲科技託管的安全連接服務建立與遠程設備的雙向通信,並且不需要更改現有的入站防火牆規則。如何打開一個安全隧道,並使用它啟動 IoT 遠程設備的 SSH 會話?
  • 物聯網全景動態圖譜2.0|PaaS物聯網平臺匯總(上篇)
    OneNET是中移物聯網有限公司基於開放、共贏的理念,面向公共服務自主研發的開發雲平臺,為各種跨平臺物聯網應用、行業解決方案提供簡便的雲端接入、海量存儲、計算和大數據可視化服務,從而降低物聯網企業和個人(創客)的研發、運營和運維成本
  • 物聯網全景動態圖譜2.0|PaaS物聯網平臺匯總(中篇)
    以靈活、可擴展的高性能方法使用基於 SQL 的語法來設置實時分析,而無需管理複雜的基礎結構和軟體。使用大型算法庫來擴展預測分析解決方案。將 R 和 Python 語言中的代碼直接集成到你的工作區中,從而擴展實時分析和機器學習解決方案。
  • 基於蜂窩通信技術實現的物聯網(IoT)機器對機器(M2M)通信概述
    機器對機器(M2M)通信是整個物聯網(IoT)生態系統的巨大組成部分。值得注意的是,它能夠以自主,可靠和經濟高效的方式連接機器。只有一個類似於連接在網際網路上的計算機一樣無處不在的連接對象,才能使物聯網中的網際網路範式成為可能。傳統上,主要是在工業自動化和控制的背景下所謂的連接是通過電線的方式來實現的。
  • AWS 的邊界在哪裡?
    這個領域已有前輩 WebEx 和新貴 Zoom,構建全球暢通無阻的視頻會議系統是一項比較有挑戰的事情,因為視頻會議系統建設最大的難點其實是全球基礎設施網絡的建設,但這個對於 AWS 來說,簡直就是順手的事情,因此,AWS 還開放了 Chime 是如何基於 AWS 來構建的,對於其他視頻供會議廠商來說,AWS 親自給做了一個真實的生產案例。
  • 物聯網安全系列 | MQTT滲透實戰
    上一篇《物聯網安全系列 | MQTT協議安全》(點擊可回看)主要介紹了MQTT安全的一些基礎知識。今天將在上一篇基礎上來說說實戰中MQTT的利用。在整個物聯網或車聯網架構中,MQTT的部分通常應用在移動端、管理端、Web端、設備端。而MQTT協議中的三種角色是發布者(PUBLISHER)、訂閱者(SUBCRIBER)、代理(BROKER)。
  • IoT Analytics:2020年物聯網十大重要進展回顧
    到2025年,預計將有超過300億個物聯網連接,即地球上幾乎每人有4個物聯網設備。物聯網在應對疫情中起著至關重要的作用。一些以物聯網為中心的用例在幫助世界應對疫情方面發揮了(並將繼續發揮)重要作用。最值得注意的包括工作場所、醫院和其它基於物聯網的接觸者追蹤(例如:Concept Reply的跟蹤和定位系統),以及整個疫苗供應鏈中的產品跟蹤和驗證(例如:Controlant)。
  • Semtech與亞馬遜AWS及TensorIoT攜手,簡化物聯網解決方案開發
    全新的資產追蹤和智能樓宇套件是首款基於LoRaWAN協議的垂直應用產品,它使用了AWS IoT Core組件和無伺服器架構來構建。結合了這些優勢之後,這些套件為諸如公用事業、智能家居、智慧社區和智能醫療等其他垂直行業開闢了新的途徑,以提供類似的解決方案,從而受益於LoRaWAN提供的遠距離、低功耗物聯網功能。
  • 分布式系統開發實戰:實戰,使用AWS平臺實現Serverless架構
    ◆ 實戰:使用AWS平臺實現Serverless架構本例將演示利用AWS平臺的Serverless架構來讓遊戲實現全球同服
  • IoT Analytics:物聯網2020年回顧,十大重要進展
    一些以物聯網為中心的用例在幫助世界應對疫情方面發揮了(並將繼續發揮)重要作用。最值得注意的包括工作場所、醫院和其它基於物聯網的接觸者追蹤(例如:Concept Reply的跟蹤和定位系統),以及整個疫苗供應鏈中的產品跟蹤和驗證(例如:Controlant)。 2020年除了支持「新常態」的IoT用例之外,還出現了一些額外的主題,其中許多主題具有更持久的結構性影響。
  • 當我們不再解釋物聯網是什麼時,IoT才真正而來!
    「物聯網」這個概念在圈內早已不是什麼新鮮事,比如知名市場研究機構Gartner在最新發布的2016「新興技術成熟度曲線」中,「物聯網」一詞已不再像往年一樣出現在該曲線中,不過,物聯網平臺、手勢控制設備、聯網家庭等物聯網產業的細分領域詞彙開始出現在這一曲線中。可以看出,物聯網概念已深入人心,而屬於物聯網範疇下各垂直和橫向領域也開啟了產業化進程,物聯網產業生態也已成型。