Indholdsfortegnelse:
- Trin 1: Introduktion
- Trin 2: Måder at vække ESP32
- Trin 3: Timer
- Trin 4: Ekstern opvågning (ext0)
- Trin 5: Ekstern opvågning (ext1)
- Trin 6: ULP Coprocessor Wakeup
- Trin 7: Touchpad
- Trin 8: Gå ind i dyb dvaletilstand
- Trin 9: Her er nogle mere vigtige oplysninger
- Trin 10: Demonstration
- Trin 11: WiFi NodeMCU-32S ESP-WROOM-32
- Trin 12: Montering
- Trin 13: Program
- Trin 14: Bibliotek påkrævet
- Trin 15: Biblioteker og variabler
- Trin 16: Opsætning
- Trin 17: Loop, Callback & ConfigureDisplay
- Trin 18: Print_wakeup_reason (kender årsagen til opvågnen)
- Trin 19: Print_wakeup_touchpad (kend GPIO Touch)
- Trin 20: Download filerne
Video: Sparer batterilevetid med dyb søvn: 20 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Er du interesseret i at bruge et batteri til din ESP32? I så fald vil jeg i dag diskutere nogle vigtige tekniske oplysninger om dette emne. Vi ved, at denne mikrokontroller bruger meget energi, når den sender information. Det forbruger tæt på 190 milliampere. I denne video viser jeg, hvordan du sparer energi fra ESP32 med den såkaldte "DEEP SLEEP" -funktion. Vi sætter chippen til at gå ind i denne tilstand, lærer måder at afslutte denne tilstand på og opretter et eksempel, der viser tre forskellige måder at vække ESP32.
Det er vigtigt at huske, at radioen bruger meget energi, frem for processoren. Energibesparelse er meget vigtig. Dette skyldes, at slutpunkter (de kredsløb, der sender oplysninger) ofte er batteridrevne og skal vare op til fem år. Der er nogle producenter, der lover op til ti års varighed, og dette gælder for batterier af høj kvalitet, der ikke bruger slutpunkterne så meget. I alle andre tilfælde anbefaler jeg dig at bruge Deep Sleep til at spare energi fra dit kredsløb.
Trin 1: Introduktion
ESP32 har en strømbesparende tilstand, kaldet "Deep Sleep". I denne tilstand er CPU'er, de fleste RAM og alle digitalurede eksterne enheder slukket. De eneste dele af chippen, der stadig kan tilsluttes, er RTC -controlleren, RTC -periferiudstyr (inklusive ULP -coprocessor) og RTC -hukommelser.
Vi har flere måder at vække ESP32, når du sover. Vågnekilder kan til enhver tid konfigureres, før du går i dyb dvaletilstand.
Trin 2: Måder at vække ESP32
Der er fem måder at vække ESP32 på:
• Timer
• Ekstern opvågning (ext0)
• Ekstern vækning (ext1)
• ULP coprocessor wakeup
• Touchpad
Trin 3: Timer
RTC-controlleren har en indbygget timer, der kan bruges til at aktivere chippen efter en foruddefineret periode. Tiden er specificeret med mikrosekundpræcision.
esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)
time_in_us> er tiden i mikrosekunder
Trin 4: Ekstern opvågning (ext0)
RTC IO -modulet indeholder logik til at udløse alarmen, når en af RTC GPIO'erne indtaster et foruddefineret logisk niveau. RTC IO er en del af RTC -periferienheders strømdomæne, så RTC -periferiudstyret holdes i live under dyb søvn, hvis der anmodes om denne aktiveringskilde.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int niveau)
gpio_num> GPIO -nummer, der bruges som aktiveringskilde. Kun RTC-funktionelle GPIO'er kan bruges: 0, 2, 4, 12-15, 25-27, 32-39.
niveau> inputniveau, der udløser alarmen (0 = LOW, 1 = HIGH)
Trin 5: Ekstern opvågning (ext1)
RTC -controlleren indeholder logik til at udløse vækkeuret ved hjælp af flere RTC GPIO'er.
esp_deep_sleep_enable_ext1_wakeup (uint64_t mask, esp_ext1_wakeup_mode_t mode)
maske> bitmaske af GPIO -numre, der forårsager aktivering. Kun RTC-aktiverede GPIO'er kan bruges i denne bitmap: 0, 2, 4, 12-15, 25-27, 32-39.
mode> vælg den logiske funktion, der bruges til at bestemme aktiveringsbetingelsen:
• ESP_EXT1_WAKEUP_ALL_LOW: vågner, når alle valgte GPIO'er er i LOW
• ESP_EXT1_WAKEUP_ANY_HIGH: vågner, når nogen af de valgte GPIO'er er HIGH
Trin 6: ULP Coprocessor Wakeup
ULP -coprocessoren kan fungere, mens chippen er i dyb søvn, og kan bruges til at søge efter sensorer, overvåge ADC- eller kapacitive berøringssensorværdier og aktivere chippen, når en bestemt hændelse detekteres.
ULP -coprocessoren er en del af effektdomænet for RTC -periferienhederne og kører programmet, der er gemt i RTC med langsom hukommelse. Derfor aktiveres RTC -periferiudstyr og RTC langsom hukommelse under dyb søvn, hvis der ønskes denne aktiveringstilstand.
Trin 7: Touchpad
RTC -controlleren indeholder logik til at udløse alarmen ved hjælp af de kapacitive berøringssensorer. Definitionen af berøringsnålen er imidlertid en anden. Vi skal bruge berøringsafbrydelsen for hver af de ønskede stifter.
Efter indstilling af afbrydelser aktiverede vi vågningstilstanden til at bruge sensorerne.
// Konfigurer Touchpad som wakeup source esp_sleep_enable_touchpad_wakeup ();
Trin 8: Gå ind i dyb dvaletilstand
Efter indstilling af en vækningstilstand er en enkelt kommando for at sætte ESP32 i dyb dvaletilstand (bruger 2,5 μA eller mindre) nok. Jeg understreger her, at denne udgift er fra ESP -chippen og ikke pladen, da sidstnævnte bruger mere.
esp_deep_sleep_start ();
Fra denne kommando falder ESP32 i søvn og eksekverer f.eks. Ikke de næste kodelinjer.
Vigtigt: Alle vækkeindstillinger skal foretages, før ovenstående kommando udføres.
Trin 9: Her er nogle mere vigtige oplysninger
Opkaldet nedenfor returnerer årsagen til ESP32 -vågning.
1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_cause ();
Hvis vi indstiller vækkelsen ved berøringspladen, kan vi gendanne den GPIO, som berøringen fandt sted via kommandoen
esp_sleep_get_touchpad_wakeup_status ();
Hver gang ESP32 vågner, vil den gennemgå opsætningen igen. Således vender alle variabler, der ikke er defineret i RTC -hukommelsen, tilbage til deres hjemlige tilstand.
For at beholde variablerne i hukommelsen, selv efter du er faldet i søvn, skal du bruge variabeldeklarationen i eksemplet herunder:
// RTC_DATA_ATTR aloca a variável on memória RTCRTC_DATA_ATTR int bootCount = 0;
Trin 10: Demonstration
Videoen viser programmet, der fungerer i overensstemmelse med billedet.
Trin 11: WiFi NodeMCU-32S ESP-WROOM-32
Trin 12: Montering
Trin 13: Program
Vi laver nu et program, hvor vi konfigurerer ESP32 til at gå i dyb dvaletilstand. Dette vil blive vækket på tre forskellige måder: en til ekstern wakeup (ext0), en til Timer og en til Touchpad. De kan ikke fungere sammen, så vi vil bruge en variabel, der vil være en tæller for det antal gange, ESP32 gav Boot til at konfigurere måden at vågne op på.
Trin 14: Bibliotek påkrævet
For at styre OLED -displayet har vi brug for et eksternt bibliotek. Til dette vil vi downloade U8g2 -biblioteket.
I Arduino IDE skal du gå til Skitsemenuen >> Inkluder bibliotek >> Administrer biblioteker….
Trin 15: Biblioteker og variabler
Vi har inkluderet biblioteket for at styre OLED -displayet, såvel som en konstruktør af displaykontrolinstansen. Vi tildeler også variablen i RTC -hukommelsen. Vi indstiller følsomheden for berøringsaccept, mikrosekundkonverteringsfaktoren i sekunder og den tid, ESP32 går i dvaletilstand (i sekunder).
#include // biblioteca para control do display oled
// konstruktør for instans til visning // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C display (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR aloca a variável na memoria RTC RTC_DATA_ATTR int bootCount = 0; // sensibilidade para aceitação do toque #define Threshold 40 // fator de conversão de microsegundos para segundos #define uS_TO_S_FACTOR 1000000 // tempo que o ESP32 ficará em modo sleep (em segundos) #define TIME_TO_SLEEP 3
Trin 16: Opsætning
I Setup øger vi antallet af gange Boot opstod. Vi kalder funktionen for at udskrive Boot -motivet. Hvis Boot -nummeret er PAR, indstiller vi ESP32 til at vågne via knappen (EXT0). Hvis det er et multiplum af 3, indstiller vi ESP32 til at vågne op efter en bestemt tid. Ellers konfigurerer vi de kapacitive berøringsnåle til at vække ESP32. Endelig indstiller vi Touchpad som vækkekilde og tvinger ESP32 til at gå i dvaletilstand.
ugyldig opsætning () {Serial.begin (115200); forsinkelse (1000); // incrementa o numero de vezes que o BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se o numero de boot for PAR configuramos o ESP32 para despertar através do botão (EXT0) if (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Høj, 0 = Lav} // se til multiplo de 3 konfigurationer o ESP32 para despertar depois de um tempo definido else if (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // caso contrario configuramos os pinos de touch capacitivo para despertar o ESP32 else {// Setup interrupt on Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, callback, Threshold); // Konfigurer Touchpad som wakeup source esp_sleep_enable_touchpad_wakeup (); } Serial.println (“entrando em modo sleep”); esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}
Trin 17: Loop, Callback & ConfigureDisplay
I Loop har vi intet at gøre. Vi fortsætter derefter med at afbryde tilbagekald, hvis vi har noget at gøre, når afbrydelsen sker. Med hensyn til configureDisplay initialiserer vi displayet og konfigurerer nogle parametre. Vi udskriver på skærmen det antal gange Boot opstod.
// nada a se fazer no loopvoid loop () {} // callback das interrupções void callback () {// caso queira fazer algo ao ocorrer a interrupção} void configureDisplay () {// inicializa o display and configura alguns parametros display. begynde(); display.setPowerSave (0); // modo powerSave (0-Off? 1-On) display.setFont (u8x8_font_torussansbold8_u); // fonte utilizada // imprime no display os numero de vezes que aconteceu o BOOT display.drawString (0, 0, "BOOT NUM:"); display.drawString (0, 2, String (bootCount).c_str ()); display.drawString (0, 4, "MOTIVO:"); }
Trin 18: Print_wakeup_reason (kender årsagen til opvågnen)
Her har vi funktionen til at udskrive årsagen til, at ESP32 vågner. Kontroller nålen, og udskriv på displayet.
// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Stringårsag = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakeup_reason) {case 1: reason = "EXT0 RTC_IO BTN"; pause; case 2: reason = "EXT1 RTC_CNTL"; pause; case 3: reason = "TIMER"; pause; case 4: reason = "TOUCHPAD"; pause; case 5: reason = "ULP PROGRAM"; pause; default: reason = "INGEN DS ÅRSAG"; pause; } Serial.println (grund); display.clearLine (6); // apaga a linha 6 do display display.drawString (0, 6, reason.c_str ()); // imprime a causa do despertar no display // se despertou por TOUCHPAD, então vamos verificar em qual dos pinos ocorreu if (wakeup_reason == 4) {print_wakeup_touchpad (); // verifica o pino e imprime no display}}
Trin 19: Print_wakeup_touchpad (kend GPIO Touch)
Nu, i dette trin, har vi funktionen til at udskrive den nål, der blev rørt. Vi genoprettede GPIO'en, der vækkede ESP32 og udskrev den på displayet.
// função para imprimir o pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // recupera o GPIO que despertou o ESP32 String GPIO = ""; switch (touchPin) {case 0: GPIO = "4"; pause; sag 1: GPIO = "0"; pause; sag 2: GPIO = "2"; pause; sag 3: GPIO = "15"; pause; sag 4: GPIO = "13"; pause; sag 5: GPIO = "12"; pause; sag 6: GPIO = "14"; pause; sag 7: GPIO = "27"; pause; sag 8: GPIO = "33"; pause; sag 9: GPIO = "32"; pause; standard: Serial.println ("Wakeup not by touchpad"); pause; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // apaga a linha 7 do display display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}
Trin 20: Download filerne
INO
Anbefalede:
Hack Action Camera Batterilevetid: 4 trin (med billeder)
Hack Action Camera Batterilevetid: Enten har du en GoPro, Contour eller et andet kamera, dette er til dig! Videokamera batterier er ofte et problem. Enten optager du lange videoer, og de holder ikke længe nok, eller også har du bare glemt at oplade det fuldstændigt før. Måske er det meget co
IR -termometer til søvn: 5 trin
IR -termometer til søvn: Så denne Lazy Old Geek (L.O.G.) købte for nylig et IR -termomodul, MLX90614 fra AliExpress.com. Se billeder Dette er den samme type sensor, der bruges i de pande- og øretermometre, der er vist på det tredje billede. De kaldes ikke-kontakt fordi
Vejrstation: ESP8266 Med dyb søvn, SQL, tegning efter kolbe og plott: 3 trin
Weather Station: ESP8266 Med Deep Sleep, SQL, Graphing by Flask & Plotly: Ville det være sjovt at kende temperaturen, fugtigheden eller lysintensiteten på din altan? Jeg ved, jeg ville. Så jeg lavede en simpel vejrstation til at indsamle sådanne data. De følgende afsnit er de trin, jeg tog for at bygge en. Lad os komme i gang
ESP-01 bevægelsessensor med dyb søvn: 5 trin
ESP-01 Bevægelsessensor med dyb søvn: Jeg har arbejdet på at lave hjemmelavede bevægelsessensorer, der sender en e-mail-besked, når de udløses. Der er mange eksempler på instruktioner og andre eksempler på at gøre dette. Jeg havde for nylig brug for at gøre dette med en batteridrevet PIR -bevægelsessensor og en ESP
SAFE ?, en robot der sparer tilhørsforhold: 6 trin (med billeder)
SAFE ?, en robot der sparer tilhørigheder .: Hej og velkommen til denne instruktive! .Roboten: SAFE? kunne være en cool, som du vil oprette den. Denne venlige robot, som du ved, kunne gøre os til en fordel for at redde vores ejendele. Ydermere, i denne version af SAFE? vi kunne ikke bestemme