Azure IoT SDK を使わずにデバイスから IoT Hub に接続する方法


あるデバイスから IoT Hub に接続するにあたり、デバイスに搭載するモジュールのサイズを極力小さくする必要があるため、Azure IoT SDK などを使うことができない場合があります。

 

このような場合、Azure IoT Hub は、AMQP MQTT もいずれもネイティブでサポートしているため、例えば、C AMQP (もしくは MQTT) ライブラリをご利用いただけます。

 

IoT Hub に対するその他のプロトコルのサポート

https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-protocol-gateway

 

Azure IoT Hub MQTTAMQP、および 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 との通信

 https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-mqtt-support

 

    MQTT プロトコルの直接使用」の項目からご確認ください。

 

 

AMQP MQTT のいずれを選択するかは、以下もご参考となりましたら幸いです。

なお各プロトコル用の通信ライブラリの実装にも依存しますが、AMQP よりもMQTT ライブラリの方がフットプリントは小さくなる見込みです。

 

 リファレンス- 通信プロトコルの選択

 https://docs.microsoft.com/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 開発サポートチーム 津田

 

Skip to main content