INHOUDSOPGAWE:

Bespaar batterylewe met diep slaap: 20 stappe
Bespaar batterylewe met diep slaap: 20 stappe

Video: Bespaar batterylewe met diep slaap: 20 stappe

Video: Bespaar batterylewe met diep slaap: 20 stappe
Video: 20 handige tips om beter te slapen | pas ze toe en zie het resultaat! 2024, Desember
Anonim
Image
Image
Maniere om die ESP32 wakker te maak
Maniere om die ESP32 wakker te maak

Stel u belang om 'n battery met u ESP32 te gebruik? As dit die geval is, bespreek ek vandag belangrike tegniese inligting oor hierdie onderwerp. Ons weet dat hierdie mikrobeheerder baie energie bestee wanneer dit inligting oordra. Dit verbruik ongeveer 190 miljard ampère. In hierdie video sal ek wys hoe u energie kan bespaar uit die ESP32 met die sogenaamde "DEEP SLEEP" -funksie. Ons stel die chip in om hierdie modus te betree, leer hoe om hierdie modus te verlaat en 'n voorbeeld te skep wat drie verskillende maniere toon om die ESP32 wakker te maak.

Dit is belangrik om te onthou dat die radio baie energie bestee, eerder as die verwerker. Energiebesparing is baie belangrik. Dit is omdat eindpunte (die kringe wat inligting stuur) dikwels battery-aangedrewe is en tot vyf jaar moet duur. Daar is 'n paar vervaardigers wat tot tien jaar lank belowe, en dit geld vir batterye van hoë gehalte wat nie die eindpunte soveel gebruik nie. In alle ander gevalle raai ek u aan om Deep Sleep te gebruik om energie uit u stroombaan te bespaar.

Stap 1: Inleiding

Die ESP32 het 'n kragbesparingsmodus, genaamd 'Deep Sleep'. In hierdie modus is die verwerkers, die meeste RAM en alle digitale toestelle met digitale klok afgeskakel. Die enigste dele van die chip wat nog verbind kan word, is die RTC -kontroleerder, RTC -randapparatuur (insluitend ULP -verwerker) en RTC -geheue.

Ons het verskillende maniere om die ESP32 wakker te maak as u slaap. Wakkerbronne kan te eniger tyd opgestel word voordat u die diepe slaapmodus betree.

Stap 2: Maniere om die ESP32 wakker te maak

Daar is vyf maniere om ESP32 wakker te maak:

• Timer

• Eksterne wek (ext0)

• Eksterne wek (uitbreiding1)

• ULP coprocessor wakker word

• Raakblad

Stap 3: Timer

Die RTC-beheerder het 'n ingeboude timer wat gebruik kan word om die chip na 'n voorafbepaalde tyd te aktiveer. Die tyd word gespesifiseer met 'n mikrosekonde -presisie.

esp_deep_sleep_enable_timer_wakeup (uint64_t tyd_in_us)

time_in_us> is die tyd in mikrosekondes

Stap 4: Eksterne wakker word (ext0)

Die RTC IO -module bevat logika om die alarm te aktiveer wanneer een van die RTC GPIO's 'n voorafbepaalde logiese vlak betree. Die RTC IO is deel van die kragdomein van die RTC -randapparatuur, dus word die RTC -randapparatuur lewendig gehou tydens diepe slaap as hierdie bron van aktivering aangevra word.

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int -vlak)

gpio_num> GPIO -nommer wat as aktiveringsbron gebruik word. Slegs RTC-funksionele GPIO's kan gebruik word: 0, 2, 4, 12-15, 25-27, 32-39.

vlak> insetvlak wat die alarm sal aktiveer (0 = LAAG, 1 = HOOG)

Stap 5: Eksterne wakker word (uitbreiding1)

Die RTC -beheerder bevat logika om die wekker te aktiveer met behulp van verskeie RTC GPIO's.

esp_deep_sleep_enable_ext1_wakeup (uint64_t masker, esp_ext1_wakeup_mode_t modus)

masker> bitmasker van GPIO -nommers wat aktiveer. Slegs RTC-geaktiveerde GPIO's kan in hierdie bitmap gebruik word: 0, 2, 4, 12-15, 25-27, 32-39.

modus> kies die logiese funksie wat gebruik word om die aktiveringstoestand te bepaal:

• ESP_EXT1_WAKEUP_ALL_LOW: ontwaak wanneer alle geselekteerde GPIO's LOW is

• ESP_EXT1_WAKEUP_ANY_HIGH: word wakker wanneer enige van die geselekteerde GPIO's HOOG is

Stap 6: ULP Coprocessor Wakeup

Die ULP -verwerker kan werk terwyl die chip in diepe slaap is, en kan gebruik word om sensors te soek, ADC- of kapasitiewe aanraaksensorwaardes te monitor en die chip te aktiveer wanneer 'n spesifieke gebeurtenis opgespoor word.

Die ULP -verwerker is deel van die kragdomein van die RTC -randapparatuur en voer die program uit wat in RTC met stadige geheue gestoor is. Daarom sal RTC -randapparatuur en RTC -stadige geheue tydens diepe slaap geaktiveer word as hierdie aktiveringsmodus versoek word.

Stap 7: Raakblad

Die RTC -beheerder bevat logika om die alarm te aktiveer met behulp van die kapasitiewe aanraaksensors. Die definisie van die aanraakpen is egter anders. Ons moet die aanraakonderbreking vir elk van die gewenste penne gebruik.

Nadat ons die onderbrekings gestel het, het ons die wekmodus moontlik gemaak om die sensors te gebruik.

// Stel Touchpad op as wekbron esp_sleep_enable_touchpad_wakeup ();

Stap 8: Gaan na die diep slaapmodus

Nadat u 'n wekmodus ingestel het, is 'n enkele opdrag om die ESP32 in die diepe slaapmodus te plaas (2,5 μA of minder), genoeg. Ek beklemtoon hier dat hierdie uitgawe afkomstig is van die ESP -chip en nie van die plaat nie, aangesien laasgenoemde meer spandeer.

esp_deep_sleep_start ();

Vanuit hierdie opdrag raak die ESP32 aan die slaap en voer dit byvoorbeeld nie die volgende reëls kode uit nie.

Belangrik: Alle wekinstellings moet gemaak word voordat bogenoemde opdrag uitgevoer kan word.

Stap 9: Hier is 'n paar meer belangrike inligting

Hier is 'n paar meer belangrike inligting
Hier is 'n paar meer belangrike inligting

Die oproep hieronder gee die oorsaak van ESP32 -wekking weer.

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

esp_sleep_get_wakeup_cause ();

As ons die wakker met die raakvlak stel, kan ons herstel watter GPIO die aanraking plaasgevind het deur die opdrag

esp_sleep_get_touchpad_wakeup_status ();

Elke keer as die ESP32 wakker word, gaan dit weer deur die opstelling. Alle veranderlikes wat nie in die RTC -geheue gedefinieer is nie, sal dus terugkeer na hul tuisstaat.

Om die veranderlikes in die geheue te hou, selfs nadat u aan die slaap geraak het, gebruik die veranderlike verklaring in die onderstaande voorbeeld:

// RTC_DATA_ATTR 'n ander weergawe van geheue RTCRTC_DATA_ATTR int bootCount = 0;

Stap 10: Demonstrasie

Demonstrasie
Demonstrasie

Die video wys hoe die program werk volgens die beeld.

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

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

Stap 12: Montering

Vergadering
Vergadering

Stap 13: Programmeer

Ons maak nou 'n program waar ons die ESP32 sal instel om in die diepe slaapmodus te gaan. Dit word op drie verskillende maniere wakker gemaak: een vir eksterne wekking (ext0), een vir timer en een vir touchpad. Hulle kan nie saamwerk nie, so ons sal 'n veranderlike gebruik wat 'n teller is vir die aantal kere wat die ESP32 Boot gegee het om die manier om wakker te word, op te stel.

Stap 14: Biblioteek benodig

Biblioteek benodig
Biblioteek benodig

Om die OLED -skerm te beheer, benodig ons 'n eksterne biblioteek. Hiervoor sal ons die U8g2 -biblioteek aflaai.

Gaan in die Arduino IDE na die Skets -menu >> Sluit biblioteek in >> Bestuur biblioteke….

Stap 15: Biblioteke en veranderlikes

Ons het die biblioteek ingesluit om die OLED -skerm te beheer, sowel as 'n konstruktor van die display controller -instansie. Ons ken ook die veranderlike in die RTC -geheue toe. Ons stel die sensitiwiteit vir aanvaarding van aanraking, die mikrosekonde -omskakelingsfaktor vir sekondes en die tyd wat die ESP32 in die slaapmodus gaan (in sekondes) in.

#include // biblioteca para control do display oled

// installeerder om die skerm te kontroleer // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C -skerm (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR 'n ander weergawe van die geheue RTC 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

Stap 16: Opstel

In Setup verhoog ons die aantal kere wat opstart plaasgevind het. Ons noem die funksie om die Boot -motief te druk. As die opstartnommer PAR is, stel ons die ESP32 in om wakker te word via die (EXT0) -knoppie. As dit 'n veelvoud van 3 is, stel ons die ESP32 in om wakker te word na 'n vasgestelde tyd. Andersins stel ons die kapasitiewe aanraakpenne op om die ESP32 wakker te maak. Uiteindelik stel ons die Touchpad as 'n wekbron in en dwing die ESP32 om in die slaapmodus te gaan.

ongeldige opstelling () {Serial.begin (115200); vertraging (1000); // inkrementa o numero de vezes que o BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se nommer 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 = Hoog, 0 = Laag} // se vir veelvuldige drie konfigurasies of ESP32 vir 'n tempo -definisie anders as (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // caso contrario configuramos os pinos de touch capacitivo para despertar of ESP32 else {// Setup interrupt on Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, callback, Threshold); // Stel Touchpad op as 'n wekbron esp_sleep_enable_touchpad_wakeup (); } Serial.println (“entrando em modo sleep”); esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}

Stap 17: Lus, terugbel en konfigureer vertoon

In die Loop het ons niks om te doen nie. Ons onderbreek dan terugbel as ons iets te doen het as die onderbreking plaasvind. Met betrekking tot configureDisplay, initialiseer ons die skerm en stel ons 'n paar parameters op. Ons druk die aantal kere wat die opstart plaasgevind het op die skerm af.

// 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. begin (); 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:"); }

Stap 18: Print_wakeup_reason (weet wat die oorsaak van die ontwaking is)

Hier het ons die funksie om die oorsaak van die ESP32 -ontwaking af te druk. Gaan die speld na en druk op die skerm.

// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; String rede = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // herwin 'n oorsaak van 'n wanhopige skakelaar (wakeup_reason) {saak 1: rede = "EXT0 RTC_IO BTN"; breek; geval 2: rede = "EXT1 RTC_CNTL"; breek; saak 3: rede = "TIMER"; breek; saak 4: rede = "TOUCHPAD"; breek; saak 5: rede = "ULP PROGRAM"; breek; default: reason = "NO DS OORSAK"; breek; } Serial.println (rede); display.clearLine (6); // om 'n lyn 6 te vertoon, 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}}

Stap 19: Print_wakeup_touchpad (ken die GPIO Touch)

In hierdie stap het ons die funksie om die pen wat daaraan geraak is, af te druk. Ons het die GPIO herstel wat die ESP32 wakker gemaak het en dit op die skerm gedruk.

// função para imprimir o pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // herstel van GPIO que despertou van ESP32 String GPIO = ""; skakelaar (touchPin) {case 0: GPIO = "4"; breek; geval 1: GPIO = "0"; breek; geval 2: GPIO = "2"; breek; geval 3: GPIO = "15"; breek; geval 4: GPIO = "13"; breek; saak 5: GPIO = "12"; breek; saak 6: GPIO = "14"; breek; saak 7: GPIO = "27"; breek; saak 8: GPIO = "33"; breek; saak 9: GPIO = "32"; breek; standaard: Serial.println ("Wakeup nie deur touchpad"); breek; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // of na 7 kan display.drawString (0, 7, "GPIO:") vertoon word; display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}

Stap 20: Laai die lêers af

PDF

EK NEE

Aanbeveel: