Esptop 10 -tidtaker våkner fra dyp søvn ved hjelp av arduino ide

Esptop 10 -tidtaker våkner fra dyp søvn ved hjelp av arduino ide
Vesp32 er en mikrokontrollerbasert IoT -plattform. Strømforbruk er en av de største bekymringene mens du jobber med et mikrokontrollertavle. Hvis vi driver ESP32 med en DC -forsyning, bryr vi oss ikke mer om strømforbruk, men med batteribackup -prosjekter på lang sikt, må vi optimalisere den generelle strømmen.

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:

  • RTC -kontroller
  • ULP Coprocessor
  • RTC raskt og sakte minne
  • RTC periferiutstyr

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:

  • Timer
  • Berør pinner
  • Ekstern Wakeup ext0
  • Ekstern Wakeup ext1

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.