Qui discuteremo di come possiamo impostare ESP32 in modalità Sleep Deep in tempo fisso per salvare Power. Prima di imparare a svegliare ESP32 dal sonno profondo usando il timer, comprendiamo il concetto di sonno profondo:
Cosa è il sonno profondo in ESP32
ESP32 può essere un dispositivo affamato di potenza a causa del suo modulo WiFi e Bluetooth integrato. ESP32 in genere disegna 75mA per le operazioni nominali mentre può salire 240 mA Quando si trasmettono i dati su WiFi. Tuttavia, possiamo ottimizzarlo abilitando la modalità di sonno profondo.
In modalità di sonno profondo, le periferiche digitali ESP32, RAM inutilizzate e CPU sono disattivate. Solo il seguente elenco di parti rimane operativo:
Quando la modalità di sospensione profonda è abilitata, la CPU principale viene chiusa; Tuttavia, il coprocessore ULP (UltralowPower) può ancora leggere i dati dai sensori e svegliare la CPU ogni volta che è necessario.
Questa applicazione di ESP32 è utile quando vogliamo generare output in un momento specifico o quando si verifica un interrupt o un evento esterno. Ciò salva il potere ESP32 poiché la sua CPU rimane fuori per il resto del tempo e si accende solo quando viene chiamata.
Insieme alla memoria principale della CPU ESP32 è anche lampeggiata o cancellata, quindi qualsiasi cosa memorizzata all'interno di questa memoria non sarà più disponibile. Solo la memoria RTC è mantenuta lì. Pertanto, ESP32 salva i dati WiFi e Bluetooth all'interno della memoria RTC prima di andare in modalità di sonno profondo.
Una volta ripristinata la modalità di sospensione profonda o rimossa, il chip ESP32 avvia l'esecuzione del programma fin dall'inizio.
ESP32 può essere svegliato dal sonno profondo usando diverse fonti.
Sveglia le fonti in ESP32
Sono disponibili più fonti per svegliarsi ESP32 dal sonno profondo:
In questa guida ci tratteremo Il timer si sveglia Fonte per ESP32.
Come usare il timer per svegliare ESP32 dal sonno profondo
Il controller RTC fornito con ESP32 contiene un modulo timer che può svegliare il dispositivo dopo un certo periodo di inattività. Questa funzione ha vaste applicazioni in cui abbiamo bisogno di timestamp o dobbiamo eseguire istruzioni in momenti specifici, pur mantenendo un consumo di energia ottimale.
Il comando seguente può configurare il timer ESP32 come fonte di sveglia. Accetta tempo in microsecondi come argomento.
ESP_SLEEP_ENABLE_TIMER_WAKEUP (time_in_micro-s)
Codice di esempio
Se hai installato la scheda ESP32 in Arduino IDE, allora ESP32 viene fornito con un esempio di sonno profondo che useremo in questo tutorial. In Arduino IDE Deep Sleep Timer Wakeup Esempio può essere aperto andando a: File> Esempi> ESP32> Sleep profondo> Timerwakeup
Si aprirà una nuova finestra con lo schizzo sotto:
#define US_TO_S_FACTOR 1000000UL
#define time_to_sleep 5
Rtc_data_attr int bootCount = 0;
void print_wakeup_reason ()
ESP_SLEEP_WAKEUP_CAUSE_T WACHEUP_RASASION;
wakeup_reason = esp_sleep_get_wakeup_cause ();
switch (wakeup_reason)
Caso ESP_SLEEP_WAKEUP_EXT0: seriale.println ("Segnale esterno del motivo di sveglia usando rtc_io"); rottura;
Caso ESP_SLEEP_WAKEUP_EXT1: seriale.println ("Segnale esterno del motivo di sveglia usando rtc_cntl"); rottura;
Caso ESP_SLEEP_WAKEUP_TIMER: seriale.println ("wakeup causato dal timer"); rottura;
Caso ESP_SLEEP_WAKEUP_Touchpad: seriale.println ("wakeup causato da touchpad"); rottura;
Caso ESP_SLEEP_WAKEUP_ULP: seriale.println ("wakeup causato dal programma ULP"); rottura;
Predefinito: seriale.printf ("Deep Sleep non ha causato il risveglio: %d \ n", wakeup_reason); rottura;
void setup ()
Seriale.Inizia (115200);
ritardo (1000);
++bootcount;
Seriale.println ("Numero di avvio:" + String (bootCount));
print_wakeup_reason ();
ESP_SLEEP_ENABLE_TIMER_WAKEUP (time_to_sleep * us_to_s_factor);
Seriale.println ("setup ESP32 su Sleep for Every" + String (time_to_sleep) +
"Seconds");
Seriale.println ("andare a dormire ora");
Seriale.sciacquone();
ESP_DEEP_SLEEP_START ();
Seriale.println ("Questo non verrà mai stampato");
void loop ()
Definire il sonno profondo: Il codice inizia descrivendo il tempo per il quale ESP32 andrà in modalità Sleep. Questo può essere modificato a seconda del tempo richiesto. Qui il tempo viene convertito da microsecondi in pochi secondi, quindi abbiamo impostato 5 secondi per la modalità di sospensione profonda ESP32. Si sveglierà ogni 5 sec.
REMORI DATI RTC: Poi usando RTC_DATA_ATR Salveremo i dati sulla memoria RTC. Questo esempio include il bootcount variabile che viene memorizzata all'interno della memoria RTC e conta il numero di volte in cui ESP32 si sveglia dopo ogni sonno profondo.
La memoria RTC non viene lampeggiata quando ESP32 è in modalità di sospensione profonda. 8kb SRAM è incluso all'interno della parte RTC ESP32, nota anche come RTC Fast Memory.
ESP32 Wake Up Moasth: Poi usando il print_wakeup_reason () funzione abbiamo stampato la causa di sveglia dal sonno profondo.
In impostare() Il tasso di baud in parte è definito per la comunicazione seriale e il ++bootcount La variabile è incrementata di 1 ogni volta che ESP32 si sveglia dal sonno profondo. Il conteggio totale è stampato sul monitor seriale.
Finalmente usando la funzione ESP_DEEP_SLEEP_START (), ESP32 è messo in modalità Sleep.
Carica il codice su ESP32 utilizzando Arduino IDE.
Produzione
A seguito di output può essere osservato sul monitor seriale di Arduino IDE. Qui possiamo vedere che ogni 5 sec ESP32 si sveglia dal sonno profondo e il numero di avvio viene incrementato ogni volta che si sveglia.
Nota: Se abbiamo premuto il pulsante EN ESP32 ripristinerà il conteggio di avvio a 0.
Conclusione
Qui in questo tutorial, abbiamo configurato ESP32 per svegliarci dal sonno profondo usando un programma di timer. Abbiamo semplicemente stampato un messaggio una volta che l'ESP32 si sveglia; Tuttavia, usando questo articolo si può eseguire qualsiasi attività quando l'ESP32 si sveglia dal sonno profondo.