batterie.ino

M5Stack Core (ESP32) — famille Basic / Gray (K001 / K002) · Fichier : batterie.ino · Langage : Arduino · Usage : Suivre la batterie et économiser l'énergie

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);
}

← Retour à la fiche