機械学習 (AI/ML) 勉強会 #2 IoT編
- 2. 1. 本日の環境
2. 本日の構成
3. IoT デバイス - Raspberry Pi
4. Microsoft Azure
5. IoT ハブ | Azure
6. SQL データベース | Azure
7. マシンラーニング スタジオ |
Azure
本日ご紹介する内容
1
8. ストリーム アナリティクス | Azure
9. [オプション] Power BI
10. 後片付け
- 3. 以下の Microsoft Docs のチュートリアルが元
Raspberry Pi から クラウドへ (Node.js) - Raspberry Pi の
Azure IoT Hub への接続
シミュレートした Raspberry Pi から クラウドへ (Node.js) -
Raspberry Pi Web シミュレーターの Azure IoT Hub への接続
Azure IoT Hub から取得したリアルタイム センサー データの視覚化
– Power BI
本日のハンズオン
2
- 6. 1. ご自身の Visual Studio サブスクリプションの Microsoft アカウントでサインイン
2. 「職場または学校アカウント」か「個人アカウント」かを訊かれた場合は、使用するアカウントを選択
Microsoft アカウントへのサインイン
(Visual Studio サブスクリプション がある場合)
5
- 7. 1. My Visual Studio を開く (必要に応じてサインイン)
2. Azure 特典をアクティブ化
※ Visual Studio Enterprise の場合は
150ドルのクレジット/月、
Visual Studio Professional の場合は
50 ドルのクレジット/月
Visual Studio サブスクリプションの Azure 特典
6
※ Visual Studio サブスクリプションの Azure 特典をアクティブにしていない人はアクティブ化
- 8. Microsoft Azure のポータル を開く (必要に応じてサインイン)
次のどちらかの画面になればOK
Microsoft Azure
7
ホーム | ポータル | Microsoft Azure ダッシュボード| ポータル | Microsoft Azure
- 12. My Benefits | My Visual Studio で Power BI Pro の特典の
「コードを取得」して「アクティブ化」
Power BI
11
- 28. Raspberry Pi 2 & 3 Pin Mappings
27Raspberry Pi 2 & 3 Pin Mappings - Windows IoT | Microsoft Docs
- 31. Raspberry Pi の I2C (シリアル通信の一種) の有効化
30
I2C で温度・湿度・気圧センサー BME280 と通信
- 35. pi@raspberrypi:~ $ sudo apt update
…… なんかかんや
pi@raspberrypi:~ $ sudo apt upgrade
…… なんかかんや
pi@raspberrypi:~ $ sudo apt-get install i2c-tools
…… なんかかんや
pi@raspberrypi:~ $ sudo apt-get install python-smbus
…… なんかかんや
Raspberry Pi へのライブラリーのインストール
34
I2C 用のツール
Python で I2C を使用するためのライブラリー
- 37. led.py
サンプル プログラム 「Lチカ」
$ sudo python /home/pi/azure-
iot-sdk-
python/device/samples/led.py
/home/pi/azure-iot-sdk-
python/device/samples/ へコピー
#coding: utf-8
import RPi.GPIO as GPIO
import time
gpio_number = 4
GPIO.setmode(GPIO.BCM)
GPIO.setup(gpio_number, GPIO.OUT)
for x in xrange(5):
GPIO.output(gpio_number, True)
time.sleep(2)
GPIO.output(gpio_number, False)
time.sleep(2)
GPIO.cleanup()
36
- 38. pi@raspberrypi:~ $ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --
I2C のアドレスの確認
37
- 39. pi@raspberrypi:~ $ sudo i2cdump -y 1 0x76
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
80: 91 71 89 45 0b 01 2c 06 92 6e b2 68 32 00 37 92 ?q?E??,??n?h2.7?
90: 6c d7 d0 0b 89 19 7a ff f9 ff 0c 30 20 d1 88 13 l?????z.?.?0 ???
a0: 00 4b 90 00 00 00 00 00 00 00 00 00 33 00 00 c0 .K?.........3..?
b0: 00 54 00 00 00 00 60 02 00 01 ff ff 1f 60 03 00 .T....`?.?..?`?.
c0: 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 ................
d0: 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 `...............
e0: 00 5a 01 00 16 24 03 1e 8d 41 ff ff ff ff ff ff .Z?.?$???A......
f0: ff 00 00 00 00 00 00 80 00 00 80 00 00 80 00 80 .......?..?..?.?
I2C のアドレスからダンプ
38
- 40. azure-iot-sdk-python のダウンロードとビルド
39
$ free -m
$ sudo nano /etc/dphys-swapfile
CONF_SWAPSIZE=100
↓
CONF_SWAPSIZE=1024
$ sudo systemctl restart dphys-swapfile
$ swapon –s
$ git clone --recursive https://github.com/Azure/azure-iot-sdk-python.git
$ cd azure-iot-sdk-python/build_all/linux
$ ./setup.sh
$ ./build.sh
Python で Azure IoT ハブを利用するためのライブラリー
- 41. Raspberry Pi Azure IoT Web Simulator
Node.js
実機がない場合:
Raspberry Pi Azure IoT Web Simulator
40
- 42. Microsoft Azure と Power BI
41
IoT デバイス
マシンラーニング
スタジオ
マシンラーニング API
ストリーム アナリティクスIoT ハブ
Microsoft Azure
SQL データベース
SQL データベース
Power BI
CSV データ
MQTT
HTTP
Web ブラウザー
- 45. IoT ハブ | Azure
44
IoT デバイス
マシンラーニング
スタジオ
マシンラーニング API
ストリーム アナリティクスIoT ハブ
Microsoft Azure
SQL データベース
SQL データベース
Power BI
CSV データ
MQTT
HTTP
Web ブラウザー
- 57. Raspberry Pi の azure-iot-sdk-python の
サンプルの編集
56
$ cd ~/azure-iot-sdk-python/device/samples
$ sudo vi iothub_client_sample.py
- 58. iothub_bme280.py (azure-iot-sdk-python が元) と
bme280_custom_2.py (SWITCHSCIENCE/BME280 | GitHub が元)
/home/pi/azure-iot-sdk-python/device/samples/ へコピーして編集
iothub_bme280.py の [Connection String] をメモ帳などに保存しておいた
IoT ハブの IoT デバイスの「接続文字列 (主キー)」に書き換え
サンプル プログラム
57
#!/usr/bin/env python
import time
import sys
import RPi.GPIO as GPIO
import iothub_client
from iothub_client import IoTHubClient, IoTHubClientError,
IoTHubTransportProvider, IoTHubClientResult
from iothub_client import IoTHubMessage,
IoTHubMessageDispositionResult, IoTHubError,
DeviceMethodReturnValue
from iothub_client import IoTHubClientRetryPolicy,
GetRetryPolicyReturnValue
from iothub_client_args import get_iothub_opt, OptionError
import bme280_custom_2
……
CONNECTION_STRING = "[ConnectionString]"
MSG_TXT = "{¥"deviceId¥":
¥"myIoTDeviceId¥",¥"pressure¥": %.2f,¥"temperature¥": %.2f,¥"h
umidity¥": %.2f,¥"score¥": %.2f,¥"type¥": ¥"weather¥"}"
gpio_number = 4
wait_time = 10
def initialize_gpio():
GPIO.setmode(GPIO.BCM)
GPIO.setup(gpio_number, GPIO.OUT)
ここを書き換え
- 61. IoT_Hub_Raspberry_Pi_NodeJS.js をコピー&ペースト
[Connection String] をメモ帳などに保存しておいた IoT ハブの IoT デバイスの「接続文字列 (主キー)」に書き換え
サンプル プログラム
60
const wpi = require('wiring-pi');
const Client = require('azure-iot-device').Client;
const Message = require('azure-iot-device').Message;
const Protocol = require('azure-iot-device-
mqtt').Mqtt;
const BME280 = require('bme280-sensor');
const BME280_OPTION = {
i2cBusNo: 1, // defaults to 1
i2cAddress: BME280.BME280_DEFAULT_I2C_ADDRESS() //
defaults to 0x76
};
const connectionString = ‘[ConnectionString]‘;
var sendingMessage = false;
var messageId = 0;
var client, sensor;
var blinkLEDTimeout = null;
const LEDPin = 4;
ここを書き換え
- 65. SQL データベース | Azure
64
IoT デバイス
マシンラーニング
スタジオ
マシンラーニング API
ストリーム アナリティクスIoT ハブ
Microsoft Azure
SQL データベース
SQL データベース
Power BI
CSV データ
MQTT
HTTP
Web ブラウザー
マシンラーニングの学習用データの準備
気象庁の福井市天候データ
60年分
- 72. SQL Server Management Studio を起動し、サーバー名 (接続
文字列の「Server」) と「サーバー管理者ログイン」、「パスワード」で接続
SQL Server Management Studio から接続
71
①
②
- 82. マシンラーニング スタジオ | Azure
81
IoT デバイス
マシンラーニング
スタジオ
マシンラーニング API
ストリーム アナリティクスIoT ハブ
Microsoft Azure
SQL データベース
SQL データベース
Power BI
CSV データ
MQTT
HTTP
Web ブラウザー
福井市の天候を学習
- 83. マシンラーニング スタジオ
| Azure
ブラウザーベースのマシンラーニン
グ (機械学習) の API 作成環境
ドラッグ アンド ドロップで作成
多くのマシンラーニングの
アルゴリズム
Python や R のプログラムの
組み入れも可能
82
- 95. ¥¥129work3¥201902 AI ML 勉強会
#2 IoT編¥Source¥SQLQuery1.sql の
内容をコピー&ペースト
右クリックして「Run selected」
①
②
94
「Import Data」の
プロパティを設定
- 96. SELECT
[AverageTemperature_celsius] AS temperature
,[AverageHumidity_percentage] AS humidity
,[AverageLocalPressure_hPa] AS pressure
,CAST((CASE WHEN [TotalPrecipitationAmount_mm] > 0.0 THEN 1 ELSE 0
END) AS int) AS score
FROM [dbo].[fukuiweather1959-2018]
WHERE AverageTemperature_celsius IS NOT NULL AND AverageHumidity_percentage
IS NOT NULL AND AverageLocalPressure_hPa IS NOT NULL AND
TotalPrecipitationAmount_mm IS NOT NULL
ORDER BY Date
学習用データのインポート用クエリー
95
SQLQuery1.sql
- 114. マシンラーニング API | Azure
113
IoT デバイス
マシンラーニング
スタジオ
マシンラーニング API
ストリーム アナリティクスIoT ハブ
Microsoft Azure
SQL データベース
SQL データベース
Power BI
CSV データ
MQTT
HTTP
Web ブラウザー
雨の予測
API
- 119. ① ○ の間を
ドラッグして繋ぐ
②
○ の間を
ドラッグして繋ぐ
④
「Selected Columns in
Dataset」をクリックして選択
③
API が出力する
列を選択
118
- 129. SQL データベース | Azure
128
IoT デバイス
マシンラーニング
スタジオ
マシンラーニング API
ストリーム アナリティクスIoT ハブ
Microsoft Azure
SQL データベース
SQL データベース
Power BI
CSV データ
MQTT
HTTP
Web ブラウザー IoT ハブからのデータの格納先
後でストリーム アナリティクスから出力
- 132. CREATE TABLE [dbo].[Weather](
[Id] [int] IDENTITY(1,1) NOT NULL,
[deviceId] [varchar](50) NULL,
[pressure] [float] NULL,
[temperature] [float] NULL,
[humidity] [float] NULL,
[EventProcessedUtcTime] [char](30) NULL,
[EventEnqueuedUtcTime] [char](30) NULL,
[score] [float] NULL,
CONSTRAINT [PK_Weather] PRIMARY KEY CLUSTERED ( [Id] )
)
IoT データ格納用テーブルの作成 SQL
131
SQLQuery2.sql
- 135. ストリーム アナリティクス | Azure
134
IoT デバイス
マシンラーニング
スタジオ
マシンラーニング API
ストリーム アナリティクスIoT ハブ
Microsoft Azure
SQL データベース
SQL データベース
Power BI
CSV データ
MQTT
HTTP
Web ブラウザー
- 155. --
-- SELECT deviceId,pressure,temperature,humidity,CAST(EventProcessedUtcTime as datetime)
as EventProcessedUtcTime,CAST(EventEnqueuedUtcTime as datetime) as EventEnqueuedUtcTime
-- ,getscore(temperature,humidity,pressure,0.0) as score
-- INTO [powerbi-output]
-- FROM [iothub-input]
-- WHERE type='weather'
SELECT deviceId,pressure,temperature,humidity,EventProcessedUtcTime,EventEnqueuedUtcTime
,getscore(temperature,humidity,pressure,0.0) as score
INTO [db-output]
FROM [iothub-input]
WHERE type='weather'
[オプション] ストリーム アナリティクスのクエリー (Power BI にも出力する場合)
154
SQLQuery4.sql
- 161. SQL Server Management Studio でデータベースにデータが来ていることを確認
データが来ていることの確認
・ テーブル「dbo.Weather」
を右クリックして「上位1000行の選択」
データの確認
160
雨予測
- 189. 1. 本日の環境
2. 本日の構成
3. IoT デバイス - Raspberry Pi
4. Microsoft Azure
5. IoT ハブ | Azure
6. SQL データベース | Azure
7. マシンラーニング スタジオ |
Azure
本日ご紹介した内容
188
8. ストリーム アナリティクス | Azure
9. [オプション] Power BI
10. 後片付け