Sadržaj:
- Korak 1: Uvod
- Korak 2: Načini buđenja ESP32
- Korak 3: Tajmer
- Korak 4: Vanjsko buđenje (ext0)
- Korak 5: Vanjsko buđenje (ext1)
- Korak 6: Buđenje koprocesora ULP -a
- Korak 7: Touchpad
- Korak 8: Ulazak u način dubokog mirovanja
- Korak 9: Evo još važnijih informacija
- Korak 10: Demonstracija
- Korak 11: WiFi NodeMCU-32S ESP-WROOM-32
- Korak 12: Montaža
- Korak 13: Program
- Korak 14: Potrebna biblioteka
- Korak 15: Biblioteke 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 izmjena: 2024-01-30 08:08
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 mnogo 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 i stvoriti primjer koji prikazuje tri različita načina za buđenje ESP32.
Važno je zapamtiti da radio troši mnogo energije, a ne procesor. Ušteda energije je veoma važna. To je zato što se krajnje točke (kola koja šalju informacije) često napajaju iz baterija 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 uštede energije, nazvan "Duboko spavanje". 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 sna.
Korak 2: Načini buđenja ESP32
Postoji pet načina da probudite ESP32:
• Tajmer
• Vanjsko buđenje (ext0)
• Vanjsko buđenje (ext1)
• Buđenje ULP koprocesora
• Dodirna tabla
Korak 3: Tajmer
RTC kontroler ima ugrađeni mjerač vremena koji se može koristiti za aktiviranje čipa nakon unaprijed definiranog vremenskog perioda. Vrijeme je precizirano 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 definirani logički nivo. RTC IO dio je domena napajanja perifernih uređaja RTC -a, pa će se periferne jedinice RTC -a održavati na životu tokom dubokog sna ako se zatraži ovaj izvor aktivacije.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int nivo)
gpio_num> GPIO broj koji se koristi kao izvor aktivacije. Mogu se koristiti samo GPIO-i sa RTC funkcijom: 0, 2, 4, 12-15, 25-27, 32-39.
nivo> ulazni nivo koji će aktivirati alarm (0 = NISKO, 1 = VISOKO)
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 bitmapi mogu se koristiti samo GPIO-i sa 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 LOW -u
• 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 otkrije određeni događaj.
ULP koprocesor je dio domena napajanja RTC perifernih uređaja i pokreće program pohranjen u sporo memorijskom RTC -u. Stoga će se periferni uređaji RTC -a i spora memorija RTC -a aktivirati tijekom dubokog mirovanja ako se zatraži ovaj način aktivacije.
Korak 7: Touchpad
RTC kontroler sadrži logiku za aktiviranje alarma pomoću kapacitivnih senzora dodira. Definicija dodirne iglice je, međutim, drugačija. Moramo koristiti prekid dodirom 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 su ti troškovi ESP čip, a ne ploča, jer potonji troše više.
esp_deep_sleep_start ();
Od ove naredbe ESP32 zaspi i ne izvršava sljedeće redove koda, na primjer.
Važno: Sve postavke buđenja moraju se izvršiti prije izvršavanja gornje naredbe.
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 aktiviramo buđenje pomoću dodirne podloge, pomoću naredbe možemo oporaviti koji je GPIO dodir došao
esp_sleep_get_touchpad_wakeup_status ();
Svaki put kad se ESP32 probudi, ponovo ć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 različite varijante memorije RTCRTC_DATA_ATTR int bootCount = 0;
Korak 10: Demonstracija
Video prikazuje rad programa u skladu sa slikom.
Korak 11: 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 sna. To će se probuditi na tri različita načina: jedan za vanjsko buđenje (ext0), jedan za tajmer 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 kontrolu OLED ekrana potrebna nam je vanjska biblioteka. Za to ćemo preuzeti U8g2 biblioteku.
U Arduino IDE idite na meni Sketch >> Include Library >> Manage Libraries ….
Korak 15: Biblioteke i varijable
Uključili smo biblioteku za kontrolu OLED ekrana, kao i konstruktor instance kontrolera ekrana. Također, dodjeljujemo varijablu 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 prikaz (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR za promjenu memorije RTC RTC_DATA_ATTR int bootCount = 0; // senzibilidade para aceitação do toque #define Threshold 40 // fator de razgovora sa mikrosegundos 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 programu Setup povećavamo broj pojavljivanja pokretanja. Pozivamo funkciju za ispis motiva čizme. Ako je broj pokretanja PAR, podesili smo ESP32 da se probudi pomoću dugmeta (EXT0). Ako je višekratnik 3, postavljamo ESP32 da se probudi nakon određenog vremena. U protivnom smo postavili kapacitivne dodirne pinove da probudimo ESP32. Konačno, postavili smo dodirnu ploču kao izvor buđenja i prisilili ESP32 da uđe u stanje mirovanja.
void setup () {Serial.begin (115200); kašnjenje (1000); // povećanje broja numeričkih brojeva za BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o BOOTO print_wakeup_reason (); // prikazuje se broj za podizanje sistema 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 temp definiranje else if (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // konfiguriše se kao kontra konfiguracija na dodirnom kapacitetu za despertar ili ESP32 drugo {// Prekid postavljanja na dodirnoj tabli 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 (); // forsa o ESP32 ulazak u mod SLEEP}
Korak 17: Petlja, povratni poziv i konfiguriranje prikaza
U petlji nemamo šta raditi. Zatim nastavljamo s prekidom povratnog poziva ako moramo nešto učiniti kada dođe do prekida. Što se tiče configureDisplay, pokrećemo zaslon i konfiguriramo neke parametre. Štampamo na ekranu koliko se puta pokretanje pokrenulo.
// nada a se fazer no loopvoid loop () {} // povratni poziv za prekid void callback () {// caso queira fazer algo ao ocorrer a interrupção} void configureDisplay () {// inicijalizacija prikaza i konfiguracija parametara parametara parametara. begin (); display.setPowerSave (0); // modo powerSave (0-Off? 1-On) display.setFont (u8x8_font_torussansbold8_u); // upotreba fonte // imprime bez prikaza os brojevi određuju vrijednost povezivanja 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 ispisivanja uzroka buđenja ESP32. Proverite iglu i odštampajte na ekranu.
// funkcija za otkazivanje uzroka do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; String reason = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // obnavljanje prekidača uzroka desperta (wakeup_reason) {slučaj 1: razlog = "EXT0 RTC_IO BTN"; break; slučaj 2: reason = "EXT1 RTC_CNTL"; break; slučaj 3: reason = "TIMER"; break; slučaj 4: reason = "TOUCHPAD"; break; slučaj 5: reason = "ULP PROGRAM"; break; default: reason = "NO DS CAUSE"; break; } 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 odštampali ga na ekranu.
// função para imprimir o pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // oporavak o GPIO -u za pronalaženje ESP32 niza GPIO = ""; switch (touchPin) {case 0: GPIO = "4"; break; slučaj 1: GPIO = "0"; break; slučaj 2: GPIO = "2"; break; slučaj 3: GPIO = "15"; break; slučaj 4: GPIO = "13"; break; slučaj 5: GPIO = "12"; break; slučaj 6: GPIO = "14"; break; slučaj 7: GPIO = "27"; break; slučaj 8: GPIO = "33"; break; slučaj 9: GPIO = "32"; break; default: Serial.println ("Buđenje nije pomoću dodirne podloge"); break; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // apaga 7 i display display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}
Korak 20: Preuzmite datoteke
JA NE
Preporučuje se:
Kako utrostručiti vijek trajanja baterije AAA svjetiljki: 3 koraka
Kako utrostručiti vijek trajanja baterije AAA svjetiljki: Kada koristite LED svjetiljke snage 3W koje napajaju AAA baterije, očekivat ćete da će trajati oko 30 minuta. Postoji način da se vrijeme rada utrostruči upotrebom AA baterija, što ću vam pokazati pričvršćivanjem držača AA baterije na njega
Kako hakirati temperaturni senzor za duži vijek trajanja baterije: 4 koraka
Kako hakirati temperaturni senzor za dulji vijek trajanja baterije: Inkbird IBS-TH1 je sjajan mali uređaj za bilježenje temperature i vlažnosti kroz nekoliko sati ili dana. Može se postaviti tako da se bilježi svake sekunde do svakih 10 minuta, a podatke prenosi putem Bluetooth LE -a 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 sam prvi put 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čunara: 4 koraka
Kako produžiti vijek trajanja baterije vašeg prijenosnog računara: U ovom uputstvu naučit ćete kako produžiti vijek trajanja napunjenosti prijenosnog računara. Ako ćete letjeti ili voziti na velike udaljenosti, ovi koraci mogu pomoći da baterija traje dulje od uobičajene i vožnju učine manje stresnom
Produžite vijek trajanja baterije za elektroniku: 8 koraka
Produžite vijek trajanja baterije za elektroniku: Na ovom uputstvu (pa, ne baš na instrukcije), pokazat ću vam nekoliko savjeta i trikova za povećanje vijeka trajanja za nekoliko različitih vrsta baterija za elektroniku. Bilo je uputstava o " Povećanju baterije vijek trajanja elektronike & q