ESP32で作るMatterスマートホーム対応の人感センサ付き照明コントローラ。
- 赤外線学習リモコン
- 照明のリモコンの赤外線データを録画して再生することで、照明のON/OFFを制御。
- 人感センサ
- 焦電型人感センサが人を検知すると自動的に照明をON、一定時間不検出だと照明をOFFに制御。
- 照度センサ
- 日中の明るい環境では照度センサにより自動照明ONを無効化するオプションを用意。
- Matter Endpoint
- スマートホームの規格Matterに対応。
- WiFi経由でGoogleHomeアプリやAmazonAlexaアプリなどから照明ON/OFFと人感センサON/OFFを操作可能。
- RGB LED
- LEDの色で動作状態をお知らせ。
- 物理ボタン
- 基板上のボタンを押して直接照明をON/OFF。
- リモコン連携
- リモコンの信号を受光して照明のON/OFF状態を同期。
- リモコンのボタンを複数回押して人感センサON/OFFを操作。
- Matterデバイス登録
- Amazon Alexa/Google HomeアプリからMatterデバイスの追加を行う。
- QRコード: https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT:Y.K9042C00KA0648G00
- ペアリングコード: 34970112332
- Alexaアプリはなぜか2つ以上のデバイスがうまく追加できなかったので、GoogleHomeアプリ推奨。GoogleHomeでデバイスを追加してからAlexaにデバイスを共有すればAlexaにも設定できる。
- Matterの製品登録していないので、認証されていないデバイスと警告が出るが続行する。
- Matterには下記3つのデバイスが追加されるので、適当にの名前変更と部屋登録を行う。
照明デバイス
: 照明のON/OFFスイッチ。「リビングのライト」などの名前にしておくとよい。プラグデバイス
: 人感センサのON/OFFスイッチ。プラグの種類は一般のプラグに設定しておく。また、人感センサという名前にすると「アレクサ、人感センサをオンにして」と操作できる。端末デバイス
: 自動的に追加されるが特に使用しない。
- Amazon Alexa/Google HomeアプリからMatterデバイスの追加を行う。
- 赤外線データ登録
照明ON/OFFの赤外線リモコンデータの登録を行う。- シリアルコンソールでコマンド
record on
を送信してから、照明リモコンのONボタン
を押す。 - シリアルコンソールでコマンド
record off
を送信してから、照明リモコンのOFFボタン
を押す。
- シリアルコンソールでコマンド
- 照度センサの設定 (デフォルトは照度センサON)
- 照度センサを使用する場合はシリアルコンソールでコマンド
ambient on
を送信する。 - 照度センサを使用しない場合はシリアルコンソールでコマンド
ambient off
を送信する。
- 照度センサを使用する場合はシリアルコンソールでコマンド
- 自動照明OFFのタイムアウト設定 (デフォルトは300秒(=5分))
人が検出されなかったときに自動で照明をOFFにするタイムアウトを設定。- シリアルコンソールでコマンド
timeout <秒数>
を送信する。 - 現在の値はコマンド
help
で確認できる。 - あまり短くしすぎると、動いていないだけで照明が消えてしまう。
- シリアルコンソールでコマンド
下図参照。
- 人感センサによる自動制御
- 人感センサが有効な場合、人を検出すると照明がONになり、一定時間(デフォルトは5分)非検出だと照明がOFFになる。
- Matter経由での制御
- Matterには「照明デバイス」と「プラグデバイス」が追加され、それぞれ照明ON/OFFと人感センサON/OFFを操作できる。
- 照明ON/OFFと人感センサON/OFFの連動
- 在室(人感センサ検出)中にMatterから照明をOFFにすると、人感センサは自動的にOFFになる(即時に照明がONになるのを防ぐため)。
- 在室(人感センサ検出)中にMatterから照明をONにすると、人感センサは自動的にONになる(人感センサがOFFだとそのまま外出した際につきっぱなしになるため)。
- 不在(人感センサ非検出)中にMatterから照明をONにすると、人感センサは自動的にOFFになる(即時に照明がOFFになるのを防ぐため)。
- 不在(人感センサ非検出)中にMatterから照明をOFFにすると、人感センサは自動的にONになる(人感センサのOFFになると入出したときにONにならないため)。
- 照度センサ
- 照度センサがONの場合、明るいときは人感センサによる照明ONが一時的に無効となる。なお、不在による自動照明OFFは常に有効。また、Matterデバイスによる照明ONは可能。
- 物理ボタン
- ボタンを押すたびに照明のON/OFFをトグルする。
- ボタンを10秒長押しするとMatterを初期化 (Commissioning Modeに) する。
- 赤外線リモコン連携
- 照明OFF状態でリモコンのONボタンを押すと、照明がON状態になる(人感センサは上記の連動動作)。
- 照明ON状態でリモコンのOFFボタンを押すと、照明がOFF状態になる(人感センサは上記の連動動作)。
- 照明ON状態でリモコンのONボタンを押すと、人感センサがトグルする。
- 照明OFF状態でリモコンのOFFボタンを押すと、人感センサがトグルする。
LED | 人感センサ連動 | 意味 |
---|---|---|
白 | ON | 通常の人感センサ連動状態(人感非検出) |
青 | ON | 通常の人感センサ連動状態(人感検出中) |
消 | OFF | 人感センサ無効状態(人感スイッチがOFF) |
黄 | OFF | 明るいため人感センサ無効の状態(人感非検出) |
青緑 | OFF | 明るいため人感センサ無効の状態(人感検出中) |
桃 | - | Matter 接続待機 (Commissioning) 状態 |
赤 | - | ネットワークエラー |
緑 (点滅) | - | 赤外線の送受信 |
- 対応マイコン一覧
- ESP32-C6
- Seeed Studio XIAO ESP32C6
- ESP32-S3
- Seeed Studio XIAO ESP32S3
- ESP32-C6
- 開発環境
- ESP-IDF v5.4.2
- ESP-Matter v1.4
- ESP32-Arduino v3.2.1
とりあえずミニブレッドボードで製作。
- ピンアサインはソースコード app_config.h を参照。
- 赤外線受光モジュール: OSRB38C9AA
- 38kHzの一般的なもの。GPIOに接続するだけ。
- 赤外線LED: OSI5FU3A11C
- 2つ直列、FET(2N7000など)で制御する。
- 参考: IR-Station/how-to-make.md | GitHub
- 人感センサ: EKMC1607111/EKMC1601111
- GPIOに接続するだけ。
- 照度センサ: NJL7502L
- 100kΩ程度でGNDにつなぐ(感度調整のため可変抵抗でもよい)。
- 照度センサを使用しない場合はつながなくてよい。
- マイコン内蔵RGB LED: SK6812
- DevKit上に実装されているものを使用。
- ESP-IDFのドキュメントに従って開発環境を構築する (Linux推奨)。
- 環境構築のしやすさ、ビルド時間などからLinux推奨
- 現時点ではPlatformIOには非対応(ESP32-Arduino Matterライブラリが非対応なため)
- ESP32のUSBポート(非UARTポート)とPCを接続して下記コマンドを実行する。
# at ESP-IDF v5.4.2 Environment
source $IDF_PATH/export.sh
# go to firmware directory
cd firmware
# select target
idf set-target esp32c6 # ESP32-C6 の場合
idf set-target esp32s3 # ESP32-S3 の場合
# build
idf build
# flash and monitor
idf flash monitor
- LGPL v2.1 (Arduinoライブラリと同じライセンス)