Azure IoT device SDK for Cのサンプルを動かす。

Azure IoT device SDKは、Azure IoT Hubサービスとのメッセージの送受信プロセスを簡略化するためのライブラリです。 今回はRaspberry Pi 2でC言語用の Azure IoT device SDKをビルドし、サンプルアプリを動かしてみたいと思います。


構成イメージ



  1. AzureでIoT Hubをつくる

    Azureにログインし、Create a resource>Internet of Things>IoT Hubを選択します。

    AzureでIoT Hubを選択

    名称、価格レベル、ロケーション等を入力し、Createボタンを押します。デプロイに数分かかります。

    Createします


  2. IoT HubにIoTデバイスを追加する

    1.で作ったIoT HubにIoTデバイスを追加します。Device Management>IoT Devicesを選択します。

    IoTデバイスを追加します

    Addを押します。

    Addを押します

    Authentication TypeはSymmetric Keyを選択し、Saveします。

    Saveします

    デバイスが追加できました。

    デバイスが追加できました


  3. SDKをビルドする

    ここからRaspberry Pi 2での作業です。Ubuntu上でのクロスコンパイルになるのかと思っていましたが、ラズパイ上でビルドできました。


    1. GithubからSDKのソースを取得する

      Gitが入っていない場合はインストールします。

      kurigohan@raspberrypi:~ $ sudo apt-get install git-core

      GitHubからSDKのソースを取得します。

      kurigohan@raspberrypi:~ $ git clone -b 2018-03-16 --recursive https://github.com/Azure/azure-iot-sdk-c.git

    2. サンプルアプリのソースを修正する

      この作業はサンプルアプリを動かしてみたい方だけでOKです。
      サンプルアプリは何種類かありますが、今回は単一のデバイスからクラウドへメッセージを送信する「iothub_ll_telemetry_sample」と、クラウドからのメッセージを受信する「iothub_ll_c2d_sample」を動かしてみたいと思います。


      サンプルアプリのソースはここ↓

      kurigohan@raspberrypi:~ $ ls -l ./azure-iot-sdk-c/iothub_client/samples/iothub_ll_telemetry_sample
      total 24
      -rw-r--r-- 1 kurigohan kurigohan 1354 Mar 31 23:54 CMakeLists.txt
      -rw-r--r-- 1 kurigohan kurigohan 4913 Apr 2 22:22 iothub_ll_telemetry_sample.c
      drwxr-xr-x 2 kurigohan kurigohan 4096 Apr 1 23:20 linux
      drwxr-xr-x 2 kurigohan kurigohan 4096 Mar 31 23:54 mbed
      drwxr-xr-x 2 kurigohan kurigohan 4096 Mar 31 23:54 windows
      kurigohan@raspberrypi:~ $
      kurigohan@raspberrypi:~ $ ls -l ./azure-iot-sdk-c/iothub_client/samples/iothub_ll_c2d_sample
      total 12
      -rw-r--r-- 1 kurigohan kurigohan 1244 Mar 31 23:54 CMakeLists.txt
      -rw-r--r-- 1 kurigohan kurigohan 4651 Apr 4 11:23 iothub_ll_c2d_sample.c

      この2つのファイルの接続文字列を修正します。

      /* Paste in the your iothub connection string */
      static const char* connectionString = "[device connection string]";

      IoT HubリソースのSETTINGSメニュー>Shared access policie>POLICY>iothubownerのConnection StringのPrimary Keyの値を、[device connection string]の部分に貼り付けます。

      Connection Stringはコレ

    3. SDKとサンプルアプリをビルドする

      ビルド前に環境をセットアップするスクリプトを実行します。

      kurigohan@raspberrypi:~ $ cd azure-iot-sdk-c
      kurigohan@raspberrypi:~/azure-iot-sdk-c $ find ./ -name setup.sh
      ./build_all/arduino/setup.sh
      ./build_all/linux/setup.sh
      kurigohan@raspberrypi:~/azure-iot-sdk-c $ sudo ./build_all/linux/setup.sh

      cmakeのバージョンを確認します。2.8.12以上ならOKのようです。そもそもcmakeって何よ?というと、プログラムをコンパイルするためのMakefileを生成してくれるツールのようです。

      kurigohan@raspberrypi:~/azure-iot-sdk-c $ cmake --version
      cmake version 3.7.2

      CMake suite maintained and supported by Kitware (kitware.com/cmake).

      gccのバージョンを確認します。4.4.7以上ならOKのようです?

      kurigohan@raspberrypi:~/azure-iot-sdk-c $ gcc --version
      gcc (Raspbian 6.3.0-18+rpi1+deb9u1) 6.3.0 20170516
      Copyright (C) 2016 Free Software Foundation, Inc.
      This is free software; see the source for copying conditions. There is NO
      warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

      準備ができましたので、SDKその他諸々全てをビルドするスクリプトを実行します。初回は結構時間がかかります。

      kurigohan@raspberrypi:~ $ sudo ./azure-iot-sdk-c/build_all/linux/build.sh


  4. Device Explorerをインストールする

    IoTHubで登録されたデバイスの管理やメッセージの監視に便利と言われる Device Explorer というWindowsデスクトップアプリをインストーラでサクッとインストールします。

    Device Explorerをインストーラでインストールします

    インストールできたらDevice Explorerを起動しConfigurationタブを選択します。 Connecting InformationのIoT Hub Connection String:に、先ほどサンプルアプリのソースに貼り付けた接続文字列を入力し、Updateボタンを押します。

    Configurationタブ

    Device ExplorerでRaspberry Pi 2を管理できるようになりました。
    これを使ってサンプルアプリのメッセージ送受信をチェックしていきます。

    Device ExplorerにRaspberry Pi 2を登録できました


  5. サンプルアプリを動かす

    1. Raspberry Pi 2からクラウドにメッセージを送る

      デバイスからクラウドへメッセージを送信する「iothub_ll_telemetry_sample」を動かしてみます。ソースを見ると「test_message」という文字列を5回投げるようになっているようです。


      Device ExplorerのDataタブを選択しMonitorボタンを押して監視を開始します。

      Device Explorerで監視を開始します

      ラズパイでiothub_ll_telemetry_sampleを実行します。

      kurigohan@raspberrypi:~ $ cd ./azure-iot-sdk-c/cmake/iotsdk_linux/iothub_client/samples/iothub_ll_telemetry_sample
      kurigohan@raspberrypi:~/azure-iot-sdk-c/cmake/iotsdk_linux/iothub_client/samples/iothub_ll_telemetry_sample $ ls -la
      total 1220
      drwxr-xr-x 3 root root 4096 Apr 4 21:36 .
      drwxr-xr-x 17 root root 4096 Apr 4 21:29 ..
      drwxr-xr-x 3 root root 4096 Apr 4 21:29 CMakeFiles
      -rw-r--r-- 1 root root 1035 Apr 4 21:29 cmake_install.cmake
      -rw-r--r-- 1 root root 392 Apr 4 21:29 CTestTestfile.cmake
      -rwxr-xr-x 1 root root 1213772 Apr 4 21:36 iothub_ll_telemetry_sample
      -rw-r--r-- 1 root root 10565 Apr 4 21:29 Makefile
      kurigohan@raspberrypi:~/azure-iot-sdk-c/cmake/iotsdk_linux/iothub_client/samples/iothub_ll_telemetry_sample $ ./iothub_ll_telemetry_sample
      Creating IoTHub handle
      Sending message 1 to IoTHub
      Sending message 2 to IoTHub
      Sending message 3 to IoTHub
      Sending message 4 to IoTHub
      Sending message 5 to IoTHub
      Confirmation callback received for message 1 with result IOTHUB_CLIENT_CONFIRMATION_OK
      Confirmation callback received for message 2 with result IOTHUB_CLIENT_CONFIRMATION_OK
      Confirmation callback received for message 3 with result IOTHUB_CLIENT_CONFIRMATION_OK
      Confirmation callback received for message 4 with result IOTHUB_CLIENT_CONFIRMATION_OK
      Confirmation callback received for message 5 with result IOTHUB_CLIENT_CONFIRMATION_OK
      Press any key to continue

      Device Explorerに送信メッセージが表示されていればOKです。

      Device Explorerに送信メッセージが表示されました

      Azure上ではどこで確認すれば良いのかな…
      分かりづらいな…

      ここが増えていればOKなのかな?


    2. クラウドからRaspberry Pi 2にメッセージを送る

      クラウドからのメッセージを待ち受ける「iothub_ll_c2d_sample」を動かしてみます。ソースを見るとアプリを実行すると待機状態になり、クラウドからメッセージが来ると画面に表示するようです。


      ラズパイでiothub_ll_c2d_sampleを実行し、待機します。

      kurigohan@raspberrypi:~ $ cd ./azure-iot-sdk-c/cmake/iotsdk_linux/iothub_client/samples/iothub_ll_c2d_sample
      kurigohan@raspberrypi:~/azure-iot-sdk-c/cmake/iotsdk_linux/iothub_client/samples/iothub_ll_c2d_sample $ ls -la
      total 1092
      drwxr-xr-x 3 root root 4096 Apr 4 21:36 .
      drwxr-xr-x 17 root root 4096 Apr 4 21:29 ..
      drwxr-xr-x 3 root root 4096 Apr 4 21:29 CMakeFiles
      -rw-r--r-- 1 root root 1029 Apr 4 21:29 cmake_install.cmake
      -rw-r--r-- 1 root root 380 Apr 4 21:29 CTestTestfile.cmake
      -rwxr-xr-x 1 root root 1084208 Apr 4 21:36 iothub_ll_c2d_sample
      -rw-r--r-- 1 root root 10163 Apr 4 21:29 Makefile
      kurigohan@raspberrypi:~/azure-iot-sdk-c/cmake/iotsdk_linux/iothub_client/samples/iothub_ll_c2d_sample $ ./iothub_ll_c2d_sample
      Creating IoTHub handle

      Device ExplorerのMessages To Deviceタブを選択し、MessageやKey、Valueに適当な値を入れ、Sendボタンを押します。Add Time Stampをチェックするとメッセージに時刻情報が追加されます。

      Device ExplorerでMessageを送ってみよう!

      待機していたラズパイの画面に送信したメッセージが表示されればOKです。

      kurigohan@raspberrypi:~/azure-iot-sdk-c/cmake/iotsdk_linux/iothub_client/samples/iothub_ll_c2d_sample $ ./iothub_ll_c2d_sample
      Creating IoTHub handle
      Received Binary message
      Message ID: 08fd4888-3b80-4f0a-87a9-49955216b6e8
      Correlation ID: <unavailable>
      Data: <<<4/4/2018 10:17:49 PM - abcdefg>>> & Size=30
      Received Binary message
      Message ID: 995fd335-6541-4ca1-9af3-2db3e5725a0a
      Correlation ID: <unavailable>
      Data: <<<4/4/2018 10:18:24 PM - hijklmn>>> & Size=30

      Azureの画面からもメッセージを送信できます。

      IoT HubのDEVICE MANAGEMENTメニュー>IoT Devices>(デバイス名)>Device Details>Message To Device を選択し、メッセージを作成してSend Messageをクリックします。

      Azureの画面でMessageを送ってみよう!

      待機していたラズパイの画面に受信したメッセージが表示されます。

      kurigohan@raspberrypi:~/azure-iot-sdk-c/cmake/iotsdk_linux/iothub_client/samples/iothub_ll_c2d_sample $ ./iothub_ll_c2d_sample
      Creating IoTHub handle
      Received Binary message
      Message ID: <unavailable>
      Correlation ID: <unavailable>
      Data: <<<8888888>>> & Size=7
      Received Binary message
      Message ID: <unavailable>
      Correlation ID: <unavailable>
      Data: <<<999999>>> & Size=6


ちなみにこの2つ以外のサンプルはうまく動きませんでしたが、見なかったことにして先に進みますwwwww


この記事へのコメント