こんにちはIoT研究所のマサミです。
今回は、今回は温度センサーから温度データを取得して、温度データをAzureとPower BIを利用して可視化する方法について徹底解説します!
IoTを試しに導入する際に役立ててください。
Raspberry Piとは?
Raspberry Piはコンピューターのカテゴリに属しますが、従来のコンピューターにはない「GPIO」と呼ばれるピンがあり、ここにセンサーやアクチュエーターといったデバイスを接続して制御することができます。
また、OSはLinuxで動作するため、ライブラリやスクリプト言語を使って高度な処理を行うことができます。
安価で購入可能なため、IoTのプロトタイプを構築する際におすすめです。
Azureとは?
Microsoft が提供するパブリッククラウドサービスです。
AzureはPaaS、IaaS、SaaSに対応しMicrosoftやサードパーティが提供するさまざまな機能を組み込むことが可能なクラウドサービスです。
今回は、Azureの「IoT hub」と「Stream Analytics」の2つのサービスを利用します。
PowerBIとは?
PowerBIはMicrosoft社が提供している無料で利用できるBIツールです。
取得したデータに基づいて迅速な決定を下すための分析をすることができ、Azureと連携することもできます。
Raspberry Piのセットアップ
まずは、I2C通信を有効にします。
I2C(Inter-Integrated Circuit)とは、センサーとデバイスを結ぶシリアル通信用のインターフェイスで、2本の物理線(SCLとSDA)で接続します。
I2C通信を用いるとデジタル値を出力するセンサーなどを多数取り扱えるようになります。
Raspberry Piのメニューの中から[設定]-[ラズベリーパイの設定]を選択します。
「インターフェイス」タブの「I2C」を有効にします。
続いて、Raspberry PiのGPIOにセンサー素子をつなげます。
今回は、ADT7410使用温度センサモジュールを利用します。
ADT7410使用温度センサモジュールに4つの接続箇所があり各接続には以下の役割があります。
VDD:電源
SCL:シリアルデータ
SDA:シリアルロック
GND:グランド
各接続箇所に対応するRaspberry PiのGPIOと繋げます。
※Raspberry PiのOSのインストール方法は以前の記事「簡単!Raspberry PiにOS「Rasbian」をインストール方法」を参考にしてください。
Azure IoT hubの作成
Raspberry Piから送られてきたデータの受け口となる「IoT hub」と、受け取ったデータをCSVファイルに変換してPower BIに送るために、「Stream Analytics」を利用します。
Azure Portalにログインして、「リソースの作成」をクリックし、「モノのインターネット(IoT)」から「IoT hub」を選択します。
Basics(基本設定)を以下のように設定します。
Subscription(サブスクリプション):従量課金 ※無料体験期間内だと「無料体験版」を選ぶことができます。
Resource Group(リソースグループ):新規作成、または既にあるリソースグループ
Region(場所):任意の場所
IoT hub name(アカウント名):任意の名前
次に、Size and scale(サイズとスケール)タブをクリックして、接続できるデバイス数や1日あたりの受信数を選択します。
選択するスケールティアによって価格が異なります。
Azure IoT hubの料金はこちら(https://azure.microsoft.com/ja-jp/pricing/details/iot-hub/)を参照してください。
「Create(作成)」をクリックするとIoT hubが作成され、「ダッシュボード」と「すべてのサービス」に表示されます。
IoT hubが作成されるのに30秒ほどかかります。
表示されない場合は「更新」ボタンをクリックします。
続いてIoT hubにデバイスを登録します。
すべてのリソースの中から作成した作成したIoT hubを選択し、「IoT devices(IoTデバイス)」を選択し、「+Add(追加)」をクリックします。
「Device ID(デバイスID)」に任意の名前を入力し「SAVE(保存)」をクリックします。
Stream Analyticsの作成
Raspberry Piから送られてきたデータをIoT hubで受信し、Stream Analytics経由でPower BIに送信します。
「リソースの作成」をクリックし、「モノのインターネット(IoT)」から「Stream Analytics job」をクリックします。
Basics(基本設定)を以下のように設定し「作成」をクリックします。
Job name(ジョブの名前):任意の名前
Subscription(サブスクリプション):従量課金 ※無料体験期間内だと「無料体験版」を選ぶことができます。
Resource Group(リソースグループ):新規作成、または既にあるリソースグループ
Region(場所):任意の場所
Stream Analytics が作成され、「ダッシュボード」と「すべてのサービス」に表示されます。
次に、IoT hubから受け取ったデータの加工方法を設定します。
すべてのリソースの中から作成したStream Analyticsを選択し、「Inputs」をクリック後、「Add stream input」をクリックし、ドロップメニューから「IoT hub」を選択します。
以下のように設定し「Save」をクリックします。
Input alias(入力のエイリアス):任意の名前 ※今回はInputという名前にします。
サブスクリプション:従量課金 ※無料体験期間内だと「無料体験版」を選ぶことができます
IoT Hub:先ほど作成したIoT hubの名前
Endopoint(エンドポイント):Messaging
Shared access policy name(共有アクセスポリシーの名前):iothubowner
Coonsumer group(コンシューマーグループ):$Default
Event serialization format(イベントシリアル化形式):JSON
Encoding:(エンコード)UTF-8
同様にして出力の設定を行います。
「Outputs」をクリック後、「+Add」をクリックし、ドロップメニューから「Power BI」を選択します。
「Output ailias」、「Dataset name」、「Table name」に任意の名前を入力し、「Authorize」をクリックします。
Outpu ailiasは、今回は「Output」とします。
Power Biのアカウントにログインします。
最後に「Save」をクリックします。
入力と出力の設定が終わったら、クエリを設定します。
「Query」をクリックし、以下のように書き換えた後「Save」をクリックします。
SELECT
*
INTO
Output
FROM
Input
※先ほど設定した「入力」と「出力」の名前を設定します。
これでStream Analyticsの設定が完了です。
すべての設定が終わったので、最後に「Overview」の「Start」をクリックします。
以上でAzureの設定は完了です。
IoT hubにデータを送信するプログラムの作成
データを受け付ける「IoT hub」、受け取ったデータをPower BIに送信する「Stream Analytics」の作成ができたので、Rapberry Piで取得した温度データをAzure IoT hubに送信するプログラムを作成します。
プルグラム言語はPython を利用します。
Pythonは、オープンソースで開発されているフリーのプログラミング言語の一つで、プログラミング言語の中でも「スクリプト言語」と呼ばれています。
Pythonは可読性の高いプログラミング言語で覚えやすいことが特徴です。
Pythonは多くの企業で使われており、アプリやソフトウェアの開発、データサイエンス、IoTの分野、さらには近年注目されているディープラーニングといったAIを支える技術分野でも積極的に活用されています。
また、Raspberry Piの「Pi(パイ)」はPythonの「パイ」から取られています。
まずは、IoT hubにデータを送信するために必要なライブラリをインストールします。
ターミナルに以下のコマンドを入力します。
pip3 install azure-iothub-device-client
正常にライブラリがインストールされない場合は、パッケージがアップデートされていない可能性があるため、以下のコマンドを実行してください。
sudo apt-get update
Azure IoT Hub Device Client SDKライブラリはWindows OSで動作するライブラリです。
Mac OSやLinux OSで動作させる場合には追加で以下のコマンドを入力します。
sudo apt-get install libboost-python-dev
Raspberry Piのメニューから「プログラミング」-「Thonny Python IDE」を選択します。
以下のプログラムを実行します。
#ライブラリをインポート
import smbus
import time
import sys
import iothub_client
from iothub_client import IoTHubClient, IoTHubClientError, IoTHubTransportProvider, IoTHubClientResult
from iothub_client import IoTHubMessage, IoTHubMessageDispositionResult, IoTHubError, DeviceMethodReturnValue
CONNECTION_STRING = "Connection string(primary key)を入力"
PROTOCOL = IoTHubTransportProvider.MQTT
MSG_TXT = "{\"temperature\": %.2f}"
def send_confirmation_callback(message, result, user_context):
print ( "IoT Hub responded to message with status: %s" % (result) )
def iothub_client_init():
client = IoTHubClient(CONNECTION_STRING, PROTOCOL)
return client
def read_adt7410():
word_data = bus.read_word_data(address_adt7410, register_adt7410)
data = (word_data & 0xff00)>>8 | (word_data & 0xff)<<8
data = data>>3
if data & 0x1000 == 0:
temperature = data*0.0625
else:
temperature = ( (~data&0x1fff) + 1)*-0.0625
return temperature
bus = smbus.SMBus(1)
address_adt7410 = 0x48
register_adt7410 = 0x00
try:
client = iothub_client_init()
while True:
inputValue = read_adt7410()
msg_txt_formatted = MSG_TXT % (inputValue)
message = IoTHubMessage(msg_txt_formatted)
client.send_event_async(message, send_confirmation_callback, None)
time.sleep(1)
except KeyboardInterrupt:
pass
「Connection string(primary key)を入力」は、IoT hubを作成した際にメモした「接続キー」に置き換えます。
Power Biのメニューから「マイワークスペース」を選択し、「データセット」をクリックしグラフのアイコンをクリックします。
フィールドから「EventProcess」と「temperature」にチェックを入れ、「視覚化」から折れ線のグラフをクリックするとセンサーから取得した温度データのグラフが表示されます。
まとめ
いかがだったでしょうか?
今回は、Raspberry Piを利用して温度データを視覚可しましたが、Raspberry Piと様々なセンサーを利用することで、様々なIoTシステムを構築することができます。
もし、この機会にもっとRaspberry Piを使ったIoTでできることを学びたいという方は、IoT研究所が開催しているIoT入門セミナーがおすすめです。
Raspberry Piを利用して、「センサーデータの取得・可視化」する方法や、「AIによる不審者を検知するカメラ」を実際に作成しながらIoTの入力から出力までを学ぶことができるおすすめのセミナーです!