Innholdsfortegnelse:
- Trinn 1: Introduksjon
- Trinn 2: Måter å vekke ESP32
- Trinn 3: Timer
- Trinn 4: Ekstern oppvåkning (ext0)
- Trinn 5: Ekstern oppvåkning (ext1)
- Trinn 6: ULP Coprocessor Wakeup
- Trinn 7: Pekeplate
- Trinn 8: Gå inn i dyp dvalemodus
- Trinn 9: Her er mer viktig informasjon
- Trinn 10: Demonstrasjon
- Trinn 11: WiFi NodeMCU-32S ESP-WROOM-32
- Trinn 12: Montering
- Trinn 13: Program
- Trinn 14: Bibliotek påkrevd
- Trinn 15: Biblioteker og variabler
- Trinn 16: Oppsett
- Trinn 17: Loop, Callback & ConfigureDisplay
- Trinn 18: Print_wakeup_reason (å vite årsaken til oppvåkningen)
- Trinn 19: Print_wakeup_touchpad (kjenn GPIO Touch)
- Trinn 20: Last ned filene
Video: Sparer batterilevetid med dyp søvn: 20 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
Er du interessert i å bruke et batteri med ESP32? I så fall vil jeg i dag diskutere noen viktig teknisk informasjon om dette emnet. Vi vet at denne mikrokontrolleren bruker mye energi når den overfører informasjon. Den bruker nesten 190 milliampere. I denne videoen viser jeg hvordan du sparer energi fra ESP32 med den såkalte "DEEP SLEEP" -funksjonen. Vi setter brikken til å gå inn i denne modusen, lærer hvordan du går ut av denne modusen, og lager et eksempel som viser tre forskjellige måter å vekke ESP32.
Det er viktig å huske at radioen bruker mye energi, i stedet for prosessoren. Energisparing er veldig viktig. Dette er fordi endepunkter (kretsene som sender informasjon) ofte er batteridrevne og skal vare opptil fem år. Det er noen produsenter som lover opptil ti år, og dette gjelder for batterier av høy kvalitet som ikke bruker endepunktene så mye. I alle andre tilfeller anbefaler jeg deg å bruke Deep Sleep for å spare energi fra kretsen din.
Trinn 1: Introduksjon
ESP32 har en strømsparingsmodus, kalt "Dyp søvn". I denne modusen er CPUer, mest RAM og alle digitale klokkeutstyr slått av. De eneste delene av brikken som fremdeles kan kobles til er RTC -kontrolleren, RTC -eksterne enheter (inkludert ULP -coprocessor) og RTC -minner.
Vi har flere måter å vekke ESP32 når du sover. Vekkingskilder kan settes opp når som helst før du går inn i dvalemodus.
Trinn 2: Måter å vekke ESP32
Det er fem måter å vekke ESP32:
• Timer
• Ekstern vekking (ext0)
• Ekstern vekking (ext1)
• ULP coprocessor wakeup
• Berøringsplate
Trinn 3: Timer
RTC-kontrolleren har en innebygd timer som kan brukes til å aktivere brikken etter en forhåndsdefinert periode. Tiden er spesifisert med mikrosekund presisjon.
esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)
time_in_us> er tiden i mikrosekunder
Trinn 4: Ekstern oppvåkning (ext0)
RTC IO -modulen inneholder logikk for å utløse alarmen når en av RTC GPIO -ene går inn på et forhåndsdefinert logisk nivå. RTC IO er en del av strømområdet til RTC -periferienhetene, så RTC -eksterne enheter vil bli holdt i live under dyp søvn hvis denne kilden til aktivering blir forespurt.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int nivå)
gpio_num> GPIO -nummer som brukes som aktiveringskilde. Bare RTC-funksjonelle GPIOer kan brukes: 0, 2, 4, 12-15, 25-27, 32-39.
nivå> inngangsnivå som vil utløse alarmen (0 = LAV, 1 = HØY)
Trinn 5: Ekstern oppvåkning (ext1)
RTC -kontrolleren inneholder logikk for å utløse vekkerklokken ved bruk av flere RTC GPIOer.
esp_deep_sleep_enable_ext1_wakeup (uint64_t maske, esp_ext1_wakeup_mode_t modus)
maske> bitmaske med GPIO -tall som vil forårsake aktivering. Bare RTC-aktiverte GPIO-er kan brukes i dette bitmapet: 0, 2, 4, 12-15, 25-27, 32-39.
modus> velg logikkfunksjonen som brukes for å bestemme aktiveringsbetingelsen:
• ESP_EXT1_WAKEUP_ALL_LOW: våkner når alle valgte GPIO -er er LOW
• ESP_EXT1_WAKEUP_ANY_HIGH: vekker når noen av de valgte GPIO -ene er HIGH
Trinn 6: ULP Coprocessor Wakeup
ULP -prosessoren kan fungere mens brikken er i dyp søvn, og kan brukes til å søke etter sensorer, overvåke ADC- eller kapasitive berøringssensorverdier og aktivere brikken når en bestemt hendelse oppdages.
ULP -coprocessoren er en del av kraftdomenet til RTC -periferienhetene og kjører programmet som er lagret i RTC i sakte minne. Derfor vil RTC -periferiutstyr og RTC -tregt minne bli aktivert under dyp søvn hvis denne aktiveringsmodus er forespurt.
Trinn 7: Pekeplate
RTC -kontrolleren inneholder logikk for å utløse alarmen ved hjelp av de kapasitive berøringssensorene. Definisjonen på berøringsnålen er imidlertid en annen. Vi må bruke berøringsavbruddet for hver av de ønskede pinnene.
Etter å ha angitt avbruddene, aktiverte vi vekking-modus for å bruke sensorene.
// Konfigurer styreflaten som vekkingskilde esp_sleep_enable_touchpad_wakeup ();
Trinn 8: Gå inn i dyp dvalemodus
Etter at du har valgt en oppvåkningsmodus, er det nok med en enkelt kommando for å sette ESP32 i dvalemodus (bruker 2,5 μA eller mindre). Jeg understreker her at denne utgiften er fra ESP -brikken og ikke platen, da sistnevnte bruker mer.
esp_deep_sleep_start ();
Fra denne kommandoen sovner ESP32 og kjører for eksempel ikke de neste kodelinjene.
Viktig: Alle vekkeinnstillinger må gjøres før du utfører kommandoen ovenfor.
Trinn 9: Her er mer viktig informasjon
Samtalen nedenfor returnerer årsaken til ESP32 -vekking.
1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_cause ();
Hvis vi setter vekkeren med styreplaten, kan vi gjenopprette hvilken GPIO som berøringen skjedde gjennom kommandoen
esp_sleep_get_touchpad_wakeup_status ();
Hver gang ESP32 våkner, vil den gå gjennom oppsettet igjen. Dermed vil alle variabler som ikke er definert i RTC -minnet, gå tilbake til hjemstaten.
For å beholde variablene i minnet selv etter å ha sovnet, bruk variabeldeklarasjonen i eksemplet nedenfor:
// RTC_DATA_ATTR aloca a variável na memória RTCRTC_DATA_ATTR int bootCount = 0;
Trinn 10: Demonstrasjon
Videoen viser programmet som fungerer, i samsvar med bildet.
Trinn 11: WiFi NodeMCU-32S ESP-WROOM-32
Trinn 12: Montering
Trinn 13: Program
Vi lager nå et program der vi konfigurerer ESP32 til å gå i dyp dvalemodus. Dette vil bli vekket på tre forskjellige måter: en for ekstern vekking (ext0), en for Timer og en for Touchpad. De kan ikke fungere sammen, så vi bruker en variabel som vil være en teller for antall ganger ESP32 ga Boot for å konfigurere måten å våkne på.
Trinn 14: Bibliotek påkrevd
For å kontrollere OLED -skjermen trenger vi et eksternt bibliotek. For dette vil vi laste ned U8g2 -biblioteket.
I Arduino IDE, gå til Sketch -menyen >> Inkluder bibliotek >> Administrer biblioteker….
Trinn 15: Biblioteker og variabler
Vi har inkludert biblioteket for å kontrollere OLED -skjermen, samt en konstruktør av skjermkontrollinstansen. Vi tildeler også variabelen i RTC -minnet. Vi angir følsomheten for berøringsaksept, mikrosekundkonverteringsfaktoren i sekunder og tiden ESP32 går i hvilemodus (i sekunder).
#include // biblioteca para control do display oled
// kontrollø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
Trinn 16: Oppsett
I Setup øker vi antall ganger Boot oppstod. Vi kaller funksjonen for å skrive ut Boot -motivet. Hvis oppstartsnummeret er PAR, setter vi ESP32 til å våkne via (EXT0) -knappen. Hvis det er et multiplum av 3, setter vi ESP32 til å våkne etter en bestemt tid. Ellers setter vi opp de kapasitive berøringspinnene for å vekke ESP32. Til slutt setter vi styreplaten som vekkingskilde og tvinger ESP32 til å gå i hvilemodus.
ugyldig oppsett () {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øy, 0 = Lav} // se for multiplo de 3 konfiguramos 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 styreflaten som vekkingskilde esp_sleep_enable_touchpad_wakeup (); } Serial.println (“entrando em modo sleep”); esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}
Trinn 17: Loop, Callback & ConfigureDisplay
I Loop har vi ingenting å gjøre. Vi fortsetter deretter å avbryte tilbakeringing hvis vi har noe å gjøre når avbruddet oppstår. Når det gjelder configureDisplay, initialiserer vi displayet og konfigurerer noen parametere. Vi skriver ut på skjermen hvor mange ganger oppstarten skjedde.
// 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. begynne(); 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:"); }
Trinn 18: Print_wakeup_reason (å vite årsaken til oppvåkningen)
Her har vi funksjonen til å skrive ut årsaken til at ESP32 våkner. Kontroller pinnen og skriv ut på displayet.
// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; String reason = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakeup_reason) {case 1: reason = "EXT0 RTC_IO BTN"; gå i stykker; case 2: reason = "EXT1 RTC_CNTL"; gå i stykker; case 3: reason = "TIMER"; gå i stykker; sak 4: reason = "TOUCHPAD"; gå i stykker; sak 5: reason = "ULP PROGRAM"; gå i stykker; default: reason = "NO DS CAUSE"; gå i stykker; } Serial.println (grunn); 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}}
Trinn 19: Print_wakeup_touchpad (kjenn GPIO Touch)
Nå, i dette trinnet, har vi funksjonen til å skrive ut pinnen som ble berørt. Vi gjenopprettet GPIO som vekket ESP32 og skrev den ut på skjermen.
// 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"; gå i stykker; sak 1: GPIO = "0"; gå i stykker; sak 2: GPIO = "2"; gå i stykker; sak 3: GPIO = "15"; gå i stykker; sak 4: GPIO = "13"; gå i stykker; sak 5: GPIO = "12"; gå i stykker; sak 6: GPIO = "14"; gå i stykker; sak 7: GPIO = "27"; gå i stykker; sak 8: GPIO = "33"; gå i stykker; sak 9: GPIO = "32"; gå i stykker; standard: Serial.println ("Wakeup not by touchpad"); gå i stykker; } 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}
Trinn 20: Last ned filene
INO
Anbefalt:
Hack Action Camera Batterilevetid: 4 trinn (med bilder)
Hack Action Camera Battery Life: Enten du har en GoPro, Contour eller et annet kamera dette er for deg! Videokamera batterier er ofte et problem. Enten tar du lange videoer, og de varer ikke lenge nok, eller så har du bare glemt å lade den helt opp før. Kanskje det er veldig co
IR -termometer for søvn: 5 trinn
IR -termometer for søvn: Så denne Lazy Old Geek (L.O.G.) kjøpte nylig en IR -termomodul, MLX90614 fra AliExpress.com. Se bilder Dette er den samme typen sensorer som brukes i de panne- og øretermometerene som er vist på det tredje bildet. De kalles ikke-kontakt fordi
Sparer vann !: 4 trinn
Saving Water !: Todos los días consumimos mucha agua! Frecuentemente nos damos duchas muy largas o no cerramos la llave. Este proyecto, mide cuanta agua están gastando y te avisa cuando pasas de ceros límites.Necesitas un Makey & MakeyCinta AdhesivaUtilizar una l
ESP-01 bevegelsessensor med dyp søvn: 5 trinn
ESP-01 bevegelsessensor med dyp søvn: Jeg har jobbet med å lage hjemmelagde bevegelsessensorer som sender en e-postmelding når den utløses. Det er mange eksempler på instrukser og andre eksempler på å gjøre dette. Jeg trengte nylig å gjøre dette med en batteridrevet PIR -bevegelsessensor og en ESP
SAFE ?, en robot som sparer tilhørigheter: 6 trinn (med bilder)
SAFE ?, en robot som sparer tilhørigheter .: Hei og velkommen til denne instruerbare! .Roboten: SAFE? kan være en kul som du vil lage den. Denne vennlige roboten, som du vet, kan gjøre oss til en fordel for å redde eiendelene våre. Videre, i denne versjonen av SAFE? vi kunne ikke bestemme