Azure IoT C SDK を使用した制約のあるデバイス向けの開発Develop for constrained devices using Azure IoT C SDK

Azure IoT Hub C SDK は ANSI C (C99) で記述されており、ディスクおよびメモリのフットプリントが小さいさまざまなプラットフォームを操作するのに最適です。Azure IoT Hub C SDK is written in ANSI C (C99), which makes it well-suited to operate a variety of platforms with small disk and memory footprint. 推奨されるメモリは 64 KB 以上ですが、正確なメモリ フットプリントは、使用するプロトコル、開かれる接続数、および対象とするプラットフォームに依存します。The recommended RAM is at least 64 KB, but the exact memory footprint depends on the protocol used, the number of connections opened, as well as the platform targeted.

注意

  • Azure IoT C SDK では、開発に役立つリソース消費量情報が定期的に発行されます。Azure IoT C SDK regularly publishes resource consumption information to help with development. Microsoft の GitHub リポジトリにアクセスし、最新のベンチマークを確認してください。Please visit our GitHub repository and review the latest benchmark.

C SDK は apt-get、NuGet、および MBED からパッケージ形式で入手できます。C SDK is available in package form from apt-get, NuGet, and MBED. 制約のあるデバイスを対象とするには、ターゲット プラットフォームに対して SDK をローカルにビルドすることをお勧めします。To target constrained devices, you may want to build the SDK locally for your target platform. このドキュメントでは、cmake を使用することにより、特定の機能を削除して C SDK のフットプリントを縮小する方法を示します。This documentation demonstrates how to remove certain features to shrink the footprint of the C SDK using cmake. さらに、このドキュメントでは、制約のあるデバイスを操作するための最適なプログラミング モデルについても説明します。In addition, this documentation discusses the best practice programming models for working with constrained devices.

制約のあるデバイス向けの C SDK のビルドBuilding the C SDK for constrained devices

制約のあるデバイス向けの C SDK をビルドします。Build the C SDK for constrained devices.

前提条件Prerequisites

こちらの C SDK セットアップ ガイドに従って、C SDK をビルドするための開発環境を準備します。Follow this C SDK setup guide to prepare your development environment for building the C SDK. cmake を使用したビルドの手順に進む前に、cmake フラグを呼び出して未使用の機能を削除することができます。Before you get to the step for building with cmake, you can invoke cmake flags to remove unused features.

余分なプロトコル ライブラリを削除するRemove additional protocol libraries

今日、C SDK では、MQTT、MQTT over WebSocket、AMQP、AMQP over WebSocket、HTTPS という 5 つのプロトコルがサポートされています。C SDK supports five protocols today: MQTT, MQTT over WebSocket, AMQPs, AMQP over WebSocket, and HTTPS. ほとんどのシナリオでは、クライアント上で実行されているプロトコルのうちの 1 つ、2 つを必要とします。したがって、使用しないプロトコル ライブラリは SDK から削除することができます。Most scenarios require one to two protocols running on a client, hence you can remove the protocol library you are not using from the SDK. シナリオに適した通信プロトコルの選択方法の詳細については、IoT Hub の通信プロトコルの選択に関する記事を参照してください。Additional information about choosing the appropriate communication protocol for your scenario can be found in Choose an IoT Hub communication protocol. たとえば、MQTT は、制約のあるデバイスに適する場合が多い軽量なプロトコルです。For example, MQTT is a lightweight protocol that is often better suited for constrained devices.

AMQP ライブラリと HTTP ライブラリは、次の cmake コマンドを使用して削除できます。You can remove the AMQP and HTTP libraries using the following cmake command:

cmake -Duse_amqp=OFF -Duse_http=OFF <Path_to_cmake>

SDK のログ機能を削除するRemove SDK logging capability

C SDK では、デバッグに役立つように、全体にわたって詳細なログを提供します。The C SDK provides extensive logging throughout to help with debugging. 運用環境のデバイス用のログ機能は、次の cmake コマンドを使用して削除することができます。You can remove the logging capability for production devices using the following cmake command:

cmake -Dno_logging=OFF <Path_to_cmake>

BLOB へのアップロード機能を削除するRemove upload to blob capability

SDK の組み込み機能を使用することにより、大きなファイルを Azure Storage にアップロードすることができます。You can upload large files to Azure Storage using the built-in capability in the SDK. Azure IoT Hub は、関連付けられた Azure Storage アカウントへのディスパッチャーとして機能します。Azure IoT Hub acts as a dispatcher to an associated Azure Storage account. この機能を使用することで、メディア ファイル、大きなテレメトリ バッチ、およびログを送信することができます。You can use this feature to send media files, large telemetry batches, and logs. 詳細情報については、「IoT Hub を使用したファイルのアップロード」を参照してください。You can get more information in uploading files with IoT Hub. この機能は、アプリケーションで必要ない場合、次の cmake コマンドを使用して削除することができます。If your application does not require this functionality, you can remove this feature using the following cmake command:

cmake -Ddont_use_uploadtoblob=ON <Path_to_cmake>

Linux 環境でのストリップの実行Running strip on Linux environment

バイナリが Linux システム上で実行されている場合は、strip コマンドを利用して、コンパイル後の最終的なアプリケーションのサイズを縮小することができます。If your binaries run on Linux system, you can leverage the strip command to reduce the size of the final application after compiling.

strip -s <Path_to_executable>

制約のあるデバイス用のプログラミング モデルProgramming models for constrained devices

次に、制約のあるデバイス用のプログラミング モデルを調べます。Next, look at programming models for constrained devices.

シリアライザーの使用を回避するAvoid using the Serializer

C SDK にはオプションとして C SDK シリアライザーがあります。このオプションでは、宣言型マッピング テーブルを使用して、メソッドとデバイス ツイン プロパティを定義することができます。The C SDK has an optional C SDK serializer, which allows you to use declarative mapping tables to define methods and device twin properties. シリアライザーは開発の簡略化を目的として設計されていますが、オーバーヘッドが追加されるため、制約のあるデバイスに最適ではありません。The serializer is designed to simplify development, but it adds overhead, which is not optimal for constrained devices. この場合は、プリミティブ クライアント API の使用を検討し、さらに parson などの軽量のパーサーを使用して JSON を解析します。In this case, consider using primitive client APIs and parse JSON by using a lightweight parser such as parson.

下位のレイヤーを使用する (LL)Use the lower layer (LL)

C SDK では 2 つのプログラミング モデルがサポートされています。The C SDK supports two programming models. 一方のセットには、下位レイヤーを意味する挿入辞 LL を伴った API が含まれています。One set has APIs with an LL infix, which stands for lower layer. この API セットは軽量であり、ワーカー スレッドを起動しません。このことは、ユーザーがスケジュール設定を手動で制御する必要があることを意味します。This set of APIs is lighter weight and do not spin up worker threads, which means the user must manually control scheduling. たとえば、デバイス クライアント用の LL API はこちらのヘッダー ファイルで確認することができます。For example, for the device client, the LL APIs can be found in this header file.

LL インデックスを伴っていない、もう一方の API セットはコンビニエンス レイヤーと呼ばれています。この場合、ワーカー スレッドは自動的に起動します。Another set of APIs without the LL index is called the convenience layer, where a worker thread is spun automatically. たとえば、デバイス クライアント用の便利なレイヤーの API はこちらのIoT Device Client ヘッダー ファイルで確認できます。For example, the convenience layer APIs for the device client can be found in this IoT Device Client header file. 余分な各スレッドによってシステム リソースの大部分が占有される可能性がある制約付きのデバイスの場合は、LL API の使用を検討してください。For constrained devices where each extra thread can take a substantial percentage of system resources, consider using LL APIs.

次のステップNext steps

Azure IoT C SDK アーキテクチャの詳細について説明します。To learn more about Azure IoT C SDK architecture: