batterie.ino
Le PMIC IP5306 du Core donne niveau de pile, état de charge et trois niveaux de veille. lightSleep coupe le CPU et l'écran sans perdre le contexte : la bonne manière d'attendre sans vider la batterie.
Matériel requis
Un M5Stack Core Basic/Gray (ESP32 dans un boîtier avec écran TFT 320×240, 3 boutons A/B/C, haut-parleur, micro SD, batterie 110 mAh). Aucun ; un câble USB pour voir l'état de charge basculer.
Branchement
Aucun câblage. La batterie interne se recharge par USB-C ; les LED de charge sont sur le PMIC.
Fonctionnement
getBatteryLevel interroge le PMIC par I2C (0x34) ; lightSleep(ms) met le cœur en pause avec réveil par PowerKey (bouton C) ou timeout. Le contexte RAM survit, contrairement au deep sleep. Dans l'Arduino IDE (paquet esp32), carte « M5Stack-Core-ESP32 » ; installez la bibliothèque « M5Stack » (ou M5Unified) via le gestionnaire, puis Téléverser.
Pour aller plus loin
Passez en deep sleep + réveil minuté pour une station qui dort des heures, en acceptant la perte de contexte.
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);
}