Raspberry Pi 2とWindows 10 IoT Coreで構築するホームオートメーション完全ガイド
主要コンポーネント
| 部品 | 数量 | 仕様・備考 |
|---|---|---|
| Raspberry Pi 2 Model B | 1 | コントローラ本体 |
| HSRel5 - I²C 5リレーボード | 1 | PCF8574ベース、5リレー+3GPIO、DINレールマウント可 |
| HSRel8(+8) - I²C 8リレーボード | 1 | MAX7311ベース、8リレー+8GPIO |
| I2C-Port 16 HS - 16GPIO拡張ボード | 1 | MAX7311ベース、入力用 |
| DR-60-12 12V/54W DINレール電源 | 1 | リレー駆動用12V供給 |
| DR-30-5 5V/3A DINレール電源 | 1 | ロジック系5V供給 |
| Raspberry Pi用プロトタイピングシールド | 1 | ステータスLED、割り込み入力保護、ネジ端子台搭載 |
| I2Cバッファ HS (P82B96) | 1 | レベルシフト+バス延長用、プルアップ内蔵 |
| Arduino Nano R3 | 1 | DHT22センサブリッジ+433MHz送信用 |
| 433MHz 送受信モジュール | 1組 | ワイヤレスリレー対応用 |
開発環境
- Microsoft Visual Studio 2015(UWPアプリ開発)
- Arduino IDE(センサブリッジ用ファームウェア開発)
プロジェクト概要
自宅リノベーションに合わせて3年間かけて開発したホームオートメーションシステムです。Windows 10 IoT Coreを搭載したRaspberry Pi 2を中核とし、I²Cバスで配電盤内のリレーボード・入力ボードを制御します。Webアプリ(AngularJS+Bootstrap)で全デバイスを操作・監視可能。Azure Event Hubs連携でログ収集・Power BI可視化も実現しています。

対応入力デバイス
- 押しボタン(BUSCH-JAEGER 2020US)
- 人感センサ(Abus 360° BW8085)
- 室温・湿度(自作DHT22デバイス×10箇所)
- 窓開閉状態(Honeywell Slimlineリードスイッチ)
- 日の出/日の入、外気温/湿度(OpenWeatherMap API取得)
対応出力デバイス
- シーリングライト(リレー制御、調光なし)
- コンセント(リレー制御)
- ロールスクリーン(上下2リレーで制御)
- シーリングファン(3段階風量、3リレー)
- 浴室換気扇(2段階、2リレー)
主な特長
- クロスプラットフォームWebアプリ(iOS/Android/Windows/Mac)で操作可能。設定はコントローラから動的取得
- 全イベントをAzure Event Hubsへ送信、またはCSVログ出力
- UDPベースのトレース機能でデバッグ・誤配線検出が容易
- カスタムアクチュエータドライバでハードウェア拡張可能
- 物理出力を論理グループ化(CombinedBinaryStateActuator)し、同時制御時の遅延を排除
- ステートマシンで複数段階制御(ファン風量、シーン/ムード設定)に対応
- 障害耐性設計:一部ボードが切り離されても他エリアは動作継続
- 433MHzワイヤレスリレーも統合制御可能
ハードウェアアーキテクチャ
コンセプト:配電盤集中制御
全ての照明・コンセント・シャッター等を配電盤内のリレーで制御します。各スイッチ・センサ・負荷は専用ケーブルで配電盤まで引き回すため、KNX/EIB等の専用バスは不要です。※日本国内では電気工事士法に基づき、有資格者による施工が必要です。
新設配電盤
2階建て住宅全体をカバーする新設配電盤に、全I²Cボードを収納。

長距離I²Cバスの設計ノウハウ
I²Cは本来短距離用ですが、以下の工夫で数十メートルまで延長可能です:
- バス電圧を5Vで駆動(Piは3.3VなのでP82B96レベルシフタで変換)
- CAT7ツイストペアケーブル使用。SDA-GND、SCL-GNDの組み合わせで2ペア使用(SDA-SCLを1ペアにしない)
- より線ケーブル採用で配線しやすさと信頼性を両立
- バス末端に10kΩプルアップ抵抗(SDA/SCL各々)
- バス速度を100kbps(標準モード)に固定
- 中継点にP82B96バッファを配置し、物理セグメント分離+駆動力強化
リレーボード(出力)
独CCTools製ボードを採用。HSRel5はPCF8574(8bit拡張、アドレス8種)で5リレー+3GPIO。リレー駆動にはULN2803とインバータを介在(電源投入時の誤動作防止)。HSRel8はMAX7311(16bit拡張)で8リレー+8GPIO、インバータ不要。アドレス制限対策としてPCF8574A(別アドレス8種)併用で最大16枚接続可能。

ポートエキスパンダボード(入力)
I2C-Port16 HS(MAX7311ベース)にプルアップ抵抗(5V/10kΩ)とセラミックコンデンサ(100nF、グリッチフィルタ)を全ポートに実装。ボタン・人感センサ・リードスイッチは各々専用ケーブル(CAT7、シールドをPE接地)で配電盤まで引き込み。全ボード共通の割り込み線をPiのGPIOに接続し、状態変化時のみI²Cポーリングする割り込み駆動設計。

Raspberry Pi 2マウント
専用ケースで配電盤に固定。プロトタイピングシールドにステータスLED、割り込み入力(プルアップ10kΩ+保護1kΩ+100nFフィルタ)、I²C用ネジ端子台を実装。

温湿度センサネットワーク(DHT22 × 10)
DHT22は独自プロトコルでアドレッシング非対応のため、Arduino NanoをI²Cスレーブとして配置し、全センサを2.5秒周期で読み取りキャッシュ。PiからはポートID指定で値を取得(レジスタ読み出し風インターフェース)。

Webアプリでは温度・湿度を別ビューで表示。湿度アイコンの色でカビリスクを表示(60%未満緑、70%未満黄、70%以上赤)。

ハードウェア構成図

433MHzワイヤレスリレー統合
DHT22ブリッジ兼用のArduino NanoにFS1000A送信モジュールを搭載、12V駆動で到達距離確保。受信側は専用リレー。元のリモコン操作で状態がズレる問題は、ソフトウェア側で5秒ごとに強制同期することで解決。

ユニークな応用例:デジタル猫トイレ換気
窓のない収納室の猫トイレを未使用煙突ダクトに接続、ファンをリレー制御。人感センサで猫検知→数分間ファン稼働。Webアプリから手動操作も可能。ログ解析で使用頻度を把握し、掃除タイミング最適化に活用。

ソフトウェアアーキテクチャ
移行の経緯
元はGHI Electronics G120(.NET Micro Framework 4.3)で稼働していましたが、性能限界(120MHz/16MB/インタプリタ)で未実装機能が多かったため、Windows 10 IoT Coreバックグラウンドタスクへ移植し、Azure連携等を追加しました。
ソリューション構成(Visual Studio 2015)
- App:Webアプリ(AngularJS/jQuery/Bootstrap)
- Controllers:Pi起動プロジェクト(IoT Background Task)、家屋設定
- SDK:共有ライブラリ群

主要コンポーネント
CK.HomeAutomation.TraceViewer
UDPブロードキャストで飛んでくるトレースメッセージをコンソール表示。ファイアウォールでポート(例:19227)開放必要。デバッグ・誤配線特定に必須。

CK.HomeAutomation.Networking
独自HTTPサーバ実装。Webアプリ配信、JSONステータス提供、制御コマンド受信。Webアプリ本体はSMB経由でPiのローカルフォルダへ手動配置。
CK.HomeAutomation.Controller.*
各プロジェクトがIoTバックグラウンドタスクとして実装。実運用中の「Cellar」(庭・駐車場照明担当)以外のコントローラプロジェクトを同梱。空のテンプレート「CK.HomeAutomation.Controller.Empty」も用意。
事前準備:
- Pi 2へのWindows 10 IoT Coreインストール
- PowerShellリモートセッション接続
- UWPアプリの展開
セットアップ用PowerShellスクリプト(SetupRaspberryPi.ps1)同梱。IPアドレス等は環境に合わせて修正必須。
CK.HomeAutomation.Actuators
最高レベルの抽象化層。家・部屋・アクチュエータ(ボタン、ライト、コンセント等)を実装。フルーエントAPIで部屋構成を記述可能。

アクチュエータタイプ
- MotionDetector:人感検知で
MotionDetected、検知終了でDetectionCompletedイベント発火。Webアプリで無効化可能。 - Button:短押し(<1.5秒)で
PressedShort、長押し(>1.5秒)でPressedLong。Webアプリ専用のVirtualButtonも実装。 - BinaryStateOutput (Socket/Lamp):ON/OFFのみの基底クラス。トグル、状態更新メソッド提供。ボタンと連携可能。
- CombinedBinaryStateActuator:複数物理出力を1論理出力として統合。内部変更追跡でI²C書き込み遅延を吸収し、同時動作を実現。
- StateMachine:複数状態(ファン風量、シーン等)を定義。
WithTurnOffIfStateIsAppliedTwiceで同一トリガー再実行時にOFFへ遷移可能。 - TemperatureSensor / HumiditySensor:I²Cセンサブリッジ経由で10秒ごとに自動ポーリング。
オートメーション機能
「ホームオートメーション ≠ ホームコントロール」。自動化ルールが核心です。
- AutomaticTurnOnAndOffAutomation:トリガー(ボタン/人感)でON、指定時間後に自動OFF。時間帯制限(日中のみ/夜間のみ)対応。
- AutomaticRollerShutterAutomation:日の出/日の入で自動開閉、外気温超過時(例:28℃以上)に自動閉鎖(屋根窓対策)。移動時間ベースで位置推定。
- AutomaticConditionalOnAutomation:条件一致中のみON(庭園ライトを夜間のみ点灯等)。複数OFF時間帯指定可。
- 汎用オートメーション/条件フレームワーク:トリガー(ボタン、人感、インターバル、コード)発火時に条件評価、アクション実行。複雑な条件組み合わせに対応。

バーチャル気象ステーション
OpenWeatherMap APIを60秒ごとにポーリングし、天気・日の出入・外気温湿度を提供。IWeatherStationインターフェースで実装されており、将来的に実機気象ステーションへ置換可能。
テレメトリ・分析基盤
- CSVログ:全状態変化をパッケージのLocalStateフォルダに出力。SMBでダウンロード可能。
- Azure Event Hubs連携:状態変化・センサ値・ボタン押下・人感検知をイベントとして送信。Stream AnalyticsジョブでAzure SQL Databaseへ蓄積、Power BIでレポート作成済み。

Webアプリ
AngularJS/jQuery/Bootstrap製。ルーム構成をコントローラから取得し動的生成。Configuration.jsでIPアドレス・翻訳・アイコンカスタマイズ設定。ローカルファイルとしても、Webサーバ(筆者はBanana Pi + nginx)経由でも動作。iOSホーム画面追加はWebサーバホスト必須。

常設ターミナル
リビングに初代iPad 3を壁掛け設置、Webアプリをフルスクリーン表示で常時操作可能。

今後の展開予定
- IRベースアクチュエータ対応(RGB LEDストリップ等)
- XML設定ファイル対応(コードベース設定と併用)
- タブレット専用レイアウトWebアプリ
- 窓開閉リードスイッチのWebアプリ表示対応
- 他社製デバイスドライバライブラリ充実
- 暖房バルブ制御(出力・温度読み取りは実装済み)
- 防犯アラーム(人感/窓開放通知)
- 実機気象ステーション統合
- 雨検知時の窓開放シャッター自動閉鎖
- 単体テスト充実、GitHub Wikiドキュメント整備
- アニメーション機能完全移植(NETMF版には実装済み)
ハードウェア、ソフトウェア、ドキュメント等あらゆる貢献を歓迎します。ご連絡ください。
リポジトリ
完全なソリューション(SDK、Webアプリ、個人設定含む)はGitHubで公開中:
https://github.com/chkr1011/CK.HomeAutomation.git
回路図(Fritzing)
- 433MHzリモコンコード読み取り用回路
- 各室DHT22センサボード
- Pi用シールド(ステータスLED、I²C端子台、割り込み入力)
- 433MHz送信機内蔵温湿度センサ(家庭に1台で全ワイヤレスリレー制御)
製造プロセス
- 5ドルI2C温度センサーで作るRaspberry Pi温度ロガー
- Raspberry Pi 3とPubNubでリモート気象監視
- TI SensorTagをNode-RED経由でBlynkと統合 – Raspberry Pi Zero編
- Raspberry PiでPIRモーションセンサーとLEDを制御
- Raspberry Piダッシュボードで家庭の温度を監視する
- Windows 10 IoT Core on Raspberry Piで心拍パルスを読み取る - ステップバイステップガイド
- Raspberry Piで構築するホームオートメーションシステム:リモート制御対応
- Raspberry Pi 2からAzure Event HubsへAdafruit 10DOF IMUデータを送信(Windows 10 IoT Core)
- Windows 10 IoT CoreとSHT15センサーで高精度な温湿度モニタリング
- Raspberry Pi 3 Model B+へのWindows 10 IoT Coreインストール:ステップバイステップガイド
- Bridge Shield でスマートロボットを構築:Raspberry Pi と Arduino の統合