Sadržaj:

Štednja trajanja baterije uz duboki san: 20 koraka
Štednja trajanja baterije uz duboki san: 20 koraka

Video: Štednja trajanja baterije uz duboki san: 20 koraka

Video: Štednja trajanja baterije uz duboki san: 20 koraka
Video: Часы G-Shock до 250 долларов-15 лучших часов Casio G до 250 доллар... 2024, Decembar
Anonim
Image
Image
Načini buđenja ESP32
Načini buđenja ESP32

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

Evo još nekih važnijih informacija
Evo još nekih 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

Demonstracija
Demonstracija

Video prikazuje rad programa u skladu sa slikom.

Korak 11: WiFi NodeMCU-32S ESP-WROOM-32

WiFi NodeMCU-32S ESP-WROOM-32
WiFi NodeMCU-32S ESP-WROOM-32

Korak 12: Montaža

Montaža
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

Biblioteka obavezna
Biblioteka obavezna

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

PDF

JA NE

Preporučuje se: