batterie.ino
El PMIC IP5306 del Core da nivel de pila, estado de carga y tres niveles de reposo. lightSleep corta CPU y pantalla sin perder contexto: la manera correcta de esperar sin vaciar la batería.
Hardware necesario
Un M5Stack Core Basic/Gray (ESP32 en carcasa con TFT de 320×240, botones A/B/C, altavoz, ranura microSD, batería de 110 mAh). Ninguno; un cable USB para ver cambiar el estado de carga.
Cableado
Sin cableado. La batería interna se carga por USB-C; los LED de carga están en el PMIC.
Funcionamiento
getBatteryLevel consulta el PMIC por I2C (0x34); lightSleep(ms) pone el núcleo en pausa con despertar por PowerKey (botón C) o timeout. El contexto RAM sobrevive, al revés que el deep sleep. En el Arduino IDE (paquete esp32), placa « M5Stack-Core-ESP32 »; instale la biblioteca « M5Stack » (o M5Unified) desde el gestor y suba.
Para ir más lejos
Pase a sueño profundo + despertar temporizado para una estación que duerme horas, aceptando la pérdida de contexto.
batterie.ino
// Batterie 110 mAh (IP5306) : niveau, charge, veille et reveil bouton.
#include <M5Stack.h>
void setup() {
M5.begin(true, false, true, true);
M5.Power.begin();
M5.Lcd.setTextSize(2);
}
void loop() {
M5.update();
M5.Lcd.setCursor(10, 20);
M5.Lcd.printf("Batterie : %3d %%\n", M5.Power.getBatteryLevel());
M5.Lcd.printf("Charge : %s\n",
M5.Power.isCharging() ? "OUI" : "non");
M5.Lcd.printf("Prise : %s\n",
M5.Power.isChargeFull() ? "pleine" : "-");
M5.Lcd.drawString("Bouton A = 10 s de veille", 10, 140, 2);
if (M5.BtnA.wasPressed()) {
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.drawString("Veille... bouton C", 30, 110, 2);
M5.Power.lightSleep(10000); // CPU halt 10 s, ecran coupe, reveil C
M5.Lcd.fillScreen(TFT_BLACK);
}
delay(500);
}