batterie.ino

M5StickC Plus2 (M5Stack) — kit vestible "stick" con ESP32-PICO-V3-02 (SKU K016-P2) · Archivo : batterie.ino · Lenguaje : Arduino · Uso : Surveiller la batterie et couper proprement

El Plus2 no tiene PMIC: la tensión de la batería se deduce, y es el pin HOLD (G4) el que mantiene la alimentación. Este sketch muestra el nivel y apaga el stick limpiamente bajando HOLD.

Hardware necesario

Un M5StickC Plus2 (ESP32-PICO-V3-02, pantalla de 135×240, botones A/B/C, zumbador pasivo en G2, IR + LED rojo en G19, IMU MPU6886, micrófono, batería de 200 mAh). Ninguno; USB para ver el estado «en carga».

Cableado

Sin cableado. G4 (HOLD) debe quedar a 1 en funcionamiento; el firmware lo mantiene, el sketch lo fuerza a 0 para apagar.

Funcionamiento

Power.getBatteryLevel estima el porcentaje por tensión; gpio_set_level(4,0) corta el enclavamiento de alimentación: el equivalente software del botón Power largo del firmware. En el Arduino IDE (paquete esp32), placa « M5StickCPlus2 »; biblioteca « M5StickCPlus2 » o M5Unified. En la v2 sin PMIC, mantenga el botón C más de 2 s para encender; HOLD (G4) mantiene la alimentación.

Para ir más lejos

Registre la descarga hora a hora antes de apagar, para trazar la capacidad real de la pila.

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

← Volver a la ficha