・Azure IoT Gateway SDK - Linux を使用した物理デバイスで D2C メッセージを送信する 前回は必要機材と参考 URL、開発環境であり動作確認である Raspbian のインストールまで説明しました。今回使用する開発環境は図 1 となります。Raspberry Pi3 と Windows PC はルーターを経由して有線 LAN でインターネット上の Azure に接続します。また Windows PC は Azure の設定とモニターを行うほか、ローカル ネットの Raspberry Pi3 にリモート ログインして開発作業を行います。図 1: Raspberry Pi3 と Windows PC はルーターを経由して有線 LAN でインターネット上の Azure に接続今回の作業は次のとおりです。1. BlueZ 5.37 のインストール2. ble SensorTag 動作確認3. IoT Hub の作成とデバイスの追加4. Azure IoT Gateway SDK のビルドと起動5. Device Explorer を使用した操作6. オプション項目1. BlueZ 5.37 のインストールRaspberry Pi 3/Raspbian の IoT Gateway SDK のインストール作業はクロス コンパイルが必要な Intel Edison へのインストールとは異なり、Raspbian 上でソース コードからビルドするセルフ コンパイルで行います。しかしながら、Raspberry Pi 3/Raspbian 最新版の Bluetooth スタックは、デバイス認識不良が発生するため、BlueZ 5.37 をインストールする必要があります。今回はターミナル エミュレーターの Tera Term を使用して Windows から Raspberry Pi 3 に SSH でログイン後、参考文献の「BlueZ 5.37 をインストールする」の 1 番から 8 番の手順にしたがってコマンドを入力してビルドを行いました。説明項目 9 の設定ファイルの編集は、テキスト エディターを起動してファイルを編集した後で、保存します。編集後の bluetooth.service ファイルは下記となります。
[Unit]Description=Bluetooth serviceDocumentation=man:bluetoothd(8)[Service]Type=dbusBusName=org.bluezExecStart=/usr/local/libexec/bluetooth/bluetoothd -ENotifyAccess=main#WatchdogSec=10#Restart=on-failureCapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICELimitNPROC=1[Install]WantedBy=bluetooth.targetAlias=dbus-org.bluez.service |
テキスト エディターは Raspbian 標準の nano のほか、Linux でよく使われる vi や emacs (要インストール) が利用できます。2. ble SensorTag 動作確認「Raspberry Pi 3 デバイスから SensorTag デバイスへの接続を有効にする」の手順にしたがって操作し、SensorTag の動作を確認します。以下に入力するコマンドと解説を示します。$ マークと # マークはプロンプトを示します。$ sudo apt-get install rfkill「rfkill is already the newest version.」と表示されれば OK です。$ sudo rfkill unblock bluetooth$ bluetoothctl --version5.37 と表示されます。$ sudo systemctl start bluetooth Warning: Unit file of bluetooth.service changed on disk, 'systemctl daemon-reload' recommended.という警告が表示されるので次のコマンドを入力します。$ sudo systemctl daemon-reload次のコマンドで bluetooth シェルを起動するとコントローラーのアドレス情報が表示されます。$ bluetoothctl[NEW] Controller B8:27:EB:48:09:5A raspberrypi [default]scan on コマンドを入力後 scan on コマンドを入力して Bluetooth デバイスをスキャンします。# power onChanging power on succeeded# scan onDiscovery started[CHG] Controller B8:27:EB:48:09:5A Discovering: yes
|
|
この状態で SensorTag CC2650STK の「小さいボタン」を 1 秒ぐらい押すと SensorTag デバイスが検出されて画面表示されます。 |
|
[CHG] Device A0:E6:F8:AF:00:83 RSSI: -57[CHG] Device A0:E6:F8:AF:00:83 TxPower: 0[CHG] Device A0:E6:F8:AF:00:83 ManufacturerData Key: 0x000d[CHG] Device A0:E6:F8:AF:00:83 ManufacturerData Value: 0x03[CHG] Device A0:E6:F8:AF:00:83 ManufacturerData Value: 0x00[CHG] Device A0:E6:F8:AF:00:83 ManufacturerData Value: 0x00[CHG] Device A0:E6:F8:AF:00:83 RSSI: -66この例では SensorTag デバイスの MAC アドレスが A0:E6:F8:AF:00:83 であることがわかります。MAC アドレスは各 SensorTag で異なります。次の様に MAC アドレスを指定して connect command を入力した後、list-attributes コマンドで設定を表示させます。# connect A0:E6:F8:AF:00:83 (scan on で表示されたデバイスの MAC アドレス)Connection successful[NEW] Primary Service/org/bluez/hci0/dev_A0_E6_F8_AF_00_83/service0009Device Information(以下長いメッセージのため省略)# list-attributesPrimary Service/org/bluez/hci0/dev_A0_E6_F8_AF_00_83/service0009Device Information(以下長いメッセージのため省略)# quit終了します。注意点としては、SensorTag は 5 分間程度使用しないと緑色 LED の定期的点滅が消えて、電源が切れてしまうことです。その様な場合はもう一度「小さいボタン」を押して電源を入れます。また原因不明ですが BlueZ スタック動作不良により list-attributes コマンドで何も出力されない場合がときどきあります。その様な場合は$ sudo systemctl restart bluetoothを入力して bluetooth サービスを再起動するか、または$ sudo shutdown -r nowを入力して Raspberry Pi 3 を再起動して、必ず bluetoothctl の list-attributes がメッセージ出力することを確認してから次に進んでください。3. IoT Hub の作成とデバイスの追加続いて参考資料の「BLE Gateway サンプルの実行 - IoT Hub に 2 つのサンプル デバイスを構成する」の項を参照して IoT Hub を作成した後、SensorTag_01 などという名前のデバイスを追加します。デバイス名は自由な名前に設定できます。IoT Hub の作成は Web ブラウザから Azure ポータルにログインして行います。この資料からリンクしているページ「Create an IoT hub using the Azure portal」は英語版でわかりにくいのですが、代わりに次の Microsoft Docs「Azure IoT Hub の使用 (.NET)」の前半部分を参照するとわかりやすいです。・Azure IoT Hub の使用 (.NET)IoT Hub を作成した後は、Device Explorer をインストールしてデバイスを追加作成します。原稿を書いている間に参考資料の「デバイス エクスプローラーと iothub-explorer ツール」のリンクが切れてしまいましたので、代わりに日本マイクロソフト株式会社のエバンジェリスト太田寛氏が作成した IoT Algyan 勉強会資料の次の文書の 30 ページと 31 ページを参考にして作成してください。・IoT ハンズオン資料 Ver3、Win10IoTCore + センサーDevice Explorer は以下から入手します。・Device Explorer 入手リンクの掲載ページ・直リンクまた Raspbian 上で動作する iothub-explorer を使用して同様にデバイスの追加ができます。iothub-explorer のインストールには次のとおり事前に npm のインストールが必要です。$ sudo apt-get install npm$ sudo npm install -g iothub-explorer4. Azure IoT Gateway SDK のビルドと起動参考文書の「Raspberry Pi 3 デバイスで Azure IoT Gateway SDK をビルドする」の手順にしたがってコマンドを入力します。$ cd ~$ git clone --recursive https://github.com/Azure/azure-iot-gateway-sdk.gitの実行で警告が出る場合がありますが、問題ありません。時間がかかります。その次の$ cd azure-iot-gateway-sdkのコマンドはそのまま実行しますが、git submodule update --init -recursiveのコマンドは必要なく、エラーとなる場合があるので実行しません。その次の./tools/build.sh --skip-unittestsはソース コードのオプションが変更になったため次の様にオプションなしで実行します。$ ./tools/build.shこのビルドの実行にも時間がかかります。続いて「Raspberry Pi 3 で BLE サンプルを構成して実行する」にしたがって作業します。ここではエディターを使用して samples/ble_gateway/src/gateway_sample.json ファイルをテキスト エディターで修正します。編集の説明が複数に分かれていますが、すべてこのファイルの修正です。修正項目は次のとおりです。"IoTHubName": "<<Azure IoT Hub Name>>","IoTHubSuffix": "<<Azure IoT Hub Suffix>> ","macAddress": "AA:BB:CC:DD:EE:FF","deviceId": "<<Azure IoT Hub Device ID>>","deviceKey": "<<Azure IoT Hub Device Key>>""device_mac_address": "<<AA:BB:CC:DD:EE:FF>>","filename": "<</path/to/log-file.log>>""<</path/to/log-file.log>>"はログ ファイル名です。"log.txt" に書き換えます。他の項目は環境に応じて設定します。注意点としては、MAC アドレスを入力する場所が 2 か所ありますが、どちらにも scan on で表示されたデバイスの MAC アドレスを記述します。
|
|
ファイルの編集が終わった後は、次のコマンドを実行して Azure に接続します。コンソール画面に SensorTag が温度を送信しているようすが表示されます。 |
|
$./build/samples/ble_gateway/ble_gateway ./samples/ble_gateway/src/gateway_sample.json5. Device Explorer を使用した操作
|
|
Device Explorer を起動して Data タブを開け、「Monitor」ボタンをクリックすると IoT Gateway が SensorTag の温度センサー データを中継して Azure IoT Hub に送るようすをモニターできます。 |
|
次に Device Explorer を使用して外部から SensorTag を操作します。参考文書の「C2D メッセージの送信」部分です。送信作業は Device Explore の「Message To Device」タブを開いて行います。参考文書の説明がわかりにくいのですが、「Message To Device」タブの「Message」テキストに JSON メッセージを張り付けた後「Send」ボタンを押すことで Azure に対してメッセージ送信を行うことができます。ただしこの「Message」欄には改行コードが入力できないため、下記のように各 JSON メッセージをメモ帳にコピーして改行コードを外しておく必要があります。メッセージ送信を行う場合はまず準備として、参考文書にある「1 すべての LED とブザーをリセットする (オフにする)」「2 I/O を "リモート" として構成する」の JSON コマンドを続けて送信します。その後「赤色の LED をオンにする」「緑色の LED をオンにする」「すべての LED とブザーをリセットする」のメッセージを送信すると SensorTag がメッセージ内容に応じて動作します。6. オプション項目簡単な解説でしたが、IoT Gateway SDK のサンプルにより Raspberry Pi 3 と SensorTag CC2650STK を使用して、Bluetooth センサーを Azure IoT Hub に接続する Gateway を容易に開発できるのが理解頂けたでしょうか。前回紹介した MVP Summit 2016 IoT Workshop のドキュメントには、Bonus Challenges として次のような課題も用意しています。余力があれば試してみてください。・ Manually Batching Messages・ Compress Batched Messages・ Implement an IoT Hub Writer・ Create an Azure Function to Decompress & Shred Messages・ Create an Azure Stream Analytics Query・ Create a Power BI Dashboard本稿はここで終わりですが、機会があれば非サポートの他のコントローラーボードへの移植や SDK の改造にも挑戦してみたいと思います。 |