RTOSのTOPPERS/ASP3を使ったAzure IoT Hub へ接続するAzure IoT Hub Device C SDKを使ったサンプルです。 ターゲットデバイスは、GR-SAKURAで、Ethernet上のHTTPかMQTTで通信します。 MQTTは、mbedTLSを使用した場合に接続できます。
GR-PEACHでも動作確認できています。ベースのソフトにTOPPERS/ASP3版ECNLを使用します。注意点として、「get_time」という関数が「c-utility/adapters/agenttime_mbed.c」に定義されていますが、ベースのソフトにも定義されているので、Azure IoT SDK側の「get_time」関数を「azure_get_time」などにリネームして競合を避ける必要があります。
サンプルを動作させるには、この手順やこの手順を参照にAzure側にデバイスを追加し、そのデバイスの接続文字列を取得し、ソースコード「app_iothub_client/src/client.c」の以下の個所を書き換える必要があります。
static const char* connectionString = "[device connection string]";
ビルドはGCC+Makefileで行います。RX向けGCCはこちらから入手できます。 IDEとしてe² studio V7.4.0を使用しました。 Rubyの実行環境が必要なので、こちらからダウンロードして、コマンドプロントから実行できるよう、環境変数でパスを通してください。 e² studioのプロジェクトファイルも含まれているので、展開したフォルダをワークスペースとして開き、プロジェクトのインポートをこのフォルダに対して行うことで、取り込むことができます。 開発手順はここにあります。
パス | 内容 | ライセンス |
---|---|---|
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/mbedTLS」が有効になっています。
app_iothub_client\Debug\Makefile(60)
$(SRCDIR)/../mbedtls-2.16.1/Debug/libmbedtls.a \
を
$(SRCDIR)/../wolfssl-3.15.7/Debug/libwolfssl.a \
に変更。
「azure_iothub」プロジェクトのコンパイルオプションに、「USE_WOLFSSL=1」を指定
azure_iothub/c-utility/adapters/platform_toppers.c(55)
return tlsio_mbedtls_get_interface_description();
を
return tlsio_wolfssl_get_interface_description();
に変更。
curl-7.57.0/lib/curl_config.h(930)
/* #undef USE_CYASSL */
を
#define USE_CYASSL 1
に変更。
curl-7.57.0/lib/curl_config.h(954)
#define USE_MBEDTLS 1
を
/* #undef USE_MBEDTLS */
に変更。
TOPPERS Licenseは、BSDライクなライセンスです。詳しくは、下記のサイトを見てください。