
Arduino 上手教程
CoreMatrix 电池状态相关 API 与案例程序。
3.3.10-aM5CoreMatrix0.2.290.2.36CoreMatrix 使用 M5PM1 采集电池电压和 VBUS 电压,充电电流通过 M5IOE1 IO3 / PYB_CHG_PROG 在 180 mA 与 650 mA 之间选择,充电状态由 M5IOE1 IO8 / PYB_CHG_STAT 读取,低电平表示充电中。
#include <M5Unified.h>
static uint16_t chargeCurrentMa = 180;
static uint32_t lastRefreshMs = 0;
static void drawBattery(int level, bool charging)
{
M5.Display.startWrite();
M5.Display.fillScreen(TFT_BLACK);
M5.Display.drawRect(1, 3, 12, 10, TFT_WHITE);
M5.Display.fillRect(13, 6, 2, 4, TFT_WHITE);
if (level >= 0) {
const int fillWidth = constrain((level * 10 + 50) / 100, 0, 10);
if (fillWidth > 0) {
M5.Display.fillRect(2, 4, fillWidth, 8, TFT_WHITE);
}
}
if (charging && (millis() / 400) % 2 == 0) {
M5.Display.drawRect(0, 0, 16, 16, TFT_WHITE);
}
M5.Display.endWrite();
M5.Display.display();
}
static const char* chargeStateText(m5::Power_Class::is_charging_t state)
{
switch (state) {
case m5::Power_Class::is_charging: return "charging";
case m5::Power_Class::is_discharging: return "not charging";
default: return "unknown";
}
}
void setup()
{
auto cfg = M5.config();
cfg.serial_baudrate = 115200;
M5.begin(cfg);
M5.Display.setColorDepth(8);
M5.Display.setRotation(1);
M5.Display.setBrightness(128);
M5.Power.setChargeCurrent(chargeCurrentMa);
Serial.printf("Initial charge current: %u mA\n", chargeCurrentMa);
}
void loop()
{
M5.update();
if (M5.BtnA.wasClicked()) {
chargeCurrentMa = (chargeCurrentMa == 180) ? 650 : 180;
M5.Power.setChargeCurrent(chargeCurrentMa);
Serial.printf("Charge current: %u mA\n", chargeCurrentMa);
}
const uint32_t now = millis();
if (now - lastRefreshMs >= 1000) {
lastRefreshMs = now;
const int level = M5.Power.getBatteryLevel();
const int voltageMv = M5.Power.getBatteryVoltage();
const int vbusMv = M5.Power.getVBUSVoltage();
const auto chargeState = M5.Power.isCharging();
const bool charging = chargeState == m5::Power_Class::is_charging;
drawBattery(level, charging);
Serial.printf("Battery: %d mV, level: %d%%, state: %s\n",
voltageMv, level, chargeStateText(chargeState));
Serial.printf("VBUS: %d mV, charge current setting: %u mA\n",
vbusMv, chargeCurrentMa);
}
delay(20);
}点阵屏显示电池外框和当前电量填充,充电时外框闪烁。按下 KEY1(BtnA) 可在两个充电电流档位之间切换,串口监视器输出电池电压、电量百分比、充电状态、VBUS 电压和当前电流设置。


CoreMatrix 电池状态部分使用了 M5Unified 库中的 Power_Class,更多相关 API 可以参考下方文档: