Obsah:
- Krok 1: Úvod
- Krok 2: Spôsoby, ako prebudiť ESP32
- Krok 3: Časovač
- Krok 4: Externé prebudenie (ext0)
- Krok 5: Externé prebudenie (ext1)
- Krok 6: Prebudenie koprocesora ULP
- Krok 7: Touchpad
- Krok 8: Vstup do režimu hlbokého spánku
- Krok 9: Tu sú niektoré ďalšie dôležité informácie
- Krok 10: Ukážka
- Krok 11: WiFi NodeMCU-32S ESP-WROOM-32
- Krok 12: Zostavenie
- Krok 13: Program
- Krok 14: Vyžaduje sa knižnica
- Krok 15: Knižnice a premenné
- Krok 16: Nastavenie
- Krok 17: Slučka, spätné volanie a konfigurácia displeja
- Krok 18: Print_wakeup_reason (znalosť Príčiny prebudenia)
- Krok 19: Print_wakeup_touchpad (poznajte GPIO Touch)
- Krok 20: Stiahnite si súbory
Video: Úspora batérie s hlbokým spánkom: 20 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
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
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
Video ukazuje, ako program funguje v súlade s obrázkom.
Krok 11: WiFi NodeMCU-32S ESP-WROOM-32
Krok 12: Zostavenie
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
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
INO
Odporúča:
Meteorologická stanica: ESP8266 s hlbokým spánkom, SQL, grafy podľa banky a vykresľovania: 3 kroky
Meteorologická stanica: ESP8266 S hlbokým spánkom, SQL, grafy podľa banky a grafu: Bolo by zábavné poznať teplotu, vlhkosť alebo intenzitu svetla na vašom balkóne? Viem, že by som. Vytvoril som teda jednoduchú meteorologickú stanicu na zhromažďovanie takýchto údajov. Nasledujúce sekcie predstavujú kroky, ktoré som vykonal pri jej zostavení. Začnime
Senzor pohybu ESP-01 s hlbokým spánkom: 5 krokov
Senzor pohybu ESP-01 s hlbokým spánkom: Pracoval som na výrobe domácich pohybových senzorov, ktoré pri spustení odošlú e-mailovú správu. Existuje mnoho príkladov pokynov a ďalších príkladov, ako to urobiť. Nedávno som to potreboval urobiť s batériovým snímačom pohybu PIR a ESP
Úspora vody pri daždi: 6 krokov
Šetrenie vody pri daždi: S nedávnym dažďom som si všimol, že môj postrekovací systém pokračoval vo svojej práci, aj keď v záhrade bolo vody viac ako dosť. Prečo automaticky nevypnúť postrekovač, keď prší
Úspora energie Arduino Home: 5 krokov
Šetriteľ energie Arduino Home: Budujete domáci energetický systém, ktorý má monitorovať energiu vašich domovov a znížiť tak účty za elektrinu a ďalšie poplatky za energie. V tomto modeli bude vaše zariadenie schopné kontrolovať teplotu vášho domu a podľa toho ho upravovať
Veľkosť pre domácich majstrov a vybudovanie záložného generátora batérií W/ 12V batérií s hlbokým cyklom: 5 krokov (s obrázkami)
DIY veľkosť a vybudovanie záložného generátora batérií W/ 12V batérií s hlbokým cyklom: *** POZNÁMKA: Pri práci s batériami a elektrickou energiou buďte opatrní. Neskratujte batérie. Používajte izolované nástroje. Pri práci s elektrickou energiou dodržiavajte všetky bezpečnostné pravidlá. *** Buďte pripravení na to, ako sa nabudúce vybije prúd s pohotovostnou batériou