RTOSのTOPPERS/ASP3を使ったAzure IoT Hub へ接続するAzure IoT Hub Device C SDKを使ったサンプルです。 ターゲットデバイスは、GR-PEACHで、Ethernet上のHTTPかMQTTで通信します。 MQTTは、mbedTLSを使用した場合に接続できます。
注意点として、「get_time」という関数が「c-utility/adapters/agenttime_mbed.c」に定義されていますが、ベースのソフトにも定義されているので、Azure IoT SDK側の「get_time」関数を「azure_get_time」などにリネームして競合を避ける必要がありました。
IoT Hubでサンプルを動作させるには、この手順やこの手順を参照にAzure側にデバイスを追加し、そのデバイスの接続文字列を取得し、「set_cs」コマンドで接続文字列を設定します。
NTShell> set_cs <device connection string>
そのあと、IoT Hubに接続します。
NTShell> iothub mqtt
IoT Centralでサンプルを動作させるには、この手順を参考に、「実際」の「デバイス」を作成し、スコープID(scopeId)、デバイスID(deviceId)、主キー(primaryKey)を取得し、以下のコマンドでデバイスをプロビジョニングします。
NTShell> dps_csgen mqtt <scopeId> <deviceId> <primaryKey>
接続文字列が表示されれば成功です。 そのあと、IoT Centralに接続します。
NTShell> iothub mqtt
ビルドはGCC+Makefileで行います。arm向けGCCはこちらやこちらから入手できます。Windows向けのVSCodeの設定は6 2017-q2-updateのバージョンに対応しています。
IDEとしてe² studio V7.4.0かVSCodeを使用します。
Rubyの実行環境が必要なので、こちらからダウンロードして、コマンドプロントから実行できるよう、環境変数でパスを通してください。
デバッグするにはOpenOCDが必要で、バージョンは0.10.0-8-20180512-1921以降で、VSCodeの設定ファイルは0.10.0-12-20190422-2015を対象にしています。「asp3_dcre\target\gr_peach_gcc\renesas_rza1h_swd.cfg」を、OpenOCDインストールフォルダの下の「scripts\target」にコピーします。
e² studioを使う場合は、展開したフォルダをワークスペースとして開き、プロジェクトのインポートをこのフォルダに対して行うことで、取り込むことができます。 開発手順はここにあります。
VSCodeの場合は、「ファイル」メニューの「ワークスペースを開く」から、ルートにある「azure_iot_hub_peach.code-workspace」を開きます。必要に応じてワークスペースファイルや「.vscode」フォルダにあるファイルのパスを変更してください。 開発手順はここやここを参考にしてください。
パス | 内容 | ライセンス |
---|---|---|
app_iothub_client | サンプルプログラム | TOPPERS License |
asp3_dcre | RTOS TOPPERS/ASP3 | TOPPERS License |
asp3_dcre/tinet | TCPプロトコルスタック TINET 1.7 | TOPPERS License |
asp3_dcre/mbed | mbed HAL APIの利用と実装 | Apache 2.0 License |
asp3_dcre/syssvc/tlsf | メモリアロケータ tlsf | BSD License |
azure_iothub | Azure IoT Hub Device C SDK (tag 2019-04-11) | MIT License |
azure_iothub/deps/parson | jsonパーサー parson | MIT License |
azure_iothub/c-utility/adapters | TOPPERS向けの実装を追加 | TOPPERS License |
curl-7.57.0 | HTTPクライアントcURL | Curl License |
musl-1.1.18 | 標準Cライブラリmusl | MIT License |
ntshell/fatfs | FATファイルシステム FatFs | FatFs License |
ntshell/ntshell | 仮想ターミナル NT-Shell | MIT License etc. |
ntshell/src | Socket API、標準入出力、ファイルディスクリプタ | TOPPERS License |
wolfssl-3.15.7 | SSL/TLS ライブラリ wolfSSL 現在未使用 | GPL/商用 |
mbedtls-2.16.1 | SSL/TLS ライブラリ mdebTLS | Apache 2.0 License |
zlib-1.2.11 | 圧縮・伸張ライブラリ zlib | zlib License |
ライセンスは参考のため載せておきました。正確なライセンスは各ソフトウェアのサイトを確認してください。
確認 | プロトコル | ソフトスタック |
---|---|---|
✔️ | HTTP | iothubtransporthttp.c→httpapi_compact.c→tlsio_wolfssl.c→socketio_berkeley.c |
✖️ | HTTP | iothubtransporthttp.c→httpapi_compact.c→tlsio_mbedtls.c→socketio_berkeley.c |
✔️ | HTTP | iothubtransporthttp.c→httpapi_curl.c→Curl+WolfSSL |
✖️ | HTTP | iothubtransporthttp.c→httpapi_curl.c→Curl+mbedSSL |
✔️ | MQTT | iothubtransportmqtt.c→wsio.c→umqtt→tlsio_wolfssl.c→socketio_berkeley.c |
✔️ | MQTT | iothubtransportmqtt.c→wsio.c→umqtt→tlsio_mbedtls.c→socketio_berkeley.c |
✖️ | MQTT over WebSocket | iothubtransportmqtt_websockets.c→wsio.c→umqtt→tlsio_wolfssl.c→socketio_berkeley.c |
✔️ | MQTT over WebSocket | iothubtransportmqtt_websockets.c→wsio.c→umqtt→tlsio_mbedtls.c→socketio_berkeley.c |
➖ | AMQP | |
➖ | AMQP over WebSocket |
デフォルトでは、「MQTT/wolfSSL」が有効になっています。
app_iothub_client\Debug\Makefile(60)
$(SRCDIR)/../wolfssl-3.15.7/Debug/libwolfssl.a \
を
$(SRCDIR)/../mbedtls-2.16.1/Debug/libmbedtls.a \
に変更。
「azure_iothub」プロジェクトのコンパイルオプションに、「USE_WOLFSSL=1」を指定。 「tlsio_wolfssl.c」で右クリックし、「リソース構成」→「ビルドから除外」を選択し、表示された画面で、「すべて選択」ボタンを押し「OK」を押す。 「tlsio_mbedtls.c」で右クリックし、「リソース構成」→「ビルドから除外」を選択し、表示された画面で、「選択をすべて解除」ボタンを押し「OK」を押す。
azure_iothub/c-utility/adapters/platform_toppers.c(55)
return tlsio_wolfssl_get_interface_description();
を
return tlsio_mbedtls_get_interface_description();
に変更。
curl-7.57.0/lib/curl_config.h(930)
#define USE_CYASSL 1
を
/* #undef USE_CYASSL */
に変更。
curl-7.57.0/lib/curl_config.h(954)
/* #undef USE_MBEDTLS */
を
#define USE_MBEDTLS 1
に変更。
以下の記事を参考にしました。 https://os.mbed.com/users/MACRUM/notebook/how-to-setup-vscode-debugging-for--stm32-platforms/ https://qiita.com/mitsu48/items/5c6fec6064af6c4a2c4e
TOPPERS Licenseは、BSDライクなライセンスです。詳しくは、下記のサイトを見てください。
https://www.toppers.jp/license.html
日本マイクロソフトの太田様には、Azure IoT Hubの操作や設定、メッセージの確認方法など、詳しく教えて頂きました。ありがとうございました。
🐤 Twiter @embedded_george, Github ms-iotkithol-jp