deepsleep-minute.ino

Arduino Nano ESP32 · Fichier : deepsleep-minute.ino · Langage : Arduino · Usage : Réveil toutes les minutes en deep sleep

Le deep sleep de l'ESP32-S3 tombe à une dizaine de microampères : minuteur RTC seul actif, réveil après 60 secondes avec remise à zéro du programme. RTC_DATA_ATTR préserve le compteur de cycles dans la mémoire lente, le patron des capteurs sur pile ESP32.

Matériel requis

Un Arduino Nano ESP32 (ESP32-S3 double cœur, Wi-Fi 2,4 GHz + Bluetooth Low Energy, brochage physique compatible Nano, USB natif, broches 3,3 V uniquement). Nano ESP32 alimentée en USB pour développer ; en production, régulateur LDO sobre (le module consomme plus au repos que le silence du SoC).

Câblage

Aucun câblage ; pensez aux broches U0TXD/SENSOR_0 si vous ajoutez un réveil externe GPIO.

Fonctionnement

esp_sleep_enable_timer_wakeup programme le minuteur 60 s en microsecondes ; esp_deep_sleep_start coupe tout et redémarre sur le bootloader. RTC_DATA_ATTR place la variable en RTC slow memory, sauve du power-down.

Exécution

Installez le package Arduino ESP32 Boards (ou le guide Nano ESP32 officiel), sélectionnez Arduino Nano ESP32, téléversez. Les broches sont en 3,3 V : n'envoyez jamais 5 V sur une entrée. Le moniteur série utilise l'USB natif.

Variantes

Réveillez aussi sur un capteur (esp_sleep_enable_ext0_wakeup), ou combinez avec WiFi pour un cycle mesure+envoi de quelques centaines de ms.

deepsleep-minute.ino

// Deep sleep ESP32-S3 : tout est coupe sauf le minuteur RTC (~10 uA).
// La RAM est perdue : on sauve l'etat dans la NVS ou en RTC slow mem.
#include <Preferences.h>

Preferences prefs;
RTC_DATA_ATTR uint32_t cycles = 0; // survit au deep sleep (RTC slow)

void setup() {
  Serial.begin(115200);
  delay(100); // laisser le pont USB s'ouvrir (evite le blocage)
  cycles++;
  Serial.print(F("Reveil n°"));
  Serial.println(cycles);

  // ... mesure + envoi ici (WiFi/BLE au reveil) ...

  Serial.println(F("Endormi 60 s..."));
  Serial.flush();
  delay(10);
  esp_sleep_enable_timer_wakeup(60ULL * 1000000ULL); // 60 s en us
  esp_deep_sleep_start(); // ne revient jamais ici
}

void loop() {} // jamais atteint : tout se passe dans setup

← Retour à la fiche