🛠 Deep-sleep, réveil minuteur et bouton, autonomie sur batterie

M5Stack Core (ESP32) — Basic / Gray family (K001 / K002) · avance · Schéma : IMG-m5stack-core-esp32-avance-1-m5stack-core-esp32-deep-sleep.svg — M5Stack Core en coupe avec batterie 110 mAh et puce IP5306, chronomètre de réveil deep-sleep, bouton rouge d'alimentation et bouton BOOT GPIO0 en réveil externe, cycle mesure/réveil/sommeil

Objectives

Hardware

Complete code

#include <M5Unified.h>
#include <esp_sleep.h>

#define REVEIL_US      (60ULL * 1000000ULL)   // 60 s
#define PIN_EXT0        0                      // bouton BOOT arriere
#define PIN_EXT1       35                      // M-BUS, optionnel

void setup {
  auto cfg = M5.config;
  M5.begin(cfg);
  esp_sleep_wakeup_cause_t cause = esp_sleep_get_wakeup_cause;
  M5.Display.setTextSize(2);
  M5.Display.fillScreen(TFT_BLACK);
  M5.Display.setCursor(5, 5);
  switch (cause) {
    case ESP_SLEEP_WAKEUP_TIMER:  M5.Display.println("Reveil : minuteur"); break;
    case ESP_SLEEP_WAKEUP_EXT0:   M5.Display.println("Reveil : BOOT G0");  break;
    case ESP_SLEEP_WAKEUP_EXT1:   M5.Display.println("Reveil : G35");      break;
    default:                      M5.Display.println("Demarrage normal");
  }
  // Pseudo-mesure : niveau de batterie
  M5.Display.printf("Batterie : %d %%\n", M5.Power.getBatteryLevel);
  vTaskDelay(1500 / portTICK_PERIOD_MS);
  M5.Display.setBrightness(0);                 // eteint le retroéclairage
  esp_sleep_enable_timer_wakeup(REVEIL_US);
  esp_sleep_enable_ext0_wakeup((gpio_num_t)PIN_EXT0, 0);  // G0 a l'etat bas
  esp_sleep_enable_ext1_wakeup(1ULL << PIN_EXT1, ESP_EXT1_WAKEUP_ANY_HIGH);
  esp_deep_sleep_start;
}

void loop { }   // tout se passe dans setup

Expected verification

Common errors

Other tutorials for this board

Code examples for this board

← Back to the board 🛠 All tutorials