ファームウェア拡張
対応 Issue: #2 工場ファーム拡張基盤
方針: 公式 OSS ファームをフォーク拡張
m5stack/UnitCamS3-UserDemo unitcams3-5mp を起点にフォークし、必要な API・BLE・安定化を追加する。ゼロから書かない。
- 技術スタック: ESP-IDF v5.1.4 / ESPAsyncWebServer / esp32-camera コンポーネント
- API 実装は
main/hal_unitcam_s3_5mp/servers/apis/に分離(api_camera/api_system/api_poster/api_mic)
既存 REST API(流用対象)
工場ファームが既に公開している API。PWA からそのまま利用できる。
カメラ
| メソッド | エンドポイント | 機能 |
|---|---|---|
| GET | /api/v1/stream | MJPEG ライブ配信(multipart/x-mixed-replace) |
| GET | /api/v1/capture | JPEG 静止画 |
| GET | /api/v1/bmp | BMP 静止画 |
| GET | /api/v1/control?var={名}&val={値} | センサー制御(下記) |
control で設定可能な主な項目: framesize, quality, brightness, contrast, saturation, sharpness, hmirror, vflip, whitebal, awb_gain, gain_ctrl, exposure_ctrl, aec_value, special_effect, wb_mode, ae_level, denoise, lenc ほか。
システム
| メソッド | エンドポイント | 機能 |
|---|---|---|
| GET | /api/v1/get_mac | MAC アドレス |
| GET | /api/v1/check_sdcard | microSD 情報 |
| GET | /api/v1/led_on / led_off | LED 制御 |
| GET | /api/v1/get_config | 設定取得(LittleFS の config.json) |
| POST | /api/v1/set_config | 設定保存(JSON) |
| GET | /api/v1/reset_config | 設定リセット |
| GET | /api/v1/get_wifi_list | WiFi スキャン(STA 設定用) |
ポスター(EzData) / マイク
| メソッド | エンドポイント | 機能 |
|---|---|---|
| GET | /api/v1/start_poster | EzData クラウドへインターバルアップロード開始 |
| GET | /api/v1/mic_start / mic_is_recording | マイク録音 |
| GET | /wav/rec.wav | 直近の録音取得 |
追加実装(独自)
| API / 機能 | 用途 | フェーズ |
|---|---|---|
/api/v1/interval/start|stop|status | 独自インターバラ(保存先・上限を指定) | 独自 |
/api/v1/files | microSD /captured/ のファイル列挙 | 独自 |
| WiFi 再接続ウォッチドッグ | 切断検知 → 再接続(既知の復帰不能対策) | Phase 1 |
| BLE GATT 制御サービス | モード / 開始停止 / ステータス Notify(NimBLE) | Phase 2 |
| WiFi AP オンデマンド起動/停止 | 転送時のみ AP を上げる省電力動作 | Phase 2 |
| 電源管理(light-sleep) | バッテリー運用 | Phase 2 |
ビルド・フラッシュ
bash
# 依存取得
python ./fetch_repos.py
# IDF ビルド
cd platforms/unitcam_s3_5mp
idf.py build
# フラッシュ
idf.py -p <YourPort> flash -b 1500000
# AssetPool(Web UI アセット)書き込み
parttool.py --port <YourPort> write_partition \
--partition-name=assetpool --input "path/to/AssetPool.bin"既知のハマりどころ
| 症状 | 原因 | 対応 |
|---|---|---|
| SD 初期化エラー | Image Poster と microSD 保存の同時実行 | 排他制御 / api_poster.cpp 該当処理を調整 |
| WiFi 切断後に復帰しない | 長期運用・ローミング起因 | 再接続ウォッチドッグ |
| microSD が見えない | 物理スロットの有無 | 実機で check_sdcard を確認 |
ライセンス: 公式リポジトリのライセンスを確認のうえフォークし、由来を明記する。