Skip to content

h7ga40/azure_iot_hub_peach

Repository files navigation

Azure IoT Hub with TOPPERS/ASP3

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」が有効になっています。

mbedTLSに変更するには

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

に変更。

Visual Studio Code対応

以下の記事を参考にしました。 https://os.mbed.com/users/MACRUM/notebook/how-to-setup-vscode-debugging-for--stm32-platforms/ https://qiita.com/mitsu48/items/5c6fec6064af6c4a2c4e

TOPPERS License

TOPPERS Licenseは、BSDライクなライセンスです。詳しくは、下記のサイトを見てください。

https://www.toppers.jp/license.html

謝辞

日本マイクロソフトの太田様には、Azure IoT Hubの操作や設定、メッセージの確認方法など、詳しく教えて頂きました。ありがとうございました。

🐤 Twiter @embedded_george, :octocat: Github ms-iotkithol-jp