Sadržaj:
- Korak 1: Uvod
- Korak 2: Načini buđenja ESP32
- Korak 3: Odbrojavanje vremena
- Korak 4: Vanjsko buđenje (ext0)
- Korak 5: Vanjsko buđenje (ext1)
- Korak 6: Buđenje koprocesora ULP -a
- Korak 7: Dodirna podloga
- Korak 8: Ulazak u način dubokog mirovanja
- Korak 9: Evo još važnijih informacija
- Korak 10: Demonstracija
- 11. korak: WiFi NodeMCU-32S ESP-WROOM-32
- Korak 12: Montaža
- Korak 13: Program
- Korak 14: Potrebna biblioteka
- Korak 15: Knjižnice i varijable
- Korak 16: Postavljanje
- Korak 17: Petlja, povratni poziv i konfiguriranje prikaza
- Korak 18: Print_wakeup_reason (znajući uzrok buđenja)
- Korak 19: Print_wakeup_touchpad (poznajte GPIO Touch)
- Korak 20: Preuzmite datoteke
Video: Štednja trajanja baterije uz duboki san: 20 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:36
Jeste li zainteresirani za korištenje baterije sa svojim ESP32? Ako je tako, danas ću raspravljati o nekim važnim tehničkim podacima o ovoj temi. Znamo da ovaj mikrokontroler troši puno energije kada prenosi informacije. Potroši blizu 190 miliampera. U ovom videu pokazat ću kako uštedjeti energiju iz ESP32 pomoću takozvane funkcije "DEEP SLEEP". Postavit ćemo čip za ulazak u ovaj način rada, naučiti načine izlaska iz ovog načina rada i stvoriti primjer koji prikazuje tri različita načina buđenja ESP32.
Važno je zapamtiti da radio troši puno energije, a ne procesor. Ušteda energije je vrlo važna. To je zato što se krajnje točke (sklopovi koji šalju informacije) često napajaju iz baterije i trebale bi trajati do pet godina. Neki proizvođači obećavaju trajanje do deset godina, a to vrijedi za visokokvalitetne baterije koje ne koriste toliko krajnje točke. U svim ostalim slučajevima savjetujem vam da koristite način dubokog sna za uštedu energije iz strujnog kruga.
Korak 1: Uvod
ESP32 ima način rada za uštedu energije, nazvan "Duboki san". U ovom načinu rada CPU -i, većina RAM -a i sve digitalne periferije sa taktom su isključeni. Jedini dijelovi čipa koji se još mogu spojiti su RTC kontroler, RTC periferija (uključujući ULP koprocesor) i RTC memorije.
Imamo nekoliko načina da probudimo ESP32 dok spavamo. Izvori buđenja mogu se postaviti u bilo koje vrijeme prije ulaska u način dubokog mirovanja.
Korak 2: Načini buđenja ESP32
Postoji pet načina za buđenje ESP32:
• Odbrojavanje vremena
• Vanjsko buđenje (ext0)
• Vanjsko buđenje (ext1)
• Buđenje koprocesora ULP -a
• Dodirna podloga
Korak 3: Odbrojavanje vremena
RTC kontroler ima ugrađeni mjerač vremena koji se može koristiti za aktiviranje čipa nakon unaprijed definiranog vremenskog razdoblja. Vrijeme je navedeno s mikrosekundnom preciznošću.
esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)
time_in_us> je vrijeme u mikrosekundama
Korak 4: Vanjsko buđenje (ext0)
RTC IO modul sadrži logiku za aktiviranje alarma kada jedan od RTC GPIO uđe na unaprijed definiranu logičku razinu. RTC IO dio je domene napajanja RTC perifernih uređaja, pa će se periferne jedinice RTC -a održavati na životu tijekom dubokog sna ako se zatraži ovaj izvor aktivacije.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int level)
gpio_num> GPIO broj koji se koristi kao izvor aktivacije. Mogu se koristiti samo GPIO-i s RTC funkcijom: 0, 2, 4, 12-15, 25-27, 32-39.
razina> ulazna razina koja će aktivirati alarm (0 = NISKA, 1 = VISOKA)
Korak 5: Vanjsko buđenje (ext1)
RTC kontroler sadrži logiku za aktiviranje budilice pomoću više RTC GPIO.
esp_deep_sleep_enable_ext1_wakeup (uint64_t maska, esp_ext1_wakeup_mode_t način)
maska> bitna maska GPIO brojeva koja će uzrokovati aktivaciju. U ovoj se bitmapi mogu koristiti samo GPIO-i s omogućenim RTC-om: 0, 2, 4, 12-15, 25-27, 32-39.
mode> odaberite logičku funkciju koja se koristi za određivanje uvjeta aktivacije:
• ESP_EXT1_WAKEUP_ALL_LOW: budi se kada su svi odabrani GPIO -i u NIZKOM
• ESP_EXT1_WAKEUP_ANY_HIGH: budi se kada je bilo koji od odabranih GPIO -a VISOK
Korak 6: Buđenje koprocesora ULP -a
ULP koprocesor može raditi dok je čip u dubokom mirovanju i može se koristiti za pretraživanje senzora, praćenje vrijednosti ADC -a ili kapacitivnog osjetnika na dodir te aktiviranje čipa kada se detektira određeni događaj.
ULP koprocesor dio je domene napajanja RTC perifernih uređaja i pokreće program pohranjen u RTC sporoj memoriji. Stoga će se periferni uređaji RTC -a i usporena memorija RTC -a aktivirati tijekom dubokog mirovanja ako se zatraži ovaj način aktivacije.
Korak 7: Dodirna podloga
RTC kontroler sadrži logiku za aktiviranje alarma pomoću kapacitivnih senzora dodira. Definicija dodirne iglice je, međutim, drugačija. Moramo koristiti prekid dodira za svaki od željenih pinova.
Nakon postavljanja prekida, omogućili smo način buđenja za korištenje senzora.
// Konfiguriranje dodirne podloge kao izvora buđenja esp_sleep_enable_touchpad_wakeup ();
Korak 8: Ulazak u način dubokog mirovanja
Nakon postavljanja načina buđenja, dovoljna je jedna naredba za prebacivanje ESP32 u način dubokog mirovanja (potrošnja 2,5 μA ili manje). Ovdje naglašavam da je taj trošak iz ESP čipa, a ne iz ploče, jer potonji troši više.
esp_deep_sleep_start ();
Iz ove naredbe ESP32 zaspi i ne izvršava sljedeće redove koda, na primjer.
Važno: Prije izvršavanja gornje naredbe potrebno je izvršiti sve postavke buđenja.
Korak 9: Evo još važnijih informacija
Donji poziv vraća uzrok buđenja ESP32.
1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_cause ();
Ako smo postavili buđenje pomoću dodirne podloge, pomoću naredbe možemo oporaviti GPIO do kojeg je došlo do dodira
esp_sleep_get_touchpad_wakeup_status ();
Svaki put kad se ESP32 probudi, ponovno će proći kroz postavku. Tako će se sve varijable koje nisu definirane u RTC memoriji vratiti u početno stanje.
Da biste zadržali varijable u memoriji čak i nakon što zaspite, upotrijebite deklaraciju varijable u donjem primjeru:
// RTC_DATA_ATTR za promjenjivu memoriju RTCRTC_DATA_ATTR int bootCount = 0;
Korak 10: Demonstracija
Video prikazuje rad programa, u skladu sa slikom.
11. korak: WiFi NodeMCU-32S ESP-WROOM-32
Korak 12: Montaža
Korak 13: Program
Sada ćemo napraviti program u kojem ćemo konfigurirati ESP32 za ulazak u način dubokog mirovanja. To će se probuditi na tri različita načina: jedan za vanjsko buđenje (ext0), jedan za mjerač vremena i jedan za dodirnu podlogu. Ne mogu raditi zajedno, pa ćemo koristiti varijablu koja će biti brojač koliko je puta ESP32 dao Boot za konfiguriranje načina buđenja.
Korak 14: Potrebna biblioteka
Za upravljanje OLED zaslonom potrebna nam je vanjska knjižnica. Za to ćemo preuzeti knjižnicu U8g2.
U Arduino IDE -u idite na izbornik Sketch >> Include Library >> Manage Libraries ….
Korak 15: Knjižnice i varijable
Uključili smo knjižnicu za upravljanje OLED zaslonom, kao i konstruktor instance kontrolera zaslona. Također, varijablu dodjeljujemo u RTC memoriji. Postavili smo osjetljivost za prihvaćanje dodira, faktor pretvorbe u mikrosekundama za sekunde i vrijeme kada ESP32 prelazi u stanje mirovanja (u sekundama).
#include // biblioteca para controle do display oled
// konstruktor za instalaciju kontrolera za prikaz // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C zaslon (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR za promjenu memorije RTC RTC_DATA_ATTR int bootCount = 0; // sensibilidade para aceitação do toque #define Threshold 40 // fator de razgovaã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
Korak 16: Postavljanje
U postavkama povećavamo broj pojavljivanja pokretanja. Pozivamo funkciju ispisa motiva čizme. Ako je Boot number PAR, postavili smo ESP32 da se probudi pomoću gumba (EXT0). Ako je višekratnik 3, postavili smo ESP32 da se probudi nakon zadanog vremena. Inače smo postavili kapacitivne dodirne pinove za buđenje ESP32. Konačno, postavili smo dodirnu podlogu kao izvor buđenja i prisilili ESP32 da uđe u način mirovanja.
void setup () {Serial.begin (115200); kašnjenje (1000); // inkrementa o numero de vezes que o BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // prikazuje se broj pokretanja za PAR konfiguracije ili ESP32 za despertar através do botão (EXT0) if (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Visoko, 0 = Nisko} // se za multiplo de 3 konfiguracije o ESP32 za 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 kapacitivo para despertar o ESP32 else {// Setup interrupt on Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, povratni poziv, prag); // Konfiguriranje dodirne podloge kao izvora buđenja esp_sleep_enable_touchpad_wakeup (); } Serial.println (“entrando em modo sleep”); esp_deep_sleep_start (); // força o ESP32 ulazak u mod SLEEP}
Korak 17: Petlja, povratni poziv i konfiguriranje prikaza
U Petlji nemamo što raditi. Zatim nastavljamo s prekidom povratnog poziva ako imamo što učiniti kada dođe do prekida. Što se tiče configureDisplay, pokrećemo zaslon i konfiguriramo neke parametre. Na zaslonu ispisujemo koliko se puta dogodilo podizanje sustava.
// nada a se fazer no loopvoid loop () {} // callback das interrupções void callback () {// caso queira fazer algo ao ocorrer a interrupção} void configureDisplay () {// inicializiranje prikaza e konfiguracija alguns parametros display. početi(); 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:"); }
Korak 18: Print_wakeup_reason (znajući uzrok buđenja)
Ovdje imamo funkciju ispisa uzroka buđenja ESP32. Provjerite iglu i ispišite na zaslonu.
// 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) {slučaj 1: razlog = "EXT0 RTC_IO BTN"; pauza; slučaj 2: reason = "EXT1 RTC_CNTL"; pauza; slučaj 3: reason = "TIMER"; pauza; slučaj 4: reason = "TOUCHPAD"; pauza; slučaj 5: reason = "ULP PROGRAM"; pauza; default: reason = "NO DS CAUSE"; pauza; } Serial.println (razlog); 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 bez prikaza}}
Korak 19: Print_wakeup_touchpad (poznajte GPIO Touch)
Sada, u ovom koraku, imamo funkciju ispisivanja dodirnute iglice. Oporavili smo GPIO koji je probudio ESP32 i ispisali ga na zaslonu.
// 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"; pauza; slučaj 1: GPIO = "0"; pauza; slučaj 2: GPIO = "2"; pauza; slučaj 3: GPIO = "15"; pauza; slučaj 4: GPIO = "13"; pauza; slučaj 5: GPIO = "12"; pauza; slučaj 6: GPIO = "14"; pauza; slučaj 7: GPIO = "27"; pauza; slučaj 8: GPIO = "33"; pauza; slučaj 9: GPIO = "32"; pauza; zadano: Serial.println ("Buđenje nije pomoću dodirne podloge"); pauza; } 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}
Korak 20: Preuzmite datoteke
INO
Preporučeni:
Kako utrostručiti vijek trajanja baterije AAA svjetiljki: 3 koraka
Kako utrostručiti vijek trajanja baterija AAA svjetiljki: Kada koristite 3W LED svjetiljke koje napajaju AAA baterije, očekivat ćete da će trajati oko 30 minuta. Postoji način da se vrijeme rada utrostruči pomoću AA baterija, što ću vam pokazati povezivanjem držača AA baterija na njega
Štednja baterije, isključeni prekidač sa zaštitom od pražnjenja s ATtiny85 za olovnu automobilsku ili lipo bateriju: 6 koraka
Ušteda baterije, prekidač za isključivanje zaštite od pražnjenja s ATtiny85 za olovne automobile ili Lipo bateriju: Kako mi je potrebno nekoliko zaštitnih jedinica za automobile i solarne sustave, komercijalni su bili 49 USD preskupi. Također koriste previše snage sa 6 mA. Nisam mogao pronaći nikakve upute na tu temu. Tako sam napravio svoj koji crpi 2mA. Kako to
Kako hakirati temperaturni senzor za dulji vijek trajanja baterije: 4 koraka
Kako hakirati temperaturni senzor za dulji vijek trajanja baterije: Inkbird IBS-TH1 izvrstan je mali uređaj za bilježenje temperature i vlažnosti tijekom nekoliko sati ili dana. Može se postaviti za bilježenje svake sekunde do svakih 10 minuta, a podatke prenosi putem Bluetooth LE na Android ili iOS pametni telefon. Aplikacija
Udvostručite vijek trajanja baterije DX3 radija iz Spektruma za manje od 20 USD: 11 koraka
Udvostručite vijek trajanja baterije DX3 radija iz Spektruma za manje od 20 USD: Ideju za ovo prvi sam dobio na niti za DX6/7 na forumima RCGRoups.com. Vodim nitro automobile pa sam kupio DX3. Koristio sam radio neko vrijeme, a trajanje baterije bilo je na boljoj strani većine radija-ali vlasnici DX7 postajali su poput
Kako produžiti vijek trajanja baterije prijenosnog računala: 4 koraka
Kako produljiti vijek trajanja baterije prijenosnog računala: U ovoj uputi naučit ćete kako produžiti vijek trajanja napunjenosti prijenosnog računala. Ako ćete letjeti ili se voziti na velike udaljenosti, ovi koraci mogu pomoći da baterija traje dulje nego inače i vožnju učini manje stresnom