Open1
M5Tab5-UserDemo 解析書

M5Tab5-UserDemo アーキテクチャ解析書
目次
プロジェクト概要
M5Tab5-UserDemoは、M5Stack Tab5デバイス用のユーザーデモアプリケーションです。デスクトップ(Linux/Windows/macOS)とESP32(Tab5)の両方の環境で動作するクロスプラットフォーム設計となっています。
主要技術スタック
- GUI: LVGL(Light and Versatile Graphics Library)
- フレームワーク: Mooncake(独自アプリケーションフレームワーク)
- UI Toolkit: smooth_ui_toolkit(アニメーション対応UIコンポーネント)
- ESP32: ESP-IDF v5.4.1
- デスクトップ: SDL2
- 言語: C++
アーキテクチャ構成
処理フロー
1. システム起動フロー
2. アプリケーションライフサイクル
HAL層設計
HAL(Hardware Abstraction Layer)は、プラットフォーム固有の機能を抽象化し、統一されたインターフェースを提供します。
HAL インターフェース構成
デバイス機能マッピング
機能カテゴリ | HalEsp32 (実装) | HalDesktop (シミュレーション) |
---|---|---|
Display | ILI9881制御 | SDL2ウィンドウ |
Touch | タッチパネル読取 | マウス入力 |
Power | INA226電力監視 | ランダム値生成 |
IMU | BMI270センサー | ランダム値生成 |
Audio | I2Sオーディオ | SDL2音声 |
Camera | CSI/DVPカメラ | 未実装 |
WiFi | ESP32 WiFi | 未実装 |
Storage | SD Card | ファイルシステム |
アプリケーション構成
主要アプリケーション
-
AppStartupAnim (
app/apps/app_startup_anim/
)- 起動時のアニメーション表示
- 一度実行後に自動終了
-
AppLauncher (
app/apps/app_launcher/
)- メインランチャーアプリケーション
- 各種機能テストパネルを統合
-
AppTemplate (
app/apps/app_template/
)- 新規アプリ開発用のテンプレート
AppLauncher パネル構成
パネル機能詳細
パネル | 主要機能 | HAL依存機能 |
---|---|---|
RTC | 日時表示、RTC設定 |
getRtcTime() , setRtcTime()
|
LCD Backlight | 輝度調整 | setDisplayBrightness() |
Speaker Volume | 音量調整 | setSpeakerVolume() |
Power Monitor | 電圧・電流・CPU温度表示 |
updatePowerMonitorData() , getCpuTemp()
|
IMU | 加速度・ジャイロ表示 | updateImuData() |
Switches | 電源管理、接続検知 |
setChargeEnable() , usbCDetect() など |
Power | 電源OFF、スリープ制御 |
powerOff() , sleepAndTouchWakeup() など |
Camera | カメラ映像表示 | startCameraCapture() |
Dual Mic | デュアルマイク録音テスト | startDualMicRecordTest() |
Headphone | ヘッドフォンマイクテスト | startHeadphoneMicRecordTest() |
SD Card | ファイル一覧表示 | scanSdCard() |
I2C Scan | I2Cデバイス検索 | i2cScan() |
GPIO Test | GPIO制御テスト | gpioSetLevel() |
Music | 音楽再生テスト | startPlayMusicTest() |
COM Monitor | シリアル通信監視 | uartMonitorSend() |
コンポーネント分析
1. Mooncakeフレームワーク
- アプリケーションのライフサイクル管理
- イベント駆動型アーキテクチャ
- アプリ間の状態管理
2. smooth_ui_toolkit
- LVGLベースのC++ラッパー
- アニメーション機能強化
- シグナル/スロット機能
3. 共有データ層 (Shared)
struct SharedData_t {
smooth_ui_toolkit::Signal<std::string> systemStateEvents;
smooth_ui_toolkit::Signal<std::string> inputEvents;
};
- システム状態イベント管理
- 入力イベント配信
- スレッドセーフなデータ共有
4. プラットフォーム固有コンポーネント
ESP32プラットフォーム
- BSP (Board Support Package): M5Stack Tab5固有の初期化
- 電力監視: INA226による電圧・電流測定
- IMU: BMI270による6軸センサーデータ
- RTC: RX8130リアルタイムクロック
- カメラ: ESP32カメラセンサー対応
- オーディオ: I2S音声入出力
デスクトッププラットフォーム
- SDL2: ウィンドウ管理、イベント処理
- シミュレーション: センサーデータの模擬生成
- ファイルシステム: ネイティブファイル操作
5. ビルドシステム
まとめ
M5Tab5-UserDemoは、以下の特徴を持つ優れたアーキテクチャ設計です:
- クロスプラットフォーム対応: HAL層によるハードウェア抽象化
- モジュラー設計: 機能別パネルの独立性
- フレームワーク活用: MooncakeとLVGLの効果的な組み合わせ
- 拡張性: 新規アプリ追加の容易さ
- 保守性: 明確な責任分離と依存関係
このアーキテクチャにより、ESP32とデスクトップの両環境で一貫した開発体験と実行環境を提供しています。