Azure IoT SDK を使わずにデバイスから IoT Hub に接続する方法
あるデバイスから IoT Hub に接続するにあたり、デバイスに搭載するモジュールのサイズを極力小さくする必要があるため、Azure IoT SDK などを使うことができない場合があります。
このような場合、Azure IoT Hub は、AMQP も MQTT もいずれもネイティブでサポートしているため、例えば、C のAMQP (もしくは MQTT) ライブラリをご利用いただけます。
IoT Hub に対するその他のプロトコルのサポート
/ja-jp/azure/iot-hub/iot-hub-protocol-gateway
Azure IoT Hub は MQTT、AMQP、および HTTP プロトコルを介した通信をネイティブでサポートします。
AMQP, MQTT それぞれの方法は以下の通りです。
■ AMQP の場合
手順を示すドキュメントはありませんが、AMQP 1.0 のための C ライブラリとして、uAMQP をオープンソースで公開しています。
uAMQP
https://github.com/Azure/azure-uamqp-c
uAMQP is a general purpose C library for AMQP 1.0.
例えば、以下のような、IoT Hub への接続のサンプルもありますので、ご参照いただければ幸いです。
https://github.com/Azure/azure-uamqp-c/blob/master/samples/mssbcbs_sample/main.c
/* This sample connects to an IoTHub, authenticates using a CBS token and sends one message */
/* Replace the below settings with your own.*/
#define IOT_HUB_HOST "<<<Replace with your own IoTHub host (like myiothub.azure-devices.net)>>>"
#define IOT_HUB_DEVICE_NAME "<<<Replace with your device Id (like test_Device)>>>"
#define IOT_HUB_DEVICE_SAS_TOKEN "<<<Replace with your own device SAS token (needs to be generated)>>>"
■ MQTT の場合
手順を示すドキュメントとして、以下があります。
MQTT プロトコルを使用した IoT Hub との通信
/ja-jp/azure/iot-hub/iot-hub-mqtt-support
「MQTT プロトコルの直接使用」の項目からご確認ください。
AMQP とMQTT のいずれを選択するかは、以下もご参考となりましたら幸いです。
なお各プロトコル用の通信ライブラリの実装にも依存しますが、AMQP よりもMQTT ライブラリの方がフットプリントは小さくなる見込みです。
リファレンス- 通信プロトコルの選択
/ja-jp/azure/iot-hub/iot-hub-devguide-protocols
リソースの少ないデバイス。MQTT およびHTTP ライブラリのフットプリントは、AMQP ライブラリの場合より小さくなります。
そのため、リソースが限られたデバイス(RAM が1 MB 未満など) の場合、MQTT とHTTP/1 が実装可能な唯一のプロトコルとなります。
MQTT のC 言語用ライブラリも複数実装はございますが、Eclipse Paho MQTT が比較的有名です。
MQTT C Client for Posix and Windows
https://www.eclipse.org/paho/clients/c/
Python バージョンのPaho MQTT ライブラリを使った実装例が上記 “MQTT プロトコルを使用した IoT Hub との通信” にもありますため、こちらもご参考ください。
上記の内容がお役に立てば幸いです。
Azure IoT 開発サポートチーム 津田