Her vil vi diskutere hvordan vi kan stille esp32 i dyp søvnmodus til fast tid for å spare strøm. La oss forstå begrepet dyp søvn:
Hva er dyp søvn i ESP32
ESP32 kan være en strømsultne enhet på grunn av sin integrerte wifi og Bluetooth-modul. ESP32 trekker vanligvis 75mA for nominelle operasjoner mens den kan gå opp til 240mA Når du overfører data over wifi. Vi kan imidlertid optimalisere dette ved å aktivere dyp søvnmodus.
I dyp søvnmodus er ESP32 digitale periferiutstyr, ubrukte RAM og CPUer slått av. Bare følgende liste over deler forblir i drift:
Når dyp søvnmodus er aktivert, blir hoved CPU lagt ned; Imidlertid kan ULP (UltralowPower) koprocessor fremdeles lese data fra sensorer og vekke CPU når det trengs.
Denne applikasjonen av ESP32 kommer nyttig når vi ønsker å generere output på et bestemt tidspunkt eller når et eksternt avbrudd eller hendelse skjer. Dette sparer ESP32 -strøm da CPUen forblir av resten av tiden og bare slås på når den kalles.
Sammen med CPU ESP32 blir hovedminnet også blinket eller slettet, så alt som er lagret i dette minnet vil ikke lenger være tilgjengelig. Bare RTC -minne holdes der. Derfor lagrer ESP32 WiFi og Bluetooth -data i RTC -minnet før du går i dyp søvnmodus.
Når den dype søvnmodus er tilbakestilt eller fjernet, starter ESP32 -brikken utførelsen av programmet helt fra begynnelsen.
ESP32 kan vekkes fra dyp søvn ved hjelp av forskjellige kilder.
Våkn opp kilder i ESP32
Flere kilder er tilgjengelige for å vekke ESP32 fra dyp søvn:
I denne guiden vil vi dekke Timer våkner Kilde for ESP32.
Hvordan bruke tidtakeren til å våkne opp ESP32 fra dyp søvn
RTC -kontrolleren som følger med ESP32 inneholder en tidtakmodul som kan vekke enheten etter en viss periode med inaktivitet. Denne funksjonen har enorme applikasjoner der vi trenger tidsstempel eller trenger å utføre instruksjoner på bestemte tidspunkter mens vi opprettholder optimalt strømforbruk.
Følgende kommando kan konfigurere ESP32-timeren som en vekkerkilde. Den aksepterer tid i mikrosekunder som et argument.
esp_sleep_enable_timer_wakeup (time_in_micro-s)
Eksempelkode
Hvis du har ESP32 -brettet installert i Arduino IDE, kommer ESP32 med et dypt søvneksempel som vi vil bruke i denne opplæringen. I Arduino IDE Deep Sleep Timer Wakeup -eksempel kan åpnes ved å gå til: Fil> Eksempler> ESP32> Dyp søvn> Timerwakeup
Et nytt vindu åpnes med nedenfor skisse:
#defin US_TO_S_FACTOR 1000000ULL
#Define TIME_TO_SLEEP 5
RTC_DATA_ATTR INT BOOTCOUNT = 0;
void print_wakeup_reason ()
esp_sleep_wakeup_cause_t wakeup_reason;
wakeup_reason = esp_sleep_get_wakeup_cause ();
bryter (wakeup_reason)
sak esp_sleep_wakeup_ext0: seriell.Println ("Wakeup Reason External Signal ved bruk av RTC_IO"); gå i stykker;
sak esp_sleep_wakeup_ext1: seriell.Println ("Wakeup Reason External Signal ved bruk av RTC_CNTL"); gå i stykker;
CASE ESP_SLEP_WAKEUP_TIMER: SERIAL.println ("vekker forårsaket av tidtakeren"); gå i stykker;
case esp_sleep_wakeup_touchpad: serie.Println ("Wakeup forårsaket av Touchpad"); gå i stykker;
case esp_sleep_wakeup_ulp: seriell.Println ("Wakeup forårsaket av ULP -program"); gå i stykker;
Standard: Seriell.printf ("dyp søvn forårsaket ikke wake up: %d \ n", wakeup_reason); gå i stykker;
void setup ()
Serie.Begin (115200);
forsinkelse (1000);
++bootcount;
Serie.println ("startnummer:" + streng (bootcount));
print_wakeup_reason ();
esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * US_TO_S_FACTOR);
Serie.Println ("Sett opp ESP32 for å sove for hver" + streng (TIME_TO_SLEEP) +
"Sekunder");
Serie.Println ("Gå til å sove nå");
Serie.Flush ();
esp_deep_sleep_start ();
Serie.Println ("Dette vil aldri bli skrevet ut");
void loop ()
Definere dyp søvn: Kode starter med å beskrive tiden som ESP32 vil gå i søvnmodus. Dette kan endres avhengig av ønsket tid. Her konverteres fra mikrosekunder til sekunder, så vi har satt 5 sek for ESP32 dyp søvnmodus. Det vil våkne etter hver 5 sekund.
RTC dataminner: Neste bruk RTC_DATA_ATTR Vi lagrer data om RTC -minne. Dette eksemplet inkluderer BootCount Variabel som er lagret inne i RTC -minnet og teller antall ganger ESP32 våkner etter hver dyp søvn.
RTC -minnet blir ikke blinket når ESP32 er i dyp søvnmodus. 8KB SRAM er inkludert i ESP32 RTC -delen, også kjent som RTC Fast Memory.
ESP32 Wake Up Reason: Neste ved hjelp av print_wakeup_reason () Funksjon Vi skrev ut vekkeren fra dyp søvn.
I oppsett () Del baud rate er definert for seriell kommunikasjon og ++BootCount Variabelen økes med 1 hver gang ESP32 våkner fra dyp søvn. Den totale tellingen skrives ut på seriemonitoren.
Endelig ved hjelp av funksjonen esp_deep_sleep_start (), ESP32 er satt i søvnmodus.
Last opp kode til ESP32 ved hjelp av Arduino IDE.
Produksjon
Følgende utgang kan observeres på seriemonitoren til Arduino IDE. Her kan vi se at etter hver 5 sek. ESP32 våkner fra dyp søvn og oppstartsnummer øker hver gang det våkner.
Merk: Hvis vi trykket på en -knappen, vil ESP32 tilbakestille oppstartstallet til 0.
Konklusjon
Her i denne opplæringen har vi konfigurert ESP32 til å våkne opp fra dyp søvn ved hjelp av et tidtakerprogram. Vi har ganske enkelt skrevet ut en melding når ESP32 våkner; Ved å bruke denne artikkelen kan man imidlertid utføre enhver oppgave når ESP32 våkner fra dyp søvn.