産業用仕様のセンサベースIoTデバイスをAmazon Web Servicesへ迅速にデプロイ
DigiKeyの北米担当編集者の提供
2019-10-02
産業用モノのインターネット(IIoT)向けのエンドポイントデバイスは、クラウドベースのリソースと産業プロセスの間の不可欠なインターフェースを提供します。しかし周辺デバイスのクラウドとの接続において、IIoTデバイスはデバイス-クラウド間だけでなくデバイス自体の性能、コネクティビティ、センサ接続、セキュリティ、信頼性に関して厳しさを増し続ける要件に対応する必要があります。
Amazon IoT CoreやAmazon FreeRTOSなどの専用サービスは、クラウド側におけるこれらの重要要件を満たすのに役立ってきました。しかしデバイス側でこれらのサービスに接続することは、クラウドサービスとその多くのインターフェースおよびプロトコルを扱い始めたばかりのIIoT開発者に対して、さらに複雑さをもたらす可能性があります。そうした開発者は、コスト、電力、性能、スペースの制約に加え、さらにエッジアプリケーションのセンシングおよび処理の要件にすばやく対応しなければなりません。
この記事では、クラウドベースのリソースの使用とそうしたリソースの進化について簡単に説明した後、RenesasのRX65Nマイクロコントローラをベースにした完全クラウドキットを紹介します。クラウドキットの紹介では、このマイクロコントローラおよびリファレンス設計を関連ソフトウェアパッケージと組み合わせて、Amazon Web Services(AWS)クラウドに接続するセンサベースのIIoTデバイスを迅速に実装する方法を説明します。
クラウドリソースの利用
他のクラウドサービスプロバイダも徐々に追いつきつつありますが、AWSは依然としてクラウドベースでスケーラブルな、サーバなしおよびサーバベースのコンピューティング、ストレージ、SaaS(Software-as-a-Service)のトッププロバイダであり続けています。組織は、需要変化とともに拡大する企業規模アプリケーションでこれらのサービスを日常的に使用し、多数のSaaSパッケージを利用しており、それらすべてに、通信、通知、セキュリティ、データストレージやほぼあらゆる業務のコンピューティングニーズに対応するプラットフォーム全体で一様なミドルウェアサービスが介在しています。
大規模なIoTアプリケーションを導入する企業の場合、これらのサービスを利用して車両、設備、建物、製造工場からのIIoTデータを解析することには、物理的資産、プロセス、業務の見通しと管理を強化できるという明確な利点があります。しかし開発者にとっては、IIoTデバイスをAWSや他のクラウドサービスに接続することは、そこまで明確な利点があるとは思えないかもしれません。これは、リソース制約を受ける周辺デバイスのリアルタイムIoT設計と、クラウドのスケーラブルな仮想サービスの間に明らかなギャップがあるためです。
このギャップを埋めるため、主要なクラウドサービスのプロバイダは、IoTデバイスとクラウドサービスの間の幅広い差異を吸収するように設計した一連の接続機能を提供しています。AWSの場合、これらの機能はAWS IoT Coreに含まれており、AWSプラットフォーム全体へのゲートウェイとしてだけでなく、データストレージ、アナリティクス、可視化、機械学習のためのIoTに特有なアプリケーションレベルのサービスへのゲートウェイとして働きます(図1)。
図1:AWS IoTは現場のIIoTセンサとより広範なAWSプラットフォームとの間でサービスインターフェースを提供します。後者はここに挙げたフリート管理などの産業アプリケーション用センサデータの解析に使われるサービスのプラットフォームです。(画像提供:AWS)
これらの機能の他に、オープンソースのリアルタイムオペレーティングシステム(RTOS)であるFreeRTOSがAWS IoTに組み込まれていることは、システムの更新および保守のライフサイクル要件に対応する上で重要な利点になります。
他のエンタープライズレベルの製品と同じく、AWS IoTサービスはデバイス導入、認証、メッセージ交換のための幅広いインターフェース要件とプロトコル一式を指定しています。広範なAWSプラットフォームの要件と一致してはいても、IoT環境特有の性質のため、デバイスをAWS IoT Coreおよび関連AWS IoTサービスと統合することに習熟するには、経験豊富なAWS開発者でもかなり苦労する可能性があります。さらに、どの程度の経験をもつ開発者も、高性能、低消費電力、優れたセキュリティへの高まり続ける要求を満たすIoT設計を実装するという、いつもの課題に直面します。
こうした多数の課題に対して、RenesasのRTK5RX65N0S01000BE RX65N Cloud Kitは、IIoTデバイスをAWSに迅速にデプロイするためのすぐに使えるソリューションとなっています。
包括的プラットフォーム
RX65N Cloud Kitは、AWS IoTクラウドサービスに接続するIIoTデバイスのデプロイと評価を行う、リファレンス設計と開発プラットフォームを完備したキットです。本キットには、ハードウェアボードとして、Renesas R5F565NEDDFP 32ビットマイクロコントローラを搭載したターゲットボード(Amazon FreeRTOS認定取得済み)、Wi-Fiボード、USB接続および通常IIoTアプリケーションに必要なセンサ一式を備えたRenesas Cloud Optionボードの3つが含まれ、包括的なソフトウェア開発パッケージが付属しています。
Renesas RXv2 32ビットプロセッサコアをベースとしたR5F565NEDDFPマイクロコントローラは、640KBのRAM、32KBのデータ用フラッシュメモリ、2MBのコード用フラッシュメモリを備えています。このマイクロコントローラでは、コード用フラッシュメモリを、単一のアドレス空間として動作するリニアモード、または2つの別個のメモリ領域として動作するデュアルモードで構成できます。デュアルモードは、新しいファームウェアを空きバンクにロードし、システムの再起動前に完全性と真正性を検証するため、より信頼性の高い無線(OTA)アップデートが可能です。
メモリサポート以外にも、R5F565NEDDFPおよびRX65Nファミリの他製品は、IEEE-754浮動小数点ユニット(FPU)、メモリ保護ユニット(MPU)を含む広範な機能ブロックのセットを内蔵しています。RX65Nマイクロコントローラは、外部インターフェースとして、マルチチャンネル12ビットA/Dコンバータ(ADC)を2基、2チャンネル12ビットD/Aコンバータ(DAC)を1基、Ethernet、CAN(Controller Area Network)、複数のシリアルインターフェースを含む産業用通信インターフェースを備えています。シリアルインターフェースには、I2C、クワッドSPI、I2CおよびSPIをサポートしたマルチチャンネルSCI(Serial Communications Interface)が含まれます。
センサハードウェアインターフェース
評価プラットフォームの提供に加えて、Renesas Cloud KitはRX65NマイクロコントローラのIIoTセンサとの比較的容易な接続を実現しています。これに関して、本キットのCloud Optionボードには以下の3つのセンサが搭載されています。
- Renesasの周辺光および赤外光測定用デジタル光センサISL29035(ISL29035IROZ-T7)
- Bosch Sensortecの3軸加速度およびジャイロ測定用MEMSセンサBMI160
- Bosch Sensortecのガス、温度、湿度、圧力の測定用MEMSセンサBME680
3つのセンサはすべてI2Cシリアルインターフェースを備えているため、マイクロコントローラとの接続は、これらを共有I2Cバスに接続するだけで済みます。Cloud Optionボードの回路図は、この明快なハードウェアインターフェースを示しています(図2)。
図2:Renesas RX65N Cloud Kitに含まれているRenesas Cloud Optionボードのリファレンス設計回路図は、3つのセンサを共有I2Cシリアルバスに接続するために必要なシンプルなハードウェアインターフェースを示しています。(画像提供:Renesas)
市販の互換コネクタを使用すれば、PMODアドオンボードおよびGroveアドオンボードで本キットのハードウェア機能を拡張できます。
ソフトウェアの開発
IIoTデバイスに使われている先進的なマイクロコントローラおよびセンサはハードウェア設計を簡単にしてくれますが、ソフトウェア設計はより複雑になる場合があります。IIoTシステムのソフトウェア要件に加えて、AWS IoT CoreやAWSのプラットフォームサービスのようなクラウドベースのリソースとのインターフェース接続要件も問題になります。その場合、こうした要件には、デバイスとクラウドサービスをターゲットにした一対の開発AWSソフトウェアキット(SDK)を使用して対応します。
アプリケーションレベルでは、IoTソフトウェア開発者は標準のAWS SDKを介してAWSサービスとやり取りします。このレベルでは、デバイスおよびそのデータとのやり取りは、同じこれらのサービスを通じて行われ、後述するようにAWSサービスとAWS IoTサービスの両方に共通したAWSのメッセージングおよび通知サービスが介在しています。
デバイスレベルでは、開発者はAWS IoTサービスとの接続にデバイス(あるいは「モノ」)のSDKを扱います。デバイス-AWSサービス間の特定のリクエストおよびレスポンスは、ISO規格のパブリッシュ-サブスクライブ(pub/sub)メッセージプロトコルであるMQTT(Message Queuing Telemetry Transport)でメッセージ交換を管理するメッセージブローカが仲介します(図3)。
図3:IIoTアプリケーションの実装には、デバイス用とアプリケーション用に別個のSDKを使用しますが、そのどちらもメッセージ処理、通知、その他の基盤機能を果たす一様なプラットフォームレベルの機構に基づいています。(画像提供:AWS)
デバイスがデータペイロードを含んだMQTTメッセージを送信すると、開発者がSQL(Structured Query Language)に基づいた構文で記述した一組の式にしたがってルールエンジンがAWSのプラットフォームサービスを別途呼び出します。たとえば、リスト1に示すルールは、SQL式(SELECT * FROM 'iot/test)で生成されたペイロードを、Amazon機械学習サービスの関数(machinelearning_predict())に呼び出される推論モデル(my-model)がある特定のラベル(predictedLabel=1)に属するものであると分類した場合に、そのデータを別の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のデバイスシャドウは、デバイスの報告された状態と望ましい状態、2つの状態の違いなど、デバイスのメタデータおよびデータを含んだ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は、セキュアソケット、TLS(Transport Layer Security)、PKCS #11(Public Key Cryptography Standard)、OTAエージェント、Bluetooth、Wi-Fi、MQTTメッセージ交換など、多くのミドルウェアサービス用ライブラリでFreeRTOSを強化しています。
簡単な導入
Renesasは、開発者がすばやく経験を積めるように、同社のCloud Kitと、AWS IoTサービスとのコネクティビティで支援しています。ユーザーは、Cloud Kitのボードセットをセットアップした後、Renesasが提供しているEclipseベースの統合開発環境(IDE)であるe2 studioとRenesas CC-RXコンパイラをインストールする必要があります。e2 studioとCC-RXコンパイラを使用すれば、簡単にAmazon FreeRTOSとオープンソースのRenesas RX65N Cloud Kitサンプルコードをインポートしてコンパイルできます。
RenesasはAWS IoTそのものと、AWSとのあらゆる接続に必要な認証情報をセットアップする手順を説明した関連ドキュメントを提供しています。この比較的簡単なセットアップ手順を行った後は、デモプログラムを起動してデバイスからMQTTメッセージとして送信されるセンサデータを監視し、AWS IoTコンソールから使えるMQTT表示クライアントでメッセージを表示する必要があります。
独自ソフトウェアの開発
IoTデバイスをAWS IoTに接続するすぐに使えるデモに加えて、Renesasは独自アプリケーションのリファレンス設計として使えるサンプルコードも提供しています。しかしこうしたコードが用意されていても、開発者が独自プロジェクトで直面することになる難題の1つに、Amazon FreeRTOSおよび関連AWS IoTサービスに関する多数の設定を行うことが挙げられます。各サービスには、キュー長やメッセージサイズなど多数の関連パラメータを設定する必要があります。
Renesasのサンプルコードには、デモ用にFreeRTOSの事前作成済みの設定が含まれていますが、独自コードの開発者は、各サービス、ライブラリ、ユーティリティ用の設定オプションに取り組む必要があります。Renesasはこうした作業を容易にするため、Smart Configuratorを開発しました。e2 studio用プラグインとスタンドアロンアプリケーションの両方が用意されているSmart Configuratorを使うと、グラフィカルユーザーインターフェース(GUI)を通して各設定グループの設定内容を確認、変更できます(図4)。
図4:Renesas Smart Configuratorは、Amazon FreeRTOSがサポートしている多数のライブラリおよびサービスに関する多くの構成設定を確認、変更するためのシンプルなGUIを提供します。(画像提供:Renesas)
コードに関しては、Renesas RX65N Cloud Kitのコードリポジトリで提供されているすべてのものを利用できます。このリポジトリに含まれているサンプルルーチンは、MQTTベースのメッセージ機構を通じて各AWS IoTサービスを扱うための主なデザインパターンの実例になっています。
たとえば、AWS IoT Device Shadowサービスの動作を示すため、リポジトリにあるモジュール(aws_shadow_lightbulb_on_off.c)および関連のヘッダファイルは、IoTデバイスで動作しているソフトウェアがJSONドキュメントの作成、キューの初期化、Device Shadowサービスへのデバイス更新メッセージの送信を行う方法を示しています。このサンプルモジュールはそのソフトウェアアーキテクチャ全体を含んでいますが、基本的なデータ構造と数行のコードによってシャドウデバイスJSONドキュメントの適切な属性を新しい色(リスト1で望ましい色である赤)に設定することでライトの色(リスト1のJSONドキュメントで報告された色である緑)を変更する方法を示しています。デバイスシャドウの初期化後、このコードは望ましい色を2つの状態間(赤と緑)で交互に変えるタスクを生成します。それには、交互に変えた状態色を含む新しいJSONドキュメントを関数prvGenerateDesiredJSON()で生成し、新しい望ましい状態のリクエストを発行します(リスト3)。
Copy
#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 Cloud Kitのコードリポジトリにあるサンプルからのこのコード片は、shadowDemoDESIRED_JSONで定義したJSONドキュメントをprvGenerateDesiredJSON()関数でインスタンス化し、アップデートキューでそれを使ってデバイスシャドウの望ましい状態情報を変更する基本的なデザインパターンを示したものです。(コード提供:Renesas)
まとめ
幅広い提供機能を備えた、AWSのような商用クラウドサービスは、大規模なIIoTアプリケーションを構築する開発者、とりわけ他の企業用アプリケーションに取り組む必要のある開発者にとって魅力的なプラットフォームです。しかし、IoTデバイスの設計とクラウド接続の両方の課題を扱うことは、開発およびデプロイの予期せぬ遅れにつながることがよくあります。
Renesas RX65NマイクロコントローラをベースにしたRenesas RX65N Cloud Kitは、IIoTセンサデバイスとリファレンス設計を完備したキットです。関連ソフトウェアパッケージと組み合わせて使用すると、Renesas Cloud KitはAWSに接続するセンサベースのIIoTデバイスを実装するための柔軟で俊敏な開発プラットフォームになります。
免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。


