batterie.ino

M5StickC Plus2 (M5Stack) — kit portable « stick » ESP32-PICO-V3-02 (SKU K016-P2) · Fichier : batterie.ino · Langage : Arduino · Usage : Surveiller la batterie et couper proprement

Le Plus2 n'a pas de PMIC : la tension batterie se devine, et c'est la broche HOLD (G4) qui maintient l'alimentation. Ce sketch affiche le niveau et éteint proprement le stick par HOLD bas.

Matériel requis

Un M5StickC Plus2 (ESP32-PICO-V3-02, écran 135×240, boutons A/B/C, buzzer passif G2, IR + LED rouge G19, IMU MPU6886, micro, batterie 200 mAh). Aucun ; USB pour voir l'état « en charge ».

Branchement

Aucun câblage. G4 (HOLD) doit rester à 1 en fonctionnement ; le firmware le maintient, le sketch le force à 0 pour éteindre.

Fonctionnement

Power.getBatteryLevel estime le pourcentage par tension ; gpio_set_level(4,0) coupe le verrou d'alimentation — l'équivalent du bouton Power long du firmware. Dans l'Arduino IDE (paquet esp32), carte « M5StickCPlus2 » ; bibliothèque « M5StickCPlus2 » ou M5Unified. Sur la v2 sans PMIC, maintenez le bouton C > 2 s pour allumer ; HOLD (G4) maintient l'alimentation.

Pour aller plus loin

Journalisez la décharge heure par heure avant extinction, pour tracer la vraie capacité de la pile.

batterie.ino

// Batterie 200 mAh : niveau via ADC interne (Plus2 sans PMIC) et HOLD.
#include <M5Unified.h>

void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);
  M5.Power.begin();
  M5.Display.setRotation(1);
  M5.Display.setTextSize(2);
}

void loop() {
  M5.update();
  int niveau = M5.Power.getBatteryLevel();       // 0-100 (estime)
  bool charge = M5.Power.isCharging();

  M5.Display.fillRect(0, 0, 240, 135, TFT_BLACK);
  M5.Display.setCursor(6, 10);
  M5.Display.printf("Batterie %d %%\n", niveau);
  M5.Display.printf("%s\n", charge ? "en charge" : "sur batterie");
  M5.Display.drawRect(6, 70, 200, 40, TFT_WHITE);
  M5.Display.fillRect(8, 72, 196 * niveau / 100, 36,
                      niveau < 15 ? TFT_RED : TFT_GREEN);
  M5.Display.drawString("B long = HOLD off", 6, 118, 1);

  if (M5.BtnB.wasHold(2000)) {
    M5.Display.drawString("Arret: HOLD bas", 6, 90, 2);
    delay(1500);
    gpio_set_level((gpio_num_t)4, 0);   // HOLD G4 a 0 = coupure alim
  }
  delay(500);
}

← Retour à la fiche