Skip to content

v0.3.1 — Power Saving and USB Serial Stability

Choose a tag to compare

@timit3-github timit3-github released this 14 Oct 14:21
· 1 commit to main since this release

M5Stack StopWatchのR1互換リモコンに省電力動作を追加しました。
無操作60秒後にタッチ取得を停止し、ボタンで操作を再開します。USB接続中のシリアルを維持するため、
PM1の入力電圧でLight-sleepを抑止し、USB抜去後は省電力へ戻ります。

プロジェクト版は0.3.1です。アプリへ通知するR1_APP_VERSION=2.9.9.9999とは別の番号です。
R1_APP_VERSIONは互換用の通知文字列で、純正R1ファームウェアを搭載している意味ではありません。

主な変更

  • DFS 40~160MHz、Bluetooth Modem-sleep、自動Light-sleepを採用。
  • Evenアプリの更新要求を回避するため、R1_APP_VERSIONの既定値を動作確認済みの2.9.9.9999へ変更。
  • 無操作60秒で操作待機へ移行。最初のG1/G2押下で復帰と操作を兼ね、タッチ取得を再開。
  • 待機中のホスト周期処理を1秒、バッテリー電圧取得を30秒へ変更。VINは1秒周期で取得。
  • USB接続中はVINによるNO_LIGHT_SLEEPロックを保持し、抜去確認後に解除。再接続時は再取得。
  • USBコンソールの受信を割り込み方式へ変更し、入力待ちのポーリングを削減。
  • 検証モード・切り替えdefine・VIN検証履歴を削除し、検証済みの動作設定を通常動作に固定。
  • statusに電源・VIN状態と接続診断を追加。pmで電源管理ロックと滞在時間を表示。

通常のG1/G2・タッチ操作と500ms周期のup繰り返し、BLE/GATT配置は維持しています。
コンソール入力はEnterで実行します。起動時のstatus/auto入力は不要です。

検証結果

作者実機の環境はM5Stack StopWatch、ESP-IDF 5.5.1、Evenアプリ2.3.2、G2ファームウェア2.3.2.14です。

同じ設定のリリース前構成で、無操作60秒後のタッチ停止、ボタン復帰、待機からの最初の二度押しを確認しました。
USB接続中の10分以上の待機で自然切断がなく、抜去後のLight-sleepと再接続時のロック再取得を確認しました。

Evenアプリの低電力モードOFF、G2を途中で充電しない長時間試験では、開始・終了のuptime差で約21時間5分の稼働を確認しました。
G2切断・NimBLEホストリセットは0で、終了時も再接続操作なしでボタン・タッチからG2を操作できました。
試験区間のLight-sleep滞在率は約72%でした。全リンク切断は4回、待機復帰は6回増加しており、完全無操作の試験とは区別します。
開始・終了時のUSB接続での取得時間を含み、稼働時間を秒単位で測定した結果ではありません。

電圧推定残量のEvenアプリ表示と、G2ダッシュボードの電池アイコンが残量に応じて変わることを確認しました。
残量精度、充電中・満充電状態の判定は未確認・未実装です。
実機試験のR1_APP_VERSIONは既定値と同じ2.9.9.9999です。通知文字列が純正R1の現行版より古い場合は、アプリが更新を求めることがあります。
通知文字列の調整方法はREADMEを参照してください。

公開用コードでwire、legacy、inputs、battery、touch、idle、usb_powerの全ホストテストが通過しました。
WSL2上のESP-IDF 5.5.1で、新規sdkconfigからのESP32-S3ビルドも成功しています。
検証用コードを整理したv0.3.1そのものの実機確認は未実施です。
詳細は検証範囲と
省電力動作を参照してください。

既知の制限

  • 再起動後、G2の再接続に数分かかる事例があります。原因と長期安定性は未確定です。
  • 完全無操作での長時間試験、復帰直後の全操作、繰り返し接続と長期安定性は未確認です。
  • タッチ取得停止はタッチコントローラーの電源遮断ではありません。周辺回路の消費電力は残ります。
  • バッテリー残量は電圧推定です。平均電流や残り稼働時間の実測値ではありません。
  • ディスプレイ描画、生体センサー、DFUは未実装です。
  • 純正R1とiPhoneアプリの開発環境は使用していません。他のアプリ/G2バージョンとの互換性は未検証です。

配布と更新

ソースのみを配布します。ESP-IDF 5.5.1で、次の新しい設定を使ってビルドしてください。

idf.py -B build/release -D SDKCONFIG=build/release/sdkconfig -DIDF_TARGET=esp32s3 build
idf.py -B build/release -D SDKCONFIG=build/release/sdkconfig -p /dev/ttyACM0 flash
idf.py -B build/release -D SDKCONFIG=build/release/sdkconfig -p /dev/ttyACM0 monitor

ポートは実機に合わせて変更します。WindowsではCOM5などです。
旧sdkconfigには必要な省電力設定が不足する場合があります。build/release/sdkconfigが既存の場合も、
ビルドディレクトリとSDKCONFIGを同じ新しい名前に変更して設定を生成してください。
通常の更新でNVS消去やペアリング解除は不要です。
ビルド手順を参照してください。

独自部分はBSL-1.0、MIT参照実装に基づくファイルはBSL-1.0 AND MITです。
LICENSE、NOTICE.md、LICENSES/をソースとともに保持してください。