Obsah:

Úspora batérie s hlbokým spánkom: 20 krokov
Úspora batérie s hlbokým spánkom: 20 krokov

Video: Úspora batérie s hlbokým spánkom: 20 krokov

Video: Úspora batérie s hlbokým spánkom: 20 krokov
Video: Часть 10 - Аудиокнига Александра Дюма «Человек в железной маске» (гл. 59–61) 2024, November
Anonim
Image
Image
Spôsoby, ako prebudiť ESP32
Spôsoby, ako prebudiť ESP32

Zaujíma vás používanie batérie vo vašom ESP32? Ak je to tak, dnes budem diskutovať o niektorých dôležitých technických informáciách týkajúcich sa tejto témy. Vieme, že tento mikrokontrolér vynakladá veľa energie na prenos informácií. Spotrebuje takmer 190 miliampérov. V tomto videu vám ukážem, ako ušetriť energiu z ESP32 pomocou takzvanej funkcie „DEEP SLEEP“. Nastavíme čip, aby vstúpil do tohto režimu, naučíme sa spôsoby, ako z tohto režimu vystúpiť, a vytvoríme príklad, ktorý ukazuje tri rôzne spôsoby prebudenia ESP32.

Je dôležité si uvedomiť, že rádio vydáva veľa energie, nie procesor. Úspora energie je veľmi dôležitá. Koncové body (obvody, ktoré odosielajú informácie) sú totiž často napájané z batérie a mali by vydržať až päť rokov. Niektorí výrobcovia sľubujú životnosť až desať rokov, čo platí pre vysokokvalitné batérie, ktoré až tak veľa nepoužívajú. Vo všetkých ostatných prípadoch vám odporúčam použiť hlboký spánok, aby ste ušetrili energiu z vášho okruhu.

Krok 1: Úvod

ESP32 má režim úspory energie, ktorý sa nazýva „hlboký spánok“. V tomto režime sú vypnuté CPU, väčšina pamäte RAM a všetky digitálne taktované periférie. Jediné časti čipu, ktoré je možné ešte pripojiť, sú radič RTC, periférie RTC (vrátane koprocesora ULP) a pamäte RTC.

Existuje niekoľko spôsobov, ako prebudiť ESP32 v spánku. Zdroje prebudenia je možné nastaviť kedykoľvek pred vstupom do režimu hlbokého spánku.

Krok 2: Spôsoby, ako prebudiť ESP32

Existuje päť spôsobov, ako prebudiť ESP32:

• Časovač

• Externé prebudenie (ext0)

• Externé prebudenie (ext1)

• ULP koprocesorové prebudenie

• Touchpad

Krok 3: Časovač

Ovládač RTC má vstavaný časovač, ktorý je možné použiť na aktiváciu čipu po vopred definovanom čase. Čas je zadaný s presnosťou na mikrosekundy.

esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)

time_in_us> je čas v mikrosekundách

Krok 4: Externé prebudenie (ext0)

Modul RTC IO obsahuje logiku na spustenie alarmu, keď jeden z RTC GPIO vstúpi do vopred definovanej logickej úrovne. RTC IO je súčasťou výkonovej domény periférnych zariadení RTC, takže periférne zariadenia RTC budú počas hlbokého spánku udržiavané nažive, ak bude požadovaný tento zdroj aktivácie.

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int level)

gpio_num> Číslo GPIO použité ako aktivačný zdroj. Môžu byť použité iba GPIO s funkciou RTC: 0, 2, 4, 12-15, 25-27, 32-39.

úroveň> vstupná úroveň, ktorá spustí alarm (0 = NÍZKA, 1 = VYSOKÁ)

Krok 5: Externé prebudenie (ext1)

Ovládač RTC obsahuje logiku na spustenie budíka pomocou viacerých GPIO RTC.

esp_deep_sleep_enable_ext1_wakeup (maska uint64_t, režim esp_ext1_wakeup_mode_t)

maska> bitová maska čísel GPIO, ktoré spôsobia aktiváciu. V tejto bitmape je možné použiť iba GPIO s povoleným RTC: 0, 2, 4, 12-15, 25-27, 32-39.

režim> vyberte logickú funkciu použitú na určenie podmienky aktivácie:

• ESP_EXT1_WAKEUP_ALL_LOW: prebúdza sa, keď sú všetky vybrané GPIO na úrovni LOW

• ESP_EXT1_WAKEUP_ANY_HIGH: prebúdza sa, keď sú niektoré z vybraných GPIO VYSOKÉ

Krok 6: Prebudenie koprocesora ULP

Koprocesor ULP môže fungovať, keď je čip v režime hlbokého spánku, a môže byť použitý na vyhľadávanie senzorov, monitorovanie hodnôt ADC alebo kapacitných dotykových senzorov a aktiváciu čipu, keď je zistená konkrétna udalosť.

Koprocesor ULP je súčasťou výkonovej domény periférnych zariadení RTC a spúšťa program uložený v pomalej pamäti RTC. Preto budú počas hlbokého spánku aktivované periférne zariadenia RTC a pomalá pamäť RTC, ak je tento režim aktivácie požadovaný.

Krok 7: Touchpad

Ovládač RTC obsahuje logiku na spustenie alarmu pomocou kapacitných dotykových senzorov. Definícia dotykového kolíka je však odlišná. Pre každý z požadovaných kolíkov musíme použiť dotykové prerušenie.

Po nastavení prerušení sme povolili režimu prebudenia používať senzory.

// Konfigurácia touchpadu ako zdroja prebudenia esp_sleep_enable_touchpad_wakeup ();

Krok 8: Vstup do režimu hlbokého spánku

Po nastavení režimu prebudenia stačí jeden príkaz na uvedenie ESP32 do režimu hlbokého spánku (výdavky 2,5 μA alebo menej). Tu zdôrazňujem, že tieto výdavky pochádzajú z čipu ESP a nie z platne, pretože tá míňa viac.

esp_deep_sleep_start ();

Z tohto príkazu ESP32 zaspí a nevykoná napríklad ďalšie riadky kódu.

Dôležité: Všetky nastavenia prebudenia je potrebné vykonať pred vykonaním vyššie uvedeného príkazu.

Krok 9: Tu sú niektoré ďalšie dôležité informácie

Tu sú niektoré ďalšie dôležité informácie
Tu sú niektoré ďalšie dôležité informácie

Nasledujúci hovor vráti príčinu prebudenia ESP32.

1: EXT0 2: EXT1 3: ČASOVAČ 4: TOUCHPAD 5: ULP

esp_sleep_get_wakeup_cause ();

Ak nastavíme prebudenie pomocou touchpadu, môžeme pomocou príkazu obnoviť, ku ktorému GPIO došlo k dotyku

esp_sleep_get_touchpad_wakeup_status ();

Zakaždým, keď sa ESP32 prebudí, znova prejde nastavením. Preto sa všetky premenné, ktoré nie sú definované v pamäti RTC, vrátia do svojho pôvodného stavu.

Ak chcete zachovať premenné v pamäti aj po zaspaní, použite deklaráciu premennej v nasledujúcom príklade:

// RTC_DATA_ATTR aloca a variável na pamäť RTCRTC_DATA_ATTR int bootCount = 0;

Krok 10: Ukážka

Ukážka
Ukážka

Video ukazuje, ako program funguje v súlade s obrázkom.

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

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

Krok 12: Zostavenie

zhromaždenie
zhromaždenie

Krok 13: Program

Teraz vytvoríme program, v ktorom nakonfigurujeme ESP32 tak, aby vstúpil do režimu hlbokého spánku. Toto sa prebudí tromi rôznymi spôsobmi: jedným pre externé prebudenie (ext0), druhým pre časovač a druhým pre touchpad. Nemôžu spolupracovať, takže použijeme premennú, ktorá bude počítadlom počtu pokusov, ktoré ESP32 poskytol bootovaniu, aby nakonfiguroval spôsob prebudenia.

Krok 14: Vyžaduje sa knižnica

Vyžaduje sa knižnica
Vyžaduje sa knižnica

Na ovládanie OLED displeja potrebujeme externú knižnicu. Za týmto účelom stiahneme knižnicu U8g2.

V Arduino IDE prejdite do ponuky Náčrt >> Zahrnúť knižnicu >> Spravovať knižnice ….

Krok 15: Knižnice a premenné

Zahrnuli sme knižnicu na ovládanie displeja OLED a tiež konštruktor inštancie ovládača displeja. Tiež alokujeme premennú v pamäti RTC. Nastavili sme citlivosť na prijatie dotykom, prevodný faktor mikrosekundy na sekundy a čas, kedy ESP32 prejde do režimu spánku (v sekundách).

#include // biblioteca para controle do display oled

// budovanie inštancie ovládania displeja // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C displej (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR aloca a rôzne pamäte RTC RTC_DATA_ATTR int bootCount = 0; // citlivosť všetkých parametrov #definovať prahovú hodnotu 40 // // konverzia mikrosegundos para segundos #define uS_TO_S_FACTOR 1000000 // tempo que o ESP32 ficará em modo sleep (em segundos) #define TIME_TO_SLEEP 3

Krok 16: Nastavenie

V programe Setup zvyšujeme počet opakovaní spustenia. Funkciu nazývame tlačou bootovacieho motívu. Ak je bootovacie číslo PAR, nastavíme ESP32 na prebudenie pomocou tlačidla (EXT0). Ak je to násobok 3, nastavíme ESP32, aby sa zobudil po uplynutí nastaveného času. V opačnom prípade sme nastavili kapacitné dotykové piny na prebudenie ESP32. Nakoniec nastavíme Touchpad ako zdroj prebudenia a prinútime ESP32 prejsť do režimu spánku.

void setup () {Serial.begin (115200); oneskorenie (1000); // prírastky o počet úloh, ktoré je potrebné vykonať O SPUSTENIE ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se o boot 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 = vysoký, 0 = nízky} // pre viac konfigurácií 3 konfigurácií alebo ESP32 môže depoispo depo tempo určito inak if (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // konfigurácia konfigurácie dotykového ovládača môže mať buď väčšiu alebo menšiu úroveň ESP32 alebo iné {// prerušenie nastavenia na zariadení Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, callback, Threshold); // Konfigurácia touchpadu ako zdroja prebudenia esp_sleep_enable_touchpad_wakeup (); } Serial.println („entrando em modo sleep“); esp_deep_sleep_start (); // for oa ESP32 entrar em modo SLEEP}

Krok 17: Slučka, spätné volanie a konfigurácia displeja

V Loop nemáme čo robiť. Potom pokračujeme k prerušeniu spätného volania, ak máme čo robiť, keď dôjde k prerušeniu. Pokiaľ ide o configureDisplay, inicializujeme zobrazenie a nakonfigurujeme niektoré parametre. Na obrazovku vytlačíme, koľkokrát sa spustenie spustilo.

// nada a se fazer no loopvoid loop () {} // callback das interrupções void callback () {// caso queira fazer algo ao ocorrer a interrupção} void configureDisplay () {// initializa o display e configura alguns parametros display. začať(); display.setPowerSave (0); // modo powerSave (0-vypnuté? 1-zapnuté) display.setFont (u8x8_font_torussansbold8_u); // použitie fontu // zobrazenie bez zobrazenia počtu záznamov, ktoré sa môžu týkať spustenia systému BOOT display.drawString (0, 0, "BOOT NUM:"); display.drawString (0, 2, String (bootCount).c_str ()); display.drawString (0, 4, "MOTIVO:"); }

Krok 18: Print_wakeup_reason (znalosť Príčiny prebudenia)

Tu máme funkciu na vytlačenie príčiny prebudenia ESP32. Skontrolujte špendlík a vytlačte na displej.

// hlavné funkcie ESP32 sa zúfalo vyhýbajú print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Dôvod reťazca = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // vypnutie a zapnutie vypínača (wakeup_reason) {prípad 1: reason = "EXT0 RTC_IO BTN"; prestávka; prípad 2: dôvod = "EXT1 RTC_CNTL"; prestávka; prípad 3: dôvod = "ČASOVAČ"; prestávka; prípad 4: dôvod = "TOUCHPAD"; prestávka; prípad 5: dôvod = "ULP PROGRAM"; prestávka; predvolené: dôvod = "ŽIADNA PRÍČINA DS"; prestávka; } Serial.println (dôvod); display.clearLine (6); // apaga a linha 6 do display display.drawString (0, 6, reason.c_str ()); // zobrazovanie a zobrazovanie údajov sa nezobrazuje // zúfalo sa pozeráte na TOUCHPAD, overte si, či overíte svoju kvalitu, pokiaľ (wakeup_reason == 4) {print_wakeup_touchpad (); // verifikácia alebo zobrazenie bez zobrazenia}}

Krok 19: Print_wakeup_touchpad (poznajte GPIO Touch)

Teraz v tomto kroku máme funkciu vytlačiť pin, ktorého sa dotkli. Obnovili sme GPIO, ktoré prebudilo ESP32, a vytlačili sme ho na displej.

// funkcia pre tlač, tlač, kopírovanie, print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // zotavenie o GPIO zúfalo o ESP32 reťazec GPIO = ""; prepínač (touchPin) {prípad 0: GPIO = "4"; prestávka; prípad 1: GPIO = "0"; prestávka; prípad 2: GPIO = "2"; prestávka; prípad 3: GPIO = "15"; prestávka; prípad 4: GPIO = "13"; prestávka; prípad 5: GPIO = "12"; prestávka; prípad 6: GPIO = "14"; prestávka; prípad 7: GPIO = "27"; prestávka; prípad 8: GPIO = "33"; prestávka; prípad 9: GPIO = "32"; prestávka; predvolené: Serial.println ("Prebudenie nie pomocou touchpadu"); prestávka; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // apaga a line 7 do display display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}

Krok 20: Stiahnite si súbory

PDF

INO

Odporúča: