Kazalo:

Varčevanje z dolgo življenjsko dobo baterije: 20 korakov
Varčevanje z dolgo življenjsko dobo baterije: 20 korakov

Video: Varčevanje z dolgo življenjsko dobo baterije: 20 korakov

Video: Varčevanje z dolgo življenjsko dobo baterije: 20 korakov
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, November
Anonim
Image
Image
Načini prebujanja ESP32
Načini prebujanja ESP32

Vas zanima uporaba baterije z vašim ESP32? Če je tako, bom danes razpravljal o nekaterih pomembnih tehničnih informacijah na to temo. Vemo, da ta mikrokrmilnik porabi veliko energije pri prenosu informacij. Porabi blizu 190 miliamperov. V tem videoposnetku bom pokazal, kako prihraniti energijo iz ESP32 s tako imenovano funkcijo "DEEP SLEEP". Čip bomo nastavili za vstop v ta način, izvedeli bomo načine za izhod iz tega načina in ustvarili primer, ki prikazuje tri različne načine prebujanja ESP32.

Pomembno si je zapomniti, da radio namesto procesorja porabi veliko energije. Varčevanje z energijo je zelo pomembno. To je zato, ker se končne točke (vezja, ki pošiljajo informacije) pogosto napajajo iz baterij in bi morale trajati do pet let. Nekateri proizvajalci obljubljajo do deset let trajanja, kar velja za visokokakovostne baterije, ki ne uporabljajo toliko končnih točk. V vseh drugih primerih vam svetujem, da uporabite Deep Sleep za varčevanje z energijo iz vašega tokokroga.

1. korak: Uvod

ESP32 ima način varčevanja z energijo, imenovan "Deep Sleep". V tem načinu se izklopijo procesorji, večina RAM -a in vse digitalne periferne enote z uro. Edini deli čipa, ki jih je še mogoče povezati, so krmilnik RTC, zunanje naprave RTC (vključno s soprocesorjem ULP) in pomnilniki RTC.

ESP32 lahko prebudimo med spanjem na več načinov. Vire prebujanja lahko kadar koli nastavite, preden vstopite v način globokega spanja.

Korak: Načini prebujanja ESP32

ESP32 lahko prebudite na pet načinov:

• Časovnik

• Zunanje prebujanje (ext0)

• Zunanje prebujanje (zunaj1)

• Zbujanje soprocesorja ULP

• Sledilna ploščica

Korak: Časovnik

Krmilnik RTC ima vgrajen časomer, ki ga lahko uporabite za aktiviranje čipa po vnaprej določenem časovnem obdobju. Čas je določen z mikrosekundno natančnostjo.

esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)

time_in_us> je čas v mikrosekundah

4. korak: Zunanje prebujanje (ext0)

Modul RTC IO vsebuje logiko za sprožitev alarma, ko eden od RTC GPIO vstopi na vnaprej določeno logično raven. RTC IO je del domena napajanja zunanjih naprav RTC, zato bodo zunanje naprave RTC ohranjene med globokim spanjem, če se zahteva ta vir aktivacije.

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, raven int)

gpio_num> Številka GPIO, ki se uporablja kot vir aktivacije. Uporabljajo se lahko samo GPIO-ji, ki delujejo z RTC: 0, 2, 4, 12-15, 25-27, 32-39.

raven> vhodna raven, ki bo sprožila alarm (0 = NIZKA, 1 = VISOKA)

5. korak: Zunanje prebujanje (ext1)

Krmilnik RTC vsebuje logiko za sprožitev budilke z uporabo več RTC GPIO.

esp_deep_sleep_enable_ext1_wakeup (maska uint64_t, način esp_ext1_wakeup_mode_t)

mask> bitna maska številk GPIO, ki bo povzročila aktivacijo. V tej bitni sliki je mogoče uporabiti samo GPIO, ki podpira RTC: 0, 2, 4, 12-15, 25-27, 32-39.

mode> izberite logično funkcijo, ki se uporablja za določitev pogojev aktiviranja:

• ESP_EXT1_WAKEUP_ALL_LOW: prebudi se, ko so vsi izbrani GPIO v nizki vrednosti

• ESP_EXT1_WAKEUP_ANY_HIGH: prebudi se, ko je kateri koli od izbranih GPIO -jev VISOK

6. korak: Prebujanje soprocesorja ULP

Koprocesor ULP lahko deluje, medtem ko je čip v globokem mirovanju, in se lahko uporablja za iskanje senzorjev, spremljanje vrednosti ADC ali kapacitivnega senzorja na dotik in aktiviranje čipa, ko se zazna določen dogodek.

Soprocesor ULP je del domena napajanja zunanjih naprav RTC in izvaja program, shranjen v počasnem pomnilniku RTC. Če se zahteva ta način aktiviranja, se bodo med globokim spanjem aktivirale zunanje naprave RTC in počasen pomnilnik RTC.

7. korak: Sledilna ploščica

Krmilnik RTC vsebuje logiko za sprožitev alarma z uporabo kapacitivnih senzorjev na dotik. Opredelitev zatiča na dotik pa je drugačna. Za vsak želeni zatič moramo uporabiti prekinitev na dotik.

Po nastavitvi prekinitev smo omogočili način prebujanja za uporabo senzorjev.

// Konfigurirajte sledilno ploščico kot vir za prebujanje esp_sleep_enable_touchpad_wakeup ();

8. korak: Vstop v način globokega spanja

Po nastavitvi načina prebujanja je dovolj en sam ukaz za preklop ESP32 v način globokega spanja (poraba 2,5 μA ali manj). Tu poudarjam, da so ti stroški iz čipa ESP in ne iz plošče, saj ta porabi več.

esp_deep_sleep_start ();

Iz tega ukaza ESP32 zaspi in na primer ne izvede naslednjih vrstic kode.

Pomembno: Pred izvajanjem zgornjega ukaza morate izvesti vse nastavitve prebujanja.

9. korak: Tu je še nekaj pomembnejših informacij

Tu je še nekaj pomembnejših informacij
Tu je še nekaj pomembnejših informacij

Spodnji klic vrne vzrok za prebujanje ESP32.

1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP

esp_sleep_get_wakeup_cause ();

Če nastavimo prebujanje s sledilno ploščico, lahko z ukazom obnovimo, kateri GPIO se je dotaknil

esp_sleep_get_touchpad_wakeup_status ();

Vsakič, ko se ESP32 prebudi, bo znova krožil po nastavitvah. Tako se bodo vse spremenljivke, ki niso definirane v pomnilniku RTC, vrnile v domače stanje.

Če želite spremeniti spremenljivke v spominu tudi po tem, ko zaspite, uporabite deklaracijo spremenljivke v spodnjem primeru:

// RTC_DATA_ATTR za različne nastavitve v spominu RTCRTC_DATA_ATTR int bootCount = 0;

10. korak: demonstracija

Demonstracija
Demonstracija

Video prikazuje delovanje programa v skladu s sliko.

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

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

12. korak: Montaža

Montaža
Montaža

13. korak: Program

Zdaj bomo naredili program, v katerem bomo ESP32 konfigurirali za vstop v način globokega spanja. To se bo prebudilo na tri različne načine: enega za zunanje prebujanje (ext0), enega za časovnik in enega za sledilno ploščico. Ne morejo delovati skupaj, zato bomo uporabili spremenljivko, ki bo števec, kolikokrat je ESP32 dal zagon za nastavitev načina prebujanja.

14. korak: potrebna knjižnica

Knjižnica je obvezna
Knjižnica je obvezna

Za nadzor OLED zaslona potrebujemo zunanjo knjižnico. V ta namen bomo prenesli knjižnico U8g2.

V Arduino IDE pojdite v meni Sketch >> Include Library >> Manage Libraries ….

Korak 15: Knjižnice in spremenljivke

Vključili smo knjižnico za nadzor zaslona OLED in konstruktor primerka krmilnika zaslona. Spremenljivko dodelimo tudi v pomnilnik RTC. Nastavimo občutljivost za sprejem na dotik, mikrosekundni pretvorbeni faktor za sekunde in čas, ko ESP32 preide v način mirovanja (v sekundah).

#include // biblioteca para controle do display oled

// konstruktor da instancia do controllador do display // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C display (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR za različne podatke RTC RTC_DATA_ATTR int bootCount = 0; // sensibilidade para aceitação do toque #define Threshold 40 // fator de pogovorã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: Nastavitev

V nastavitvah povečujemo število zagonov. Pokličemo funkcijo za tiskanje motiva Boot. Če je zagonska številka PAR, nastavimo ESP32, da se prebudi z gumbom (EXT0). Če je večkratnik 3, nastavimo ESP32, da se prebudi po nastavljenem času. V nasprotnem primeru smo nastavili kapacitivne zatiče na dotik, da prebudimo ESP32. Nazadnje, sledilno ploščico smo nastavili kot vir prebujanja in prisilili ESP32 v način mirovanja.

void setup () {Serial.begin (115200); zamuda (1000); // povečanje števila de vezes que o BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se o številki za zagon za konfiguracije PAR ali 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 = Nizko} // se za konfiguracije multiplo de 3 ali ESP32 za despertar depois de um tempo določi drugače 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 {// Nastavitev prekinitve na sledilni ploščici 5 (GPIO12) touchAttachInterrupt (T5, povratni klic, prag); // Konfiguriraj sledilno ploščico kot vir za prebujanje esp_sleep_enable_touchpad_wakeup (); } Serial.println (“entrando em modo sleep”); esp_deep_sleep_start (); // força o ESP32 vstop v modo SLEEP}

17. korak: Zank, povratni klic in konfiguracija prikaza

V zanki nimamo kaj početi. Nato nadaljujemo s prekinitvijo povratnega klica, če imamo kaj narediti, ko pride do prekinitve. Kar zadeva configureDisplay, inicializiramo zaslon in konfiguriramo nekatere parametre. Na zaslonu natisnemo, kolikokrat se je zagon zgodil.

// nada a se fazer no loopvoid loop () {} // povratni klic das interrupções void callback () {// caso queira fazer algo ao ocorrer a interrupção} void configureDisplay () {// inicializacijo za prikaz e konfiguracijo alguns parametros display. zač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:"); }

18. korak: Print_wakeup_reason (poznavanje vzroka prebujenja)

Tukaj imamo funkcijo za tiskanje vzroka prebujanja ESP32. Preverite zatič in natisnite na zaslonu.

// função para imprimir a vzrok do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Niz razlog = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakeup_reason) {primer 1: razlog = "EXT0 RTC_IO BTN"; prekiniti; primer 2: razlog = "EXT1 RTC_CNTL"; prekiniti; primer 3: razlog = "TIMER"; prekiniti; primer 4: reason = "TOUCHPAD"; prekiniti; primer 5: razlog = "ULP PROGRAM"; prekiniti; privzeto: reason = "NO DS CAUSE"; prekiniti; } 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 brez prikaza}}

19. korak: Print_wakeup_touchpad (poznajte GPIO Touch)

Zdaj imamo v tem koraku funkcijo, da natisnemo pin, ki smo se ga dotaknili. Obnovili smo GPIO, ki je prebudil ESP32, in ga natisnili 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 (); // obnovitev o GPIO -ju, če želite izvedeti o ESP32 nizu GPIO = ""; stikalo (touchPin) {primer 0: GPIO = "4"; prekiniti; primer 1: GPIO = "0"; prekiniti; primer 2: GPIO = "2"; prekiniti; primer 3: GPIO = "15"; prekiniti; primer 4: GPIO = "13"; prekiniti; primer 5: GPIO = "12"; prekiniti; primer 6: GPIO = "14"; prekiniti; primer 7: GPIO = "27"; prekiniti; primer 8: GPIO = "33"; prekiniti; primer 9: GPIO = "32"; prekiniti; privzeto: Serial.println ("Prebujanje ne s sledilno ploščico"); prekiniti; } 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}

20. korak: Prenesite datoteke

PDF

JAZ NE

Priporočena: