Azure IoT
この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues
エッジ IoT - センサー データをクラウドに送信する
このチュートリアルでは、ODYSSEY - X86J41x5 に接続されたセンサー値を読み取り、それを Microsoft Azure IoT Hub に送信する方法を示します。このデータは表示されたり、さらなる IoT アプリケーションのために処理されたりします。
生データの受信

データの可視化

はじめに
IoT Hub は、Microsoft Azure のサービスであり、IoT デバイスから大量のテレメトリをクラウドに取り込み、保存または処理することを可能にします。
前提条件
ODYSSEY - X86J41x5 に Python 3 をインストールする
Microsoft Azure アカウント。まだ持っていない場合は、無料アカウント を作成してください。
Azure リソースを管理するためのコマンドラインツールである Azure CLI をダウンロードしてインストールします。
Azure CLI をインストールしたら、cmd
または Powershell
を開き、az
コマンドを実行します。以下のような画面が表示されるはずです。

Azure CLI の事前設定
Azure にログインする
cmd
または Powershell
を開き、az login
コマンドを実行します。ブラウザウィンドウが表示され、Microsoft Azure アカウントにログインします。

Azure CLI に Microsoft IoT Azure 拡張機能を追加する
以下のコマンドを実行して、Azure CLI に Microsoft Azure IoT 拡張機能を追加します。この IoT 拡張機能は、Azure CLI に IoT Hub、IoT Edge、および IoT デバイスプロビジョニングサービス (DPS) に特化したコマンドを追加します。
az extension add --name azure-cli-iot-ext
IoT Hub の作成
このセクションでは、Azure ポータルを使用して IoT Hub を作成する方法を説明します。
Azure ポータル にサインインします。
リソースの作成 を選択し、マーケットプレイスを検索 で IoT Hub を検索します。
IoT Hub を選択し、作成 をクリックします。
基本 タブで以下のフィールドを入力します:
サブスクリプション: ハブに使用するサブスクリプションを選択します。
リソース グループ: リソース グループを選択するか、新しいものを作成します。新しいものを作成するには、新規作成 を選択し、使用したい名前を入力します。
リージョン: ハブを配置するリージョンを選択します。最も近いリージョンを選択してください。
IoT Hub 名: IoT Hub の名前を入力します。この名前はグローバルに一意である必要があります。名前が利用可能であれば、緑色のチェックマークが表示されます。
重要な注意: IoT Hub は DNS エンドポイントとして公開されるため、IoT Hub の名前に機密情報を含めないようにしてください。

- 次へ: サイズとスケール を選択して続行します:
- 価格とスケールのティア: 現時点では F1: 無料ティア を選択します。1 日あたりのメッセージ数や機能に応じて、いくつかのティアから選択できます。
- レビュー + 作成 タブを選択して設定を確認し、作成 をクリックして新しい IoT Hub を作成します。IoT Hub の作成には数分かかる場合があります。

デバイスの登録
デバイスを接続する前に、IoT Hub に登録する必要があります:
cmd
またはPowershell
で以下のコマンドを実行し、IoT Hub CLI 拡張機能を追加してデバイス ID を作成します:
az iot hub device-identity create --hub-name iot-test-1 --device-id MyPythonDevice
注意:
hub-name
->iot-test-1
を作成した IoT Hub 名に置き換えてください。device-id
->MyPythonDevice
。これは登録するデバイスの名前です。この例では、MyPythonDevice
がデバイス ID です。
- 以下のコマンドを実行して、登録したデバイスの デバイス接続文字列 を取得します。
az iot hub device-identity show-connection-string --hub-name iot-test-1 --device-id MyPythonDevice --output table
デバイス接続文字列をメモしてください。この文字列は次のような形式です:HostName={YourIoTHubName}.azure-devices.net;DeviceId=MyPythonDevice;SharedAccessKey={YourSharedAccessKey}
。後で使用します。
注意:
- 上記と同じように、
hub-name
とdevice-id
を置き換えてください。

Arduino Core を使用したデータ収集
このセクションでは、Arduino Core を使用してセンサー値を読み取り、シリアルモニターに出力します。このデータは他の場所から Python を使用して読み取ることができます。
Arduino IDE をダウンロード、インストール、設定するために Getting Started を参照してください。
Grove Light センサーの信号線を ODYSSEY - X86J41x5 の A0 に接続し、電源とグラウンドも接続します。詳細については Getting Started のピン配置図を参照してください。
以下のコードを Arduino IDE を使用して ODYSSEY - X86J41x5 にアップロードします。正しい ボード と ポート を選択することを忘れないでください。ここで使用する ポート をメモしてください。この例では、ポートは
COM4
です。
Arduino コード
#define LIGHT A0
#define Serial SerialUSB
void setup() {
// 初期設定をここに記述します。1回だけ実行されます。
Serial.begin(115200);
pinMode(LIGHT, INPUT);
}
void loop() {
// メインコードをここに記述します。繰り返し実行されます。
int state = analogRead(LIGHT);
Serial.println(state);
delay(500);
}
- Arduino IDE の シリアルモニター を開き、プログラムが正しく動作しているか確認します。
光センサーの読み取り値を Azure IoT Hub に送信
光センサーの読み取り値はシリアルに出力され、Python を使用してこのデータを抽出し、Azure IoT Hub に送信します。
Powershell
を開き、以下のコマンドを実行して必要な Python ライブラリをインストールします。
pip install azure-iot-device
pip install pyserial
- 以下の Python コードをコピーしてローカルドライブに保存します。テキストエディタを使用して以下の変更を行ってください。
serialPort
変数の値を、先ほどメモしたシリアルポートに置き換えてください。CONNECTION_STRING
変数の値を、先ほどメモしたデバイス接続文字列に置き換えてください。
Python コード
# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
import time
import serial
# Python Device SDK for IoT Hub を使用:
# https://github.com/Azure/azure-iot-sdk-python
# サンプルは IoT Hub のデバイス固有の MQTT エンドポイントに接続します。
from azure.iot.device import IoTHubDeviceClient, Message
# Arduino シリアルからの読み取り設定
serialPort= "COM4" # シリアルポートを変更してください。Arduino IDE で確認可能
baudRate = 115200
ser = serial.Serial(serialPort, baudRate, timeout=0.5)
# デバイス接続文字列。IoT Hub でデバイスを認証するために使用します。
# Azure CLI を使用:
# az iot hub device-identity show-connection-string --hub-name {YourIoTHubName} --device-id MyNodeDevice --output table
CONNECTION_STRING = "HostName=iot-test-1.azure-devices.net;DeviceId=MyPythonDevice;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# IoT Hub に送信する JSON メッセージを定義
MSG_TXT = '{{"Light": {light}}}'
def iothub_client_init():
# IoT Hub クライアントを作成
client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
return client
def iothub_client_telemetry_sample_run():
try:
client = iothub_client_init()
print("IoT Hub デバイスが定期的にメッセージを送信します。終了するには Ctrl-C を押してください。")
while True:
# シミュレートされたテレメトリ値でメッセージを構築
time.sleep(0.1)
light = ser.readline().decode("UTF-8")[:-2]
if light:
msg_txt_formatted = MSG_TXT.format(light=light)
message = Message(msg_txt_formatted)
# メッセージを送信
print("メッセージを送信中: {}".format(message))
client.send_message(message)
print("メッセージが正常に送信されました")
time.sleep(1)
except KeyboardInterrupt:
print("IoTHubClient サンプルが停止しました")
ser.close()
if __name__ == '__main__':
print("IoT Hub クイックスタート #1 - シミュレートされたデバイス")
print("終了するには Ctrl-C を押してください")
iothub_client_telemetry_sample_run()
Powershell
で、保存した Python ファイルのディレクトリに移動します。Python スクリプトを実行してセンサーデータを Azure IoT Hub に送信します。
注意: この例では、Python ファイル名を SendingData.py
としています。保存したファイル名に応じてコマンドを変更してください。
python3 SendingData.py
以下のスクリーンショットは、センサーデータを Azure IoT Hub に送信した出力を示しています。

Azure IoT Hubからデータを読み取る
IoT Hub CLI拡張機能は、IoT Hubのサービス側のEventsエンドポイントに接続できます。この拡張機能は、デバイスからクラウドへのメッセージを受信します。
以下のコマンドを任意のターミナルで実行すると、Azure IoT Hubに送信されたメッセージを監視できます。
az iot hub monitor-events --hub-name iot-test-1 --device-id MyPythonDevice
注意:
hub-name
とdevice-id
を上記と同じように置き換えてください。
以下のスクリーンショットは、ODYSSEY - X86J41x5からIoT Hubに送信されたメッセージを示しています。このデータは処理または表示することができます。

Microsoft Power BIを使用したセンサーデータのリアルタイム可視化
このセクションでは、Microsoft Power BIを使用して光センサーの読み取り値をリアルタイムで表示する方法を説明します。Power BIアカウントをお持ちでない場合は、開始する前に無料アカウントに登録してください。
注意: すべての前の手順を実行し、IoT Hubがメッセージを正常に受信できることを確認してください。
IoT Hubにコンシューマーグループを追加する
コンシューマーグループは、イベントストリームへの独立したビューを提供し、アプリやAzureサービスが同じEvent Hubエンドポイントから独立してデータを消費できるようにします。
コンシューマーグループを追加するには:
Azureポータルにサインインします。
IoT Hubを開き、Built-in endpointsを選択し、Consumer Groupsの下に名前を入力して新しいコンシューマーグループを作成し、保存します。

この場合、lightsensor
が新しいコンシューマーグループです。
Stream Analytic Jobを作成、設定、実行する
Stream Analytic Jobを作成するには:
Azureポータルにサインインします。
Create an resourceを選択し、Marketplaceを検索してStream Analytics jobを探します。
Stream Analytics jobを選択して作成をクリックします。
以下のフィールドを入力し、作成します:
Job name: ジョブの名前。この名前はグローバルに一意である必要があります。この場合、
light-analytic
です。Resource group: IoT Hubが使用しているのと同じリソースグループを使用します。
Location: リソースグループと同じ場所を使用します。

Stream Analyticsジョブに入力を追加する
Stream Analyticsジョブを開きます。
Job topologyの下でInputsをクリックします。
Add stream input -> IoT Hubをクリックします。
以下のフィールドを入力します:
Input alias: 入力名。任意の名前を使用できます。
IoT Hub: これまで使用してきたものを選択します。
Consumer group: 先ほど作成したものを選択します。

- 保存を選択します。
Stream Analyticsジョブに出力を追加する
Stream Analyticsジョブを開きます。
Job topologyの下でOutputsをクリックします。
Add -> Power BIをクリックします。
Microsoft Power BIアカウントで認証します。
以下のフィールドを入力します:
Output alias: 出力名。これも任意の名前を使用できます。
Authentication mode: User tokenを選択します。

- 保存を選択します。
Stream Analytics ジョブのクエリを設定する
Job topology の下で Query をクリックします。
[YourInputAlias]
を入力エイリアスに置き換えます。私の場合はSensorReadings
です。[YourOutputAlias]
を出力エイリアスに置き換えます。私の場合はSensorOutput
です。

Stream Analytics ジョブを実行する
- Overview の下で Start -> Now -> Start をクリックします。ジョブのステータスが Stopped から Running に変わります。

注意: センサーの読み取りを開始するには、ODYSSEY - X86J41x5 で Python スクリプトを実行してクラウドにデータを送信することを忘れないでください。
Power BI レポートを作成して公開し、データを可視化する
Power BI アカウントにサインインします。
Workplaces -> My workspace の下で Datasets を選択し、以前に指定したデータシートが表示されるはずです。
Actions の下で 最初のアイコン(レポートを作成) を選択します。

- ラインチャートを作成して、リアルタイムの光センサー値を時間経過とともに表示します。
Visualizations の下で Line chart を選択します。
Fields の下で EventEnqueuedUtcTime を選択します。
Fields の下で Light を選択します。

Save をクリックしてレポートを保存します。
File -> Publish to web -> Create embed code -> Publish をクリックします。
これで、Power BI を使用してダッシュボード上でセンサーの読み取りを確認できます!

Microsoft は、Power BI ダッシュボードやレポートをモバイルデバイスで表示および操作するための Power BI モバイルアプリ も提供しています。
さらなる開発
ODYSSEY - X86J41x5 を使用して IoT シナリオのセットアップに成功しました。これを活用して独自の IoT ソリューションを構築することができます!
詳細な技術サポートについては Azure IoT をご覧ください。
技術サポート & 製品ディスカッション
弊社製品をお選びいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルを用意しています。