Video
1. プロジェクト概要
目的とコンセプト
本プロジェクトは、Waveshare製「ESP32-C6-GEEK」をプラットフォームとし、Matterプロトコルを介した「仮想スマートデバイス」の実装を目的とする。最大の特徴は、実機のPCハードウェアを介在させることなく、内蔵LCD上でON/OFF状態のアニメーション及び動作検証を完結できる点にある。これにより、Apple Home、Google Home、Amazon Alexa等の主要スマートホームエコシステムとの相互運用性を、単一のデバイスで安全かつ精密に検証することが可能である。
主要機能の要約
- Matterプロトコルによるマルチプラットフォーム操作: 特定のベンダーに依存せず、多様なエコシステムからシームレスな操作を実現。
- LCDによるリアルタイム・ステータスアニメーション: デバイスの動態を20fpsの低遅延グラフィックスで描画し、視覚的なフィードバックを提供。
- インテリジェント・バックライト調光: 効率的な電力管理とパネルの保護を目的とした、イベント連動型の自動減光ロジック。
- 仮想モードと実機モードのシームレスな切り替え: ソフトウェア定義の変更により、シミュレーション環境から物理的なPC電源制御へと即座に移行可能。
2. 5層のシステム階層構造
本システムは、ハードウェアの抽象化とプロトコルスタックの分離を目的とした、以下の5層のアーキテクチャで構成される。
-
物理レイヤー (Hardware Layer)
メインマイコンとしてESP32-C6-GEEKを採用し、135×240pxの解像度を持つST7789内蔵LCDを出力インターフェースとする。なお、実機モード(物理制御)運用時には、基板外部に別途フォトカプラ回路の接続を必須とする。
-
ドライバ・抽象化レイヤー (Driver/Abstraction Layer)
高速描画ライブラリ「LovyanGFX」を導入し、ST7789との通信にはSPIバス及びDMA(Direct Memory Access)を適用。これにより、アプリケーション層が要求する20fpsの描画パフォーマンスを担保する。また、実機モード時にはGPIO 20を介した物理スイッチ制御インターフェースを提供する。
-
通信・プロトコルレイヤー (Communication Layer)
WiFi接続を基盤としたMatterプロトコルスタックが機能する階層。上位のスマートホームアプリ(Apple Home, Google Home等)との安全なペアリングおよびコマンド通信を制御する。
-
システムサービスレイヤー (System Service Layer)
無線経由での機能拡張を可能にするOTA(Over-the-Air)アップデート機能と、バックライトの輝度を動的に管理する調光ロジックを提供する。後述する32秒間の調光タイムラインはこの層で管理される。
-
アプリケーションレイヤー (Application Layer)
最上位層として、20fpsのアニメーション描画エンジンの駆動、デバイスのON/OFF状態の同期、および仮想/実機のロジック切り替えを司る。
3. 技術仕様
ハードウェア仕様表
| 部品 | 型番 |
|---|---|
| マイコン | Waveshare ESP32-C6-GEEK |
| LCD | ST7789(基板内蔵 135×240px) |
ソフトウェア要件表
| ツール | バージョン |
|---|---|
| ESP-IDF | v5.4.1 |
| ESP-Matter | 最新(GN 必須) |
| Python | 3.12.3 以上 |
| LovyanGFX | components/ に同梱 |
4. 開発のポイント
1. Matter操作とペアリング
本デバイスはMatter標準に基づき、初期設定および操作を行う。
- マニュアルペアリングコード: QRコードが利用できない環境を想定し、11桁のコード「06242023267」を手動入力に使用する。
- 準備完了の識別: 起動後、LCDフッター領域にIPアドレスが表示される。これが表示された時点が、Matterのコミッショニング(ペアリング)準備が整ったシグナルとなる。詳細なログはシリアルモニター上の「Manual pairing code:」行で確認可能。
2. LCDアニメーション表示
ユーザーエクスペリエンス向上のため、DMA駆動による20fpsの描画を実現している。
- 表示項目: デバイスのON/OFF状態、WiFi接続状況、およびフッター部への取得済みIPアドレス常時表示。
- 視認性: 通信状況とデバイス状態を一目で把握できるインターフェース設計を採用。
3. バックライト自動調光ロジック
LCDの長寿命化と消費電力の最適化のため、以下の32秒間のタイムラインに基づいた調光制御を実装している。
- 全輝度維持フェーズ (0–10s): 操作入力等のイベント発生から10秒間は100%の輝度を維持。
- 減光フェーズ (10–32s): 続く22秒間をかけて線形的に輝度を落とし、最終的に消灯(減光)状態へ移行。
4. 仮想モードと実機モードの切り替え機能
main/pc_control.h 内のコンパイルスイッチにより、動作モードを定義する。
- 仮想モード:
#define PC_VIRTUAL_MODE 1— ソフトウェア上のシミュレーションのみを行い、LCDアニメーションで動作を完結させる。 - 実機モード:
#define PC_VIRTUAL_MODE 0— LCD表示と連動し、GPIO 20からフォトカプラ回路を介して実際のPC電源ボタンを物理的に制御する。※このモードには外部回路の構築が別途必要。
5. アーキテクチャの確認事項
主要設定ファイル
開発者は、必要に応じて以下のファイルを参照・編集すること。
main/wifi_creds.h: 接続先WiFiのSSIDおよびパスワードの定義。main/pc_control.h: 動作モード(PC_VIRTUAL_MODE)の選択。main/lcd_display.cpp: 調光タイミングやアニメーションパラメータの制御。
ライセンス形態
- プロジェクト本体: Apache License 2.0(ESP-IDF, ESP-Matterを含む)。
- LovyanGFX: MIT License。
ビルド・デプロイフロー
- 環境構築: ESP-IDFおよびESP-Matterの環境をセットアップする。ESP-MatterのビルドにはGNが必要となる。
- 設定反映:
wifi_creds.hにネットワーク情報を記述する。 - ビルド実行:
idf.py buildを実行。GNを含む依存関係が正しく解決されていることを確認する。 - フラッシュ:
idf.py flashを用いてデバイスへ書き込み、LCDフッターにIPアドレスが表示されることで動作開始を確認する。