Sensor Telemetry 2.0.1:Azure IoT Hubによる高度な温度監視
Sensor Telemetry 2.0.1は、MCP9808センサーからのリアルタイム温度データをMicrosoft Azure IoT Hubに配信します。システムはAzure Stream Analyticsでテレメトリを処理、Azure SQLに結果を格納、Windows Universalモバイルアプリで履歴を可視化します。更新日:2017年5月17日。
ストーリー
更新:Sensor Telemetryはリマスターされ、バージョン2.0.1に改称されました。
はじめに
概要
このプロジェクトでは、Raspberry Pi上で高精度MCP9808温度センサーを読み取り、テレメトリをAzure IoT Hubに送信、Stream Analyticsでデータ処理、Azure SQLに読み取り値を永続化する方法を紹介します。UWPモバイルアプリでセンサー履歴を表示し、SignalR経由でリモート制御も可能です。
アプリケーション
2つのUWPアプリが約99%のコードを共有:1つはRaspberry Pi上で動作(IoT側)、もう1つはPC上で動作(クライアント側)。IoTアプリはセンサーデータをIoT HubとSignalRに送信し、クライアントアプリはSignalRを購読してリアルタイム更新を受信、デバイスにコマンドを送り返せます。
技術スタック
コードベースはMVVMパターンに従い、Prism(Prism.UnityでIoC)とPrism.Eventで疎結合なイベントシステムを実装。SignalRがアプリインスタンス間のリアルタイム通信を担当。
アーキテクチャ
コアのMCP9808ライブラリは再利用可能なUWPコンポーネント。クライアントアプリではViewとViewModelをペアリングし、3つのリポジトリが設定、デバッグログ、センサーデータを処理。Mcp9808TemperatureRepository は読み取り値が変化したときのみ温度変更イベントを発行。バックグラウンドサービスがテレメトリ、タイマー、アラートピン監視、LED制御、プッシュボタン処理、通知リレー、デバッグログを担当。
テレメトリサービス
温度変更を監視し、メッセージをAzure Service Bus Event Hubに転送。
タイマーサービス
500msティックを発行。UI時刻表示とセンサーポーリング(1秒間隔)に使用。
アラートピン監視サービス
MCP9808アラートピンのGPIO変更を検知し、イベントを発行。
LEDサービス
温度アラートに基づいてLEDを制御。
プッシュボタン監視サービス
GPIOプッシュボタンによる手動アラートリセットを処理。
通知リレーサービス
内部イベントをSignalRメッセージにマッピングし、アプリ間通信を実現。
デバッグコンソールサービス
デバッグイベントを収集し、UIに公開。
アプリケーション初期化
アプリは StartPage を起動し、メインビューへナビゲートする前にサービスをブートストラップ。
セットアップ手順
回路要件
- 大型ハンダレスブレッドボード(Vilros T字型コブラー推奨)
- MCP9808ブレークアウト(Adafruit)
- LED 4個、220Ω抵抗、10kΩプルアップ抵抗、モーメンタリプッシュボタン
組み立て
- LEDをGPIO 18(青)、23(緑)、12(赤)、16(黄)に220Ω抵抗経由で3.3Vに接続
- MCP9808:VDD→3.3V、GND→GND、SCL→GPIO 5、SDA→GPIO 3、ALERT→GPIO 6、10kΩプルアップを3.3Vに接続
- プッシュボタン:片側をGPIO 5、もう片側をGND、10kΩプルアップを3.3Vに接続
完成したブレッドボードの写真は下部ギャラリーを参照。
Microsoft Azureの要件
azure.com で無料Azureアカウント(200ドルクレジット)を作成。portal.azure.com にサインイン。
Azure IoT Hubのセットアップ
- 新規 → Internet of Things → IoT Hub
- 一意の名前、サブスクリプション、リソースグループ(新規作成)、場所(同一リージョン)
- 価格ティア:F1 Free(アカウントあたり1つの無料ティアのみ)
- デプロイ完了まで待機、ハブ概要を確認
デバイスの作成
- GitHubからAzure IoT SDK for C#をダウンロードし、Visual StudioでDeviceExplorerを開く
- IoT Hub接続文字列を貼り付け(ハブ > 共有アクセスポリシー > iothubowner)
- デバイス作成(例:TemperatureDevice1)、キーは自動生成
Azure SQL Databaseのセットアップ
- SQL Databases → 追加 → 名前:SensorTelemetry
- 既存リソースグループ使用、新規サーバー作成(一意の名前、管理者ユーザー/パスワード、Basicティア、同一リージョン)
- ファイアウォールで自分のIPを許可
データベーステーブルの作成
- Visual StudioのSQL ServerオブジェクトエクスプローラーでAzure SQLサーバーに接続
- 提供されるCREATE TABLEスクリプトを実行し、
SensorReadingsテーブルを作成
App Service Plan & Mobile Appの作成
- App Service plans → 新規、名前、既存リソースグループ、場所、BasicティアB1
- 新規 → Web+Mobile → Mobile App、名前、サブスクリプション、既存リソースグループ、選択したApp Service plan
Azure Stream Analyticsのセットアップ
- 新規 → Data + Analytics → Stream Analytics Job
- 入力をIoT Hub、出力をAzure SQLテーブルに設定
- クエリ:
SELECT [TimestampUtc], Source, Temperature, IsCritical, IsAboveUpperThreshold, IsBelowLowerThreshold INTO [YourOutputAlias] FROM [YourInputAlias]; - ジョブを開始
ソフトウェアの構成
リポジトリリンクからソースをダウンロードし、Visual Studioでソリューションを開く。
モバイルアプリの発行
- Webプロジェクトを右クリック → 発行 → Microsoft Azure App Service → 自分のApp Serviceを選択
- Azure SQL接続文字列(ADO.NET)をコピーし、プロジェクトの
MS_TableConnectionStringに貼り付け、ユーザー名/パスワードを更新 - 発行。Webサイトが自動的に起動
IoT Hub認証情報の入力
- UWPプロジェクトの
App.xamlで、{YOUR CONNECTION STRING HERE}をDevice Explorerから取得したデバイス接続文字列に置換 {YOUR DEVICE ID HERE}を作成したデバイスIDに置換
モバイルアプリURLの入力
UnityConfiguration.csで、App Service URL(Azureポータルからコピー)を{YOUR MOBILE SERVICES URL HERE}に貼り付け
詳細な手順については、完全なSensor Telemetry 2.0.1ドキュメントを参照してください。
製造プロセス
- Raspberry PiでTMP006赤外線温度センサーを使う – Pythonライブラリとセットアップガイド
- Raspberry PiでPIRモーションセンサーとLEDを制御
- Raspberry Piで低コスト土壌水分センサーを構築 - スマート灌漑に活用
- Raspberry PiでDS18B20温度センサーをテスト
- Raspberry Pi、MCP9808、InfluxDB、Grafanaで作る家庭温度モニター
- Sensor Telemetry 2.0.1:Azure IoT Hubによる高度な温度監視
- エモーションセンサー&EEG:リアルタイム感情検知のための低コストハードウェア
- UnifiedWater v1 - 完全なArduino水質センサーキット
- 酸素(O2)センサーを理解する:役割、配置、故障の兆候
- センサーキャリブレーション:定義、手法、主要応用
- 心拍センサー:仕組みと実用応用