Sisukord:

Aku säästmine sügava unega: 20 sammu
Aku säästmine sügava unega: 20 sammu

Video: Aku säästmine sügava unega: 20 sammu

Video: Aku säästmine sügava unega: 20 sammu
Video: Riigikogu 16.11.2022 2024, November
Anonim
Image
Image
ESP32 äratamise viisid
ESP32 äratamise viisid

Kas olete huvitatud aku kasutamisest oma ESP32 -ga? Kui jah, siis arutan täna selle teema kohta olulist tehnilist teavet. Me teame, et see mikrokontroller kulutab teabe edastamisel palju energiat. See tarbib ligi 190 milliampi. Selles videos näitan, kuidas säästa ESP32 energiat nn "DEEP SLEEP" funktsiooniga. Seadistame kiibi sellesse režiimi sisenema, õpime sellest režiimist väljumise viise ja loome näite, mis näitab kolme erinevat viisi ESP32 äratamiseks.

Oluline on meeles pidada, et raadio kulutab palju energiat, mitte protsessor. Energiasääst on väga oluline. Seda seetõttu, et lõpp-punktid (ahelad, mis saadavad teavet) on sageli patareitoitega ja peaksid kestma kuni viis aastat. Mõned tootjad lubavad kestust kuni kümme aastat ja see kehtib kõrgekvaliteediliste akude kohta, mis ei kasuta lõpp -punkte nii palju. Kõigil muudel juhtudel soovitan teil vooluringist energia säästmiseks kasutada sügavat unerežiimi.

Samm 1: Sissejuhatus

ESP32-l on energiasäästurežiim „Deep Sleep“. Selles režiimis on protsessorid, enamik RAM -i ja kõik digitaalse kellaga välisseadmed välja lülitatud. Ainsad kiibi osad, mida saab veel ühendada, on RTC kontroller, RTC välisseadmed (sh ULP kaasprotsessor) ja RTC mälud.

Meil on mitu võimalust ESP32 äratamiseks unes. Äratusallikaid saab seadistada igal ajal enne sügava unerežiimi sisenemist.

Samm: ESP32 äratamise viisid

ESP32 äratamiseks on viis võimalust:

• Taimer

• Väline äratus (ext0)

• Väline äratus (ext1)

• ULP kaasprotsessori äratus

• Puuteplaat

3. samm: taimer

RTC kontrolleril on sisseehitatud taimer, mida saab kasutada kiibi aktiveerimiseks pärast etteantud ajavahemikku. Aeg on täpsustatud mikrosekundi täpsusega.

esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)

time_in_us> on aeg mikrosekundites

4. samm: väline ärkamine (ext0)

RTC IO moodul sisaldab loogikat häire käivitamiseks, kui üks RTC GPIO -st siseneb eelmääratud loogikatasandile. RTC IO on osa RTC välisseadmete toitevaldkonnast, seega hoitakse RTC välisseadmeid sügava une ajal elus, kui seda aktiveerimisallikat soovitakse.

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int tase)

gpio_num> GPIO number, mida kasutatakse aktiveerimisallikana. Kasutada saab ainult RTC-funktsionaalseid GPIO-sid: 0, 2, 4, 12-15, 25-27, 32-39.

tase> sisendtase, mis käivitab häire (0 = LOW, 1 = HIGH)

5. samm: väline ärkamine (ext1)

RTC kontroller sisaldab loogikat äratuskella käivitamiseks mitme RTC GPIO abil.

esp_deep_sleep_enable_ext1_wakeup (uint64_t mask, esp_ext1_wakeup_mode_t režiim)

mask> GPIO numbrite bitimask, mis põhjustab aktiveerimise. Selles bitikaardis saab kasutada ainult RTC-toega GPIO-sid: 0, 2, 4, 12-15, 25-27, 32-39.

režiim> valige aktiveerimistingimuste määramiseks kasutatav loogikafunktsioon:

• ESP_EXT1_WAKEUP_ALL_LOW: ärkab, kui kõik valitud GPIOd on LOW

• ESP_EXT1_WAKEUP_ANY_HIGH: ärkab, kui mõni valitud GPIO on KÕRGE

6. samm: ULP kaasprotsessori äratus

ULP kaasprotsessor võib töötada, kui kiip on sügavas unerežiimis ja seda saab kasutada andurite otsimiseks, ADC või mahtuvusliku puuteanduri väärtuste jälgimiseks ja kiibi aktiveerimiseks konkreetse sündmuse tuvastamisel.

ULP kaasprotsessor on osa RTC välisseadmete toitevaldkonnast ja käivitab aeglase mäluga RTC salvestatud programmi. Seetõttu aktiveeritakse RTC välisseadmed ja RTC aeglane mälu sügava une ajal, kui seda aktiveerimisrežiimi nõutakse.

Samm: puuteplaat

RTC kontroller sisaldab loogikat häire käivitamiseks, kasutades mahtuvuslikke puutetundlikke andureid. Puutepinna määratlus on aga erinev. Peame iga soovitud tihvti jaoks kasutama katkestust.

Pärast katkestuste seadistamist lubasime andurite kasutamiseks äratusrežiimi.

// Puuteplaadi seadistamine äratusallikaks esp_sleep_enable_touchpad_wakeup ();

8. samm: sisenemine sügavasse unerežiimi

Pärast äratusrežiimi seadistamist piisab ühest käsklusest, millega panna ESP32 sügavasse unerežiimi (kulutades 2,5 μA või vähem). Rõhutan siinkohal, et see kulu tuleb ESP kiibist, mitte plaadilt, kuna viimane kulutab rohkem.

esp_deep_sleep_start ();

Sellest käsklusest jääb ESP32 magama ega täida näiteks järgmisi koodiridu.

Tähtis: kõik äratusseaded tuleb teha enne ülaltoodud käsu täitmist.

Samm: siin on veel mõnda olulist teavet

Siin on veel mõnda olulist teavet
Siin on veel mõnda olulist teavet

Allolev kõne tagastab ESP32 äratuse põhjuse.

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

esp_sleep_get_wakeup_cause ();

Kui määrame puuteplaadi abil äratuse, saame käsu kaudu taastada, milline GPIO puudutus toimus

esp_sleep_get_touchpad_wakeup_status ();

Iga kord, kui ESP32 ärkab, vaatab see seadistuse uuesti läbi. Seega naasevad kõik RTC mälus määratlemata muutujad oma olekusse.

Muutujate mällu hoidmiseks ka pärast uinumist kasutage allolevas näites muutujadeklaratsiooni:

// RTC_DATA_ATTR saab muuta ja mälestada RTCRTC_DATA_ATTR int bootCount = 0;

10. samm: demonstratsioon

Demonstratsioon
Demonstratsioon

Videol on näidatud, et programm töötab vastavalt pildile.

Samm 11: WiFi-sõlmMCU-32S ESP-WROOM-32

WiFi-sõlmMCU-32S ESP-WROOM-32
WiFi-sõlmMCU-32S ESP-WROOM-32

12. samm: kokkupanek

Kokkupanek
Kokkupanek

Samm 13: Programmeerimine

Nüüd teeme programmi, kus konfigureerime ESP32 sügava unerežiimi sisenema. See äratatakse kolmel erineval viisil: üks välise äratuse jaoks (ext0), teine taimeriks ja teine puuteplaadi jaoks. Nad ei saa koos töötada, seega kasutame ärkaja konfigureerimiseks muutujat, mis on loendur ESP32 Bootile antud kordade arvule.

14. samm: nõutav raamatukogu

Raamatukogu nõutav
Raamatukogu nõutav

OLED -ekraani juhtimiseks vajame välist raamatukogu. Selleks laadime alla U8g2 kogu.

Avage Arduino IDE -s visandimenüü >> Kaasa raamatukogu >> Raamatukogude haldamine….

15. samm: raamatukogud ja muutujad

Oleme lisanud raamatukogu OLED -ekraani juhtimiseks, samuti ekraanikontrolleri eksemplari konstruktori. Samuti eraldame muutuja RTC mällu. Seadistame puutetundlikkuse vastuvõtmise tundlikkuse, mikrosekundilise teisendusteguri sekunditeks ja aja, mil ESP32 läheb unerežiimi (sekundites).

#include // biblioteca para controle do display oled

// konstruktor da instancia do controlador do display // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C kuva (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR mälu ja RTC_DATA_ATTR int bootCount = 0; // sensibilidade para aceitação do toque #define Threshold 40 // fator de conversã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

16. samm: seadistamine

Seadistuses suurendame alglaadimise kordade arvu. Nimetame funktsiooni Boot motiivi printimiseks. Kui alglaadimisnumber on PAR, seadistame ESP32 ärkama nupu (EXT0) kaudu. Kui see on 3 kordne, seadistame ESP32 äratama määratud aja pärast. Vastasel juhul seadistame ESP32 äratamiseks mahtuvuslikud puutepoldid. Lõpuks seadisime puuteplaadi äratusallikaks ja sundisime ESP32 lülituma unerežiimi.

void setup () {Serial.begin (115200); viivitus (1000); // juurdekasv o number de vezes que o BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se o number de 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 = kõrge, 0 = madal} // se mitme konfiguratsiooni jaoks 3 või ESP32 parameeter depois de um tempo definido else if (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // caso contrario configuramos os pinos de touch kapacity para despertar o ESP32 else {// Seadistuse katkestamine puuteplaadil 5 (GPIO12) touchAttachInterrupt (T5, tagasihelistamine, lävi); // Puuteplaadi seadistamine äratusallikaks esp_sleep_enable_touchpad_wakeup (); } Serial.println (“entrando em modo sleep”); esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}

17. toiming: silmuse, tagasihelistamise ja kuvamise seadistamine

Loopis pole meil midagi teha. Seejärel katkestame tagasihelistamise, kui meil on katkestamise ajal midagi ette võtta. Seadistuse configureDisplay puhul lähtestame ekraani ja seadistame mõned parameetrid. Prindime ekraanile käivitamise kordade arvu.

// nada a se fazer no loopvoid loop () {} // callback das interrupções void callback () {// caso queira fazer algo ao ocorrer a interrupção} void configureDisplay () {// inicializa o display and configura alguns parametros display. algus (); display.setPowerSave (0); // modo powerSave (0-Off? 1-On) display.setFont (u8x8_font_torussansbold8_u); // fonte utilizada // imprime no display os number de vezes que aconteceu või BOOT display.drawString (0, 0, "BOOT NUM:"); display.drawString (0, 2, string (bootCount).c_str ()); display.drawString (0, 4, "MOTIVO:"); }

Samm 18: Print_wakeup_reason (teades ärkamise põhjust)

Siin on meil funktsioon printida ESP32 ärkamise põhjus. Kontrollige tihvti ja printige ekraanile.

// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Stringi põhjus = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // taastada põhjuslik lüliti (wakeup_reason) {case 1: reason = "EXT0 RTC_IO BTN"; murda; juhtum 2: põhjus = "EXT1 RTC_CNTL"; murda; juhtum 3: põhjus = "TIMER"; murda; juhtum 4: põhjus = "TOUCHPAD"; murda; juhtum 5: põhjus = "ULP PROGRAMM"; murda; vaikimisi: põhjus = "NO DS PÕHJUS"; murda; } Serial.println (põhjus); display.clearLine (6); // Apaga a linha 6 do 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 no display}}

Samm 19: Print_wakeup_touchpad (tundke GPIO Touchi)

Selles etapis on meil funktsioon puudutatud tihvti printimiseks. Taastasime ESP32 äratanud GPIO ja printisime selle ekraanile.

// função para imprimir o pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // taastamine või GPIO que despertou o ESP32 String GPIO = ""; lüliti (touchPin) {juhtum 0: GPIO = "4"; murda; juhtum 1: GPIO = "0"; murda; juhtum 2: GPIO = "2"; murda; juhtum 3: GPIO = "15"; murda; juhtum 4: GPIO = "13"; murda; juhtum 5: GPIO = "12"; murda; juhtum 6: GPIO = "14"; murda; juhtum 7: GPIO = "27"; murda; juhtum 8: GPIO = "33"; murda; juhtum 9: GPIO = "32"; murda; vaikimisi: Serial.println ("Äratus mitte puuteplaadi abil"); murda; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // näidake ja näidake 7 display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}

Samm: laadige failid alla

PDF

INO

Soovitan: