在 Amazon Web Services 上快速部署以感測器為基礎的工業強度 IoT 裝置
資料提供者:DigiKey 北美編輯群
2019-10-02
工業物聯網 (IIoT) 的端點裝置為雲端型資源與工業製程提供了基本的介面。但是,在連結周邊裝置和雲端時,IIoT 裝置需要解決裝置本身以及裝置與雲端之間,對效能、連接性、感測器整合、安全性和穩定性日益增加的要求。
Amazon IoT Core 和 Amazon FreeRTOS 等專用服務,已能在雲端側滿足上述關鍵要求。但是,若 IIoT 開發人員剛剛開始使用雲端服務及其諸多介面和協定,那麼他們在將這些服務連接至裝置側時,可能會遇到更多麻煩。這些開發人員仍需應對邊緣應用的感測與處理要求,並考慮成本、電源、效能以及空間限制等因素。
本文將簡要探討雲端資源的使用及其發展狀況,接著會介紹以 Renesas 的 RX65N 微控制器為基礎的完整雲端套件。本文說明如何將此微控制器和公版設計與相關的軟體套件搭配使用,快速實作感測型 IIoT 裝置,最終實現與 Amazon Web Services (AWS) 雲端的整合。
利用雲端資源
儘管其他的雲端服務供應商正慢慢趕上,但 AWS 仍是雲端型可擴充無伺服器和伺服器型運算、儲存及軟體即服務 (SaaS) 產品的領先供應商。各個組織經常會在企業規模的應用中使用這些服務。這些應用可能會隨著需求變化而增長,並運用各種 SaaS 套件。所有這些套件都會通過統一的全平台中介服務居間協調,實現通訊、通知、安全、資料儲存以及幾乎所有實用的運算需求。
對於部署大型 IoT 應用的企業來說,若能利用這些服務來分析車輛、設備、建築和工廠提供的 IIoT 資料,將可在實體資產、流程和實務的深入洞察與控制上,取得明顯優勢。但對開發人員來說,由於周邊裝置側的資源限制型即時 IoT 設計與雲端側的可擴充虛擬服務之間存在明顯差距,將 IIoT 裝置連接至 AWS 或其他任何雲端服務的過程可能似乎不甚清晰。
為了彌合這個差距,各大雲端服務供應商提供了一組連接功能,以協調 IoT 裝置與雲端服務之間的廣泛差異。對於 AWS 來說,這些功能包含在 AWS IoT Core 中。而 AWS IoT Core 不僅能作為整個 AWS 平台的閘道器,也能充當 IoT 型應用層級服務的閘道器,實現資料儲存、分析、虛擬化及機器學習等 (圖 1)。
圖 1:AWS IoT 為現場 IIoT 感測器與廣泛的 AWS 服務平台提供了服務介面,這些平台可用於分析工業應用的感測器資料,如本文介紹的車隊管理應用。(圖片來源:AWS)
除了這些功能以外,將 FreeRTOS 開放原始碼即時作業系統 (RTOS) 與 AWS IoT 整合在一起,可在應對系統升級及維護的生命週期需求時,提供重要的優勢。
與其他任何企業級產品一樣,AWS IoT 服務針對裝置連入、身份驗證和訊息交換,定義了一組廣泛的介面要求和協定。儘管與更廣泛 AWS 平台的要求一致,但鑒於 IoT 環境的特殊性,即使是經驗豐富的 AWS 開發人員,在將裝置與 AWS IoT Core 及相關的 AWS IoT 服務整合時,也會面臨前期學習成本相當高的問題。此外,無論是何經驗水平,開發人員在實作 IoT 設計時,若想持續滿足對更高效能、更低功耗及更高安全性的需求,都會面臨著類似的難題。
為了因應這種種難題,Renesas 的 RTK5RX65N0S01000BE RX65N 雲端套件提供了現成的解決方案,可加快在 AWS 上部署 IIoT 裝置的速度。
全方位平台
RX65N 雲端服務套件提供了一個完整的公版設計和開發平台,可用於部署和評估使用 AWS IoT 雲端服務的 IIoT 裝置。除了全方位的軟體開發包,此套件還包含三個硬體電路板:一個是配備 R5F565NEDDFP 32 位元微控制器 (通過 Amazon FreeRTOS 認證) 的目標電路板,一個是 Wi-Fi 電路板,還有一個是配備 USB 連接及 IIoT 應用常用感測器組的 Renesas 雲端選項板。
R5F565NEDDFP 微控制器採用 Renesas RXv2 32 位元處理器核心,可提供 640 KB RAM、32 KB 資料快閃記憶體,以及 2 MB 程式碼快閃記憶體。在這款微控制器中,程式碼快閃記憶體可設定成以單一位址空間運作的線性模式,或以兩個獨立記憶體區運作的雙模式。在雙模式下,由於新韌體會載入未被佔用的記憶體組,並在系統重新啟動前驗證完整性和真實性,因而能實現更可靠的空中 (OTA) 更新。
除了記憶體支援外,R5F565NEDDFP 以及 RX65N 系列的其他成員,還整合了許多功能性區塊組,如 IEEE-754 浮點單元 (FPU) 和記憶體保護單元 (MPU) 等。在其外部介面中,RX65N 微控制器包含兩個多通道 12 位元類比數位轉換器 (ADC);一個雙通道 12 位元數位類比轉換器 (DAC);多個工業通訊介面,包括乙太網路、控制器區域網路 (CAN);以及多個序列介面,包括 I2C、四通道 SPI,以及一個可支援 I2C 和 SPI 的多通道序列通訊介面 (SCI)。
感測器硬體介面
除了提供評估平台,Renesas 雲端套件還展示 RX65N 微控制器與 IIoT 感測器整合的相對簡便性。在此情況下,套件中的雲端選項板包括一組三個感測器:
- Renesas 的 ISL29035 (ISL29035IROZ-T7) 數位燈光感測器,用於測量環境光/紅外線
- Bosch Sensortec 的 BMI160 MEMS 感測器,用於測量三軸加速度和陀螺儀
- Bosch Sensortec 的 BME680 MEMS 感測器,用於測量氣體、溫度、濕度和壓力
由於所有三個感測器都提供 I2C 序列介面,因此只需要將裝置連接至共用的 I2C 匯流排,即可與微控制器進行整合。雲端選項板線路圖顯示這個簡單的硬體介面 (圖 2)。
圖 2:Renesas RX65N 雲端套件中提供 Renesas 雲端選項板的公版設計線路圖,此圖顯示將該板三個感測器連接至共用 I2C 序列匯流排所需的簡易型硬體介面。(圖片來源:Renesas)
利用雲端選項板上可用的相容連接器,開發人員還可以透過 PMOD 和 Grove 附加電路板擴充此套件的硬體功能性。
軟體開發
雖然 IIoT 裝置中使用的進階微控制器和感測器能簡化硬體設計,但軟體設計可能會變得更加複雜。除了 IIoT 系統的軟體需求外,開發人員還會面臨與雲端型資源 (如 AWS IoT Core 和 AWS 平台服務等) 介接的需求。在此情況下,可透過一對針對裝置和雲端服務的 AWS 軟體開發套件 (SDK) 來解決這些需求。
在應用層級,IoT 軟體開發人員透過標準 AWS SDK 與 AWS 服務進行互動。在此層級上,與裝置及其資料的互動會透過同樣的服務進行,並由 AWS 和 AWS IoT 服務共用的 AWS 訊息及通知服務居間進行協調,具體如下所述。
在裝置層級,開發人員使用裝置 (或「物件」) SDK 連接至 AWS IoT 服務。裝置與 AWS 服務之間的特定請求和響應由訊息代理居間進行協調,訊息代理則使用 ISO 標準的發佈-訂閱 (pub/sub) 訊息協定,即訊息佇列遙測傳輸 (MQTT) 協定,來管理相關的交換 (圖 3)。
圖 3:IIoT 應用的實作,需要為裝置和應用使用不同的 SDK,但兩者均依賴一組統一的全平台機制實現訊息傳送、通知以及其他底層功能。(圖片來源:AWS)
當裝置傳送含有資料酬載的 MQTT 訊息時,規則引擎會根據開發人員以結構查詢語言 (SQL) 等語法編寫的一組運算式,調用更多的 AWS 平台服務。例如,清單 1 所示的規則,可在 Amazon 機器學習服務函數 (machinelearning_predict()
) 調用的推斷模型 (my-model
) 將資料分類為屬於某個特定標籤 (predictedLabel=1
) 時,將 SQL 運算式 (SELECT * FROM 'iot/test
) 產生的酬載,重新發佈至另一個 MQTT 佇列 (my-mqtt-topic
)。
複製
{
"sql": "SELECT * FROM 'iot/test' where machinelearning_predict('my-model', 'arn:aws:iam::123456789012:role/my-iot-aml-role', *).predictedLabel=1",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [{
"republish": {
"roleArn": "arn:aws:iam::123456789012:role/my-iot-role",
"topic": "my-mqtt-topic"
}
}]
}
清單 1:AWS 規則引擎使用 SQL 之類的選擇規則、指定的動作及相關的中繼資料來調用 AWS 服務並路由資料。(程式碼來源:AWS)
裝置影子
雖然 AWS IoT 規則引擎提供鬆散耦合的處理能力,但 AWS IoT Device Shadow 服務有助於 IoT 應用擺脫 IoT 裝置運行狀況的約束。裝置影子會保存實際 IoT 裝置的狀態資訊。因此,如果 IoT 裝置失去連線能力,或因其他原因與 AWS 中斷連線,雲端型服務可使用裝置影子繼續基於最後一次收到的資料進行操作,而無需構建自己的裝置資料快取機制。AWS IoT Greengrass 邊緣服務則正好相反,可讓 IoT 裝置在雲端服務間歇中斷期間,繼續以虛擬方式與雲端互動。當雲端服務中斷時,Greengrass 將繼續在邊緣裝置中運作,以維持裝置影子,並提供維持 IoT 裝置運作所需的必要雲端服務子集。
雖然裝置影子會保留裝置狀態,但 Device Shadow 服務並不僅僅是簡單的快取機制。此服務還為應用提供通用的介面,可將請求傳送至 IoT 裝置。由於此服務已與 MQTT pub/sub 機制綁定,因此在更新和請求資料時,會自動通知所有已訂閱與各裝置影子相關聯的 MQTT 佇列的裝置和應用。
在實作層級,Device Shadow 服務將使用簡單的 JSON 文件格式,保存與每個實體裝置相關的資料和中繼資料。IoT 裝置上的軟體可透過裝置 SDK 傳送新的 JSON 文件,以最新資料更新裝置影子中的報告狀態。而主機或行動裝置型 IoT 應用則可使用新的期望值來更新裝置影子。例如,對於當前顯示綠色 LED 或顯示屏上顯示綠色燈的 IIoT 裝置,相應的應用可以更新裝置影子,請求將其變更為紅色,甚至是接收報告,顯示期望狀態和報告狀態之間的差值 (清單 2)。
複製
{
"state": {
"desired": {
"color": "RED",
"state": "STOP"
},
"reported": {
"color": "GREEN",
"engine": "ON"
},
"delta": {
"color": "RED",
"state": "STOP"
}
},
"metadata": {
"desired": {
"color": {
"timestamp": 12345
},
"state": {
"timestamp": 12345
},
"reported": {
"color": {
"timestamp": 12345
},
"engine": {
"timestamp": 12345
}
},
"delta": {
"color": {
"timestamp": 12345
},
"state": {
"timestamp": 12345
}
}
},
"version": 17,
"timestamp": 123456789
}
}
清單 2:AWS 裝置影子是一份 JSON 文件,內含裝置中繼資料和資料,如裝置報告狀態和裝置期望狀態的值,以及兩種狀態之間的差值。(程式碼來源:AWS)
雖然裝置影子和規則引擎等服務可支援與應用及更廣泛 AWS 平台的整合,但 AWS IoT 服務的核心要件當屬與 Amazon FreeRTOS 的整合。該開源 RTOS 使用大量函式庫,擴大了主流開源 FreeRTOS 核心。除了用於登錄等常用服務的函式庫外,Amazon FreeRTOS 還增加了用於 AWS IoT 服務的函式庫。這些函式庫包括 AWS IoT Device Shadow、AWS IoT Greengrass (gdd),以及用於裝置安全監控的 AWS IoT Device Defender。此外,Amazon 還為許多中介軟體服務提供函式庫,強化 FreeRTOS 的功能,如安全通訊端、傳輸層安全 (TLS)、公鑰加密法標準 (PKCS) #11、OTA 代理、藍牙、Wi-Fi 及 MQTT 訊息交換等。
輕鬆部署
Renesas 將透過其雲端套件以及 AWS IoT 服務連線能力,幫助開發人員快速累積經驗。在設定雲端套件板組後,使用者需要安裝 Renesas 的 Eclipse 架構 e2 studio 整合開發環境 (IDE) 及 Renesas 的 CC-RX 編譯器。透過 e2 studio 和 CC-RX 編譯器,開發人員可以快速地匯入並編譯 Amazon FreeRTOS 及 Renesas 開源 RX65N 雲端套件範例程式碼。
Renesas 提供了相關的文件,詳細說明如何設定 AWS IoT 以及連接 AWS 所需的身份驗證憑證。在這個相對快速的設定程序後,需要執行示範程序,監控由裝置以 MQTT 訊息形式傳送的感測器資料,並通過 AWS IoT 控制台,在可用的 MQTT 顯示客戶端檢視訊息。
客製化軟體開發
除了能即時示範 IoT 裝置與 AWS IoT 的整合,Renesas 範例程式碼還可用作客製化應用的公版設計。不過,即便有這個程式碼,開發人員在客製化專案中仍會面臨諸多難題。其中一個便是需要處理大量與 Amazon FreeRTOS 和相關 AWS IoT 服務有關的配置。每項服務都需要指定許多相關參數,如佇列長度及訊息大小等等。
雖然 Renesas 範例程式碼包含預建的 FreeRTOS 配置用於演示目的,但客製化程式碼開發人員仍需處理每項服務、函式庫及工具的配置選項。Renesas 開發了 Smart Configurator 來簡化這一程序。Smart Configurator 可作為 e2 studio 外掛程式和獨立的應用程式使用,讓開發人員可以透過圖形使用者介面 (GUI) 檢查及修改每項配置組的設定 (圖 4)。
圖 4:Renesas 的 Smart Configurator 提供一個簡單的 GUI,可檢查並修改許多與 Amazon FreeRTOS 所支援函式庫和服務相關的配置設定。(圖片來源:Renesas)
對於程式碼,開發人員可以利用 Renesas RX65N 雲端套件程式碼儲存庫所提供的完整來源。此儲存庫包含的範例常式,展示了透過 MQTT 型訊息機制來處理每項 AWS IoT 服務的關鍵設計模式。
例如,為了展示 AWS IoT Device Shadow 服務,隨附的模組 (aws_shadow_lightbulb_on_off.c
) 和關聯的標頭檔說明在 IoT 裝置上運行的軟體如何產生 JSON 文件、初始化佇列,以及將裝置更新訊息傳送至 Device Shadow 服務。雖然只是稍稍涉及到完整的軟體架構,但此範例模組顯示了如何使用基本的資料結構和幾行程式碼,設定相應的影子裝置 JSON 文件屬性,將燈光的顏色 (清單 1 所示 JSON 文件中的報告顏色:綠色) 更改為新的顏色 (清單 1 中的期望顏色:紅色)。初始化裝置影子後,程式碼將會建立一項任務,透過發出新的期望狀態請求,使用函數 prvGenerateDesiredJSON()
產生含交替顏色狀態的新 JSON 文件,從而在兩個狀態 (紅色和綠色) 之間交替顯示所期望的顏色 (清單 3)。
複製
#define shadowDemoDESIRED_JSON \
"{" \
"\"state\":{" \
"\"desired\":{" \
"\"%s\":\"%s\"" \
"}" \
"}," \
"\"clientToken\": \"token-%d\"" \
"}"
...
static uint32_t prvGenerateDesiredJSON( ShadowQueueData_t * const pxShadowQueueData,
const char * const pcTaskName,
uint8_t ucBulbState )
{
/* Map cBulbState to strings.*/ static const char * const pColors[ 2 ] = { "green", "red" }; /* Generate JSON.*/
return ( uint32_t ) snprintf( ( char * ) pxShadowQueueData->pcUpdateBuffer,
shadowDemoBUFFER_LENGTH,
shadowDemoDESIRED_JSON,
pcTaskName,
pColors[ ucBulbState ],
( int ) xTaskGetTickCount() );
}
...
/* Keep changing the desired state of light bulb periodically.*/ for( ; ; ) { configPRINTF( ( "%s changing desired state.\r\n", pxShadowTaskParam->cTaskName ) ); /* Toggle the desired state and generate a new JSON document.*/
ucBulbState = !( ucBulbState );
xShadowQueueData.ulDataLength = prvGenerateDesiredJSON( &xShadowQueueData,
pxShadowTaskParam->cTaskName,
ucBulbState );
/* Add the new desired state to the update queue.*/
if( xQueueSendToBack( xUpdateQueue, &xShadowQueueData, shadowDemoSEND_QUEUE_WAIT_TICKS ) == pdTRUE )
{
/* If the new desired state was successfully added, wait for notification that the update completed.*/
configASSERT( ulTaskNotifyTake( pdTRUE, shadowDemoNOTIFY_WAIT_MS ) == 1 );
configPRINTF( ( "%s done changing desired state.\r\n", pxShadowTaskParam->cTaskName ) );
}
else
{
configPRINTF( ( "Update queue full, deferring desired state change.\r\n" ) );
}
vTaskDelayUntil( &xLastWakeTime, shadowDemoSEND_UPDATE_MS );
}
清單 3:此範例程式碼片段來自於 Renesas RX65N 雲端套件程式碼儲存庫,展示一個基本的設計模式,其使用在 shadowDemoDESIRED_JSON
中定義並由 prvGenerateDesiredJSON()
函數例項化的 JSON 文件,透過更新佇列來修改裝置的期望狀態。(程式碼來源:Renesas)
結論
憑藉其廣泛的產品組合,AWS 等商用雲端服務對於需要開發大型 IIoT 應用,特別是需要使用其他企業應用的開發人員而言,是一個非常具有吸引力的平台。但是,開發人員也面臨著如何將 IoT 裝置設計與雲端進行整合的難題,而這些難題常常會給開發和部署帶來意外的延誤。
Renesas RX65N 雲端套件以 Renesas RX65N 微控制器為基礎,提供了全套的 IIoT 感測器裝置和公版設計。Renesas 雲端套件搭配使用相關的軟體套件後,將可提供靈活、快速的開發平台,實作感測器型 IIoT 裝置,最終實現與 AWS 的整合。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。