見出し画像

36. Azure IoT Device SDK for C を試す

前回の記事                        次回の記事

はじめに

今回からしばらく、IoT デバイス側のアプリケーションを C/C++ 言語で開発する方法を試していきます。
2022年に最も人気が上昇したプログラミング言語は「C++」--TIOBEランキング - ZDNET Japan
によれば、

 2022年1月からの人気上昇率を見た場合、第2位は「C」(3.82ポイント増)、第3位は2023年1月のトップを飾っている「Python」(2.78ポイント増)だった。また、「Java」は第3位から第4位(1.55ポイント増)に順位を下げた。

 TIOBEの最高経営責任者(CEO)Paul Jansen氏は、「C++が人気となっている理由は、高水準なオブジェクト指向言語でありながら、極めて高いパフォーマンスを有しているところにある。このためC++を用いることで、高速に動作する(数百万行におよぶ)大規模なソフトウェアシステムを、メンテナンスの悪夢に悩まされることなく開発できる」と記している。

https://japan.zdnet.com/article/35198420/?fbclid=IwAR0e9vE-7WeXHnGTWQJuVQkTnvAG5o3unU04RMGqQmYZ87OyD15l-xCeYls

まぁ、C++ は template 理解できないとねぇ…というのは、おいておいて、アセンブラでの開発を除き、同等の機能を最もコンパクト、かつ、高速に実行可能なバイナリを開発できるのは、20世紀末から変わらず、C/C++だよね、ってことですね。コンパクトという事は、実行のためにロードしたり、リモートから機器のファームウェアアップデートする場合の転送時間(これは分散システムでは短ければ短いほどセキュリティ的にも有利なのよ)も含め、短時間で済むし、実行が高速という事は、同じ機能を実行する場合には、より省電力で済むという、今時、流行りの SDGs的にも Good ってことです。
ちなみに、どのプログラミング言語がどの程度使われているかは、ずっと、TIOBE Index - TIOBE から公開されているので興味のある人は、時々見てみるといいでしょう。

https://www.tiobe.com/tiobe-index/ @ 2023/2/27

へ~。アセンブラは9位なんだ…

C/C++ 言語での IoT デバイスアプリ開発の基本

IoT デバイス側で C/C++ 言語でアプリケーションを組む場合は、

Azure/azure-iot-sdks: SDKs for a variety of languages and platforms that help connect devices to Microsoft Azure IoT services (github.com)

に書いてあるように、IoT アプリを配置する IoT 機器のハードウェアリソースの規模や OS・ファームウェアに合わせて、大きく分けて、2種類の SDK を使い分けることになります。

前者は、小規模以上のハードウェア向けの SDK で、様々な OS、ファームウェアで利用可能です。
後者は、極小規模のハードウェア向けの SDK です。for Embedded C は、更に、Azure RTOS(元は ThreadX)FreeRTOS 向けのライブラリ群が公開されています。
実際のプロジェクトでは、それぞれ適切な SDK を選んで IoT アプリの開発を行うことになります。
二点、注意をしておきます。
長年、組込み機器の制御ソフトウェアを開発してきた技術者で、C/C++ が得意(というか、しか使えない?)という理由だけで、C/C++ 言語を選択するのは止めましょう。Linux や Windows といった汎用 OS が搭載された機器の場合は、C# 等の高級言語の選択がおすすめです。周辺機器等の制御用 API が C/C++向けしか用意されていないような、どうしても C/C++ でなければならない理由がある場合にのみ、C/C++ 向け SDK の利用をお勧めします。その場合でも、.NET では、C/C++ で実装された Native Library を組み込むことができるので、周辺機器アクセス用の Wrapper ライブラリのみ C/C++ で開発する、というような工夫をお勧めします。IoT ソリューションでは、サービスとのやり取りは、JSON メッセージが一般的です。C 言語の場合は、文字列処理は苦痛以外の何物でもありません。生産性の観点から適材適所で、プログラミング言語を選択しましょう。
二点目は、逆に、C/C++ の方が明らかに有利な場合に、C/C++ のスキルが無いという理由だけから、別の言語を選択するのは止めにしょうね、という点です。Azure IoT SDK for C は、他の言語向けの SDK に比べると、制御可能な実行オプションと、実行ログ出力が最も多い SDK です。比較的小規模な HW で、ネットワーク通信環境が特殊な場合等は、C 言語の選択をお勧めします。IoT ソリューションは、多くのピースから成り立つので、障害が発生した場合の原因調査は大変です。状況が確認できる手段は大いに越したことはありません。

この定期購読マガジンでは、先ず、Azure IoT SDK for C を使って、色々と試していく予定です。一連のトピックスが終わったら、for Embedded C も試していきます。

お試し環境

IoT アプリの実装先は、この定期購読マガジンのずっと以前の記事で扱った、Azure IoT Edge を最初に試した Raspberry Pi(Raspberry Pi 4)を使います。ネットワークへの接続は、インターネットに直接接続可能な有線接続です。前の IoT Edge の Gateway 機能による多段接続で使った Raspberry Pi は、一時的に有線接続をインターネットに接続できる線に変えるか、Wi-Fi でインターネットへの接続が可能なネットワークにつなげば、OKです。

Azure IoT SDK for C

早速、Azure IoT SDK for C を試していきます。このライブラリセットは、

Azure/azure-iot-sdk-c: A C99 SDK for connecting devices to Microsoft Azure IoT services (github.com)

ここから先は

31,712字 / 5画像

2022年3月にマイクロソフトの中の人から外の人になった Embedded D. George が、現時点で持っている知識に加えて、頻繁に…

この記事が気に入ったらサポートをしてみませんか?