M5CapsuleでPower関連のAPIを呼んでみる
2024/7/2、情報の追加、間違いの修正
環境
M5Capsule
バッテリ駆動
PlatformIO Core 6.1.15, Home 3.4.4
platform
espressif32
board:
m5stack-stamps3
framework:
arduino
ライブラリ
m5stack/M5Unified@^0.1.16
M5Unifiedに便利そうな、Power関連のAPIがあるので、M5Capsuleでも使えるか試してみた。
バッテリ駆動状態なのか、外部電源供給状態なのか、を知りたいと考えている
結果
auto cfg = M5.config();
M5.begin(cfg);
M5.getBoard(); // 39=board_M5Capsule (board_t)
M5.Power.begin(); // 1 (bool) Was pmic obtained correctly?
M5.Power.getType(); // 1=pmic_adc (pmic_t)
M5.Power.getUsbOutput(); // 0 (bool)
M5.Power.getExtOutput(); // 0 (bool)
M5.Power.getUsbOutput(); // 0 (bool)
M5.Power.getBatteryVoltage(); // 266 (int16_t)
M5.Power.getBatteryLevel(); // 0 (std::int32_t)
M5.Power.getBatteryCurrent(); // 0 (int32_t)
M5.Power.isCharging(); // 2=charge_unknown (is_charging_t)
M5.Power.getKeyState(); // 0 (uint8_t)
enum pmic_t
{ pmic_unknown
,pmic_adc
,pmic_axp192
,pmic_ip5306
,pmic_axp2101
};
enum is_charging_t
{ is_discharging = 0
,is_charging
,charge_unknown
};
enum board_t
{ board_unknown = 0
,board_M5Stack
,board_M5StackCore2
,board_M5StickC
,board_M5StickCPlus
,board_M5StickCPlus2
,board_M5StackCoreInk
,board_M5Paper
,board_M5Tough
,board_M5Station
,board_M5StackCoreS3
,board_M5AtomS3
,board_M5Dial
,board_M5DinMeter
,board_M5Cardputer
,board_M5AirQ
,board_M5VAMeter
,board_M5StackCoreS3SE
/// non display boards
,board_M5Atom = 128
,board_M5ATOM = board_M5Atom
,board_M5AtomPsram
,board_M5AtomU
,board_M5Camera
,board_M5TimerCam
,board_M5StampPico
,board_M5StampC3
,board_M5StampC3U
,board_M5StampS3
,board_M5AtomS3Lite
,board_M5AtomS3U
,board_M5Capsule
,board_M5NanoC6
/// external displays
,board_M5AtomDisplay = 192
,board_M5ATOMDisplay = board_M5AtomDisplay
,board_M5UnitLCD
,board_M5UnitOLED
,board_M5UnitMiniOLED
,board_M5UnitGLASS
,board_M5UnitGLASS2
,board_M5UnitRCA
,board_M5ModuleDisplay
,board_M5ModuleRCA
};
getBatteryVoltage()はそれらしい値が取れていそう
isCharging()は、期待する値が取れなかった
getType()で、Power Mnagement ICの種別が取得できた
M5Capsuleは、pmic_adc
ADコンバーターという理解でよいだろうか
getUsbOutput()に関しては、setUsbOutput(true)した後、getUsbOutput()をしても、falseが返ってくる結果となった
USB端子に5Vを供給してくれることを期待したのだが
USBの端子の電圧の調査は、こちらの記事で行った
isCharging()のソースの確認
Power_Class::is_charging_t Power_Class::isCharging(void)
{
switch (_pmic)
{
#if defined (CONFIG_IDF_TARGET_ESP32C3) || defined (CONFIG_IDF_TARGET_ESP32C6)
#else
#if !defined (CONFIG_IDF_TARGET) || defined (CONFIG_IDF_TARGET_ESP32)
case pmic_t::pmic_ip5306:
return Ip5306.isCharging() ? is_charging_t::is_charging : is_charging_t::is_discharging;
case pmic_t::pmic_axp192:
return Axp192.isCharging() ? is_charging_t::is_charging : is_charging_t::is_discharging;
#endif
case pmic_t::pmic_axp2101:
return Axp2101.isCharging() ? is_charging_t::is_charging : is_charging_t::is_discharging;
#endif
default:
return is_charging_t::charge_unknown;
}
}
pmic_tが、 1=pmic_adcのときは、必ず、charge_unknownを返す実装になっているようだ
残念ながら、M5Capsuleでは、isCharging()メソッドは使えないようだ