見出し画像

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()メソッドは使えないようだ


この記事が気に入ったらサポートをしてみませんか?