deepsleep-minute.ino
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