INHOUDSOPGAWE:
- Stap 1: Inleiding
- Stap 2: Maniere om die ESP32 wakker te maak
- Stap 3: Timer
- Stap 4: Eksterne wakker word (ext0)
- Stap 5: Eksterne wakker word (uitbreiding1)
- Stap 6: ULP Coprocessor Wakeup
- Stap 7: Raakblad
- Stap 8: Gaan na die diep slaapmodus
- Stap 9: Hier is 'n paar meer belangrike inligting
- Stap 10: Demonstrasie
- Stap 11: WiFi NodeMCU-32S ESP-WROOM-32
- Stap 12: Montering
- Stap 13: Programmeer
- Stap 14: Biblioteek benodig
- Stap 15: Biblioteke en veranderlikes
- Stap 16: Opstel
- Stap 17: Lus, terugbel en konfigureer vertoon
- Stap 18: Print_wakeup_reason (weet wat die oorsaak van die ontwaking is)
- Stap 19: Print_wakeup_touchpad (ken die GPIO Touch)
- Stap 20: Laai die lêers af
Video: Bespaar batterylewe met diep slaap: 20 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
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
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
Die video wys hoe die program werk volgens die beeld.
Stap 11: WiFi NodeMCU-32S ESP-WROOM-32
Stap 12: Montering
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
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
EK NEE
Aanbeveel:
Hoe om die batterylewe van AAA -flitse te verdriedubbel: 3 stappe
Hoe om die batterylewe van AAA -flitse te verdriedubbel: As u 3W LED -flitse gebruik wat deur AAA -batterye aangedryf word, sal u verwag dat dit ongeveer 30 minute sal duur. Daar is 'n manier om die werktyd te verdriedubbel met behulp van AA -batterye, wat ek u sal wys deur 'n AA -batteryhouer daaraan aan te sluit
Zombie -opsporing van slim veiligheidsuil (diep leer): 10 stappe (met foto's)
Zombie Detecting Smart Security Uil (Deep Learning): Hallo almal, welkom by T3chFlicks! In hierdie Halloween -tutoriaal sal ons jou wys hoe ons 'n super -spookagtige kinkel op 'n alledaagse huishoudelike klassieker plaas: die veiligheidskamera. Hoe ?! Ons het 'n nagvisuil gemaak wat beeldverwerking gebruik om mense op te spoor
Weerstasie: ESP8266 Met diep slaap, SQL, grafiek volgens fles en plots: 3 stappe
Weerstasie: ESP8266 Met diep slaap, SQL, grafiek deur fles en plots: sou dit lekker wees om die temperatuur, humiditeit of ligintensiteit op u balkon te weet? Ek weet ek sou. Ek het dus 'n eenvoudige weerstasie gemaak om sulke data te versamel. Die volgende afdelings is die stappe wat ek geneem het om een te bou: laat ons begin
ESP-01 bewegingsensor met diep slaap: 5 stappe
ESP-01 Bewegingsensor met diep slaap: Ek het gewerk aan die maak van tuisgemaakte bewegingsensors wat 'n e-pos stuur wanneer dit geaktiveer word. Daar is baie instruksies en ander voorbeelde om dit te doen. Ek moes dit onlangs doen met 'n battery -aangedrewe PIR -bewegingsensor en 'n ESP
Hoe u 'n temperatuursensor kan hack vir 'n langer batterylewe: 4 stappe
Hoe om 'n temperatuursensor te kap vir 'n langer batterylewe: Die Inkbird IBS-TH1 is 'n wonderlike klein toestel om temperatuur en humiditeit oor 'n paar uur of dae aan te meld. Dit kan ingestel word om elke sekonde tot elke 10 minute aan te meld, en dit rapporteer die data via Bluetooth LE aan 'n Android- of iOS -slimfoon. Die app