Satura rādītājs:
- 1. darbība. Ievads
- 2. darbība. ESP32 modināšanas veidi
- 3. solis: taimeris
- 4. darbība. Ārējā modināšana (ext0)
- 5. darbība. Ārējā modināšana (ext1)
- 6. darbība: ULP kopprocesora modināšana
- 7. darbība: skārienpaliktnis
- 8. solis: pārejiet dziļā miega režīmā
- 9. solis. Šeit ir vēl kāda svarīga informācija
- 10. solis: demonstrācija
- 11. solis: WiFi mezglsMCU-32S ESP-WROOM-32
- 12. solis: montāža
- 13. solis: programma
- 14. darbība. Nepieciešama bibliotēka
- 15. darbība: bibliotēkas un mainīgie
- 16. darbība: iestatīšana
- 17. darbība: cilpa, atzvanīšana un displeja konfigurēšana
- 18. solis: Print_wakeup_reason (zinot atmodas cēloni)
- 19. solis: Print_wakeup_touchpad (ziniet GPIO Touch)
- 20. darbība: lejupielādējiet failus
Video: Akumulatora darbības laika taupīšana ar dziļu miegu: 20 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Vai vēlaties izmantot akumulatoru kopā ar ESP32? Ja tā, es šodien apspriedīšu svarīgu tehnisku informāciju par šo tēmu. Mēs zinām, ka šis mikrokontrolleris tērē daudz enerģijas, pārsūtot informāciju. Tas patērē gandrīz 190 miliamperus. Šajā video es parādīšu, kā ietaupīt enerģiju no ESP32, izmantojot tā saukto "DEEP SLEEP" funkciju. Mēs iestatīsim mikroshēmu, lai tā ieietu šajā režīmā, uzzināsim, kā iziet no šī režīma, un izveidosim piemēru, kurā parādīti trīs dažādi veidi, kā aktivizēt ESP32.
Ir svarīgi atcerēties, ka radio tērē daudz enerģijas, nevis procesors. Enerģijas taupīšana ir ļoti svarīga. Tas ir tāpēc, ka galapunkti (shēmas, kas sūta informāciju) bieži tiek darbināti ar baterijām, un tiem vajadzētu kalpot līdz pieciem gadiem. Ir daži ražotāji, kas sola ilgumu līdz desmit gadiem, un tas attiecas uz augstas kvalitātes baterijām, kuras neizmanto tik daudz parametru. Visos citos gadījumos es iesaku izmantot dziļo miegu, lai taupītu enerģiju no ķēdes.
1. darbība. Ievads
ESP32 ir enerģijas taupīšanas režīms ar nosaukumu “Deep Sleep”. Šajā režīmā procesori, lielākā daļa operatīvās atmiņas un visas ciparu pulksteņa perifērijas ierīces ir izslēgtas. Vienīgās mikroshēmas daļas, kuras joprojām var pievienot, ir RTC kontrolieris, RTC perifērijas ierīces (ieskaitot ULP kopprocesoru) un RTC atmiņas.
Mums ir vairāki veidi, kā pamodināt ESP32 miega laikā. Pārslēgšanās avotus var iestatīt jebkurā laikā, pirms ieslēdzat dziļā miega režīmu.
2. darbība. ESP32 modināšanas veidi
Ir pieci veidi, kā aktivizēt ESP32:
• Taimeris
• Ārējā modināšana (ext0)
• Ārējā modināšana (ext1)
• ULP kopprocesora modināšana
• Skārienpaliktnis
3. solis: taimeris
RTC kontrolierim ir iebūvēts taimeris, ko var izmantot, lai aktivizētu mikroshēmu pēc iepriekš noteikta laika perioda. Laiks ir norādīts ar mikrosekundes precizitāti.
esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)
time_in_us> ir laiks mikrosekundēs
4. darbība. Ārējā modināšana (ext0)
RTC IO modulī ir loģika, kas aktivizē trauksmi, kad viens no RTC GPIO nonāk iepriekš noteiktā loģikas līmenī. RTC IO ir daļa no RTC perifērijas ierīču jaudas domēna, tāpēc, ja tiek pieprasīts šis aktivizācijas avots, RTC perifērijas ierīces tiks saglabātas dzīvas dziļā miega laikā.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int līmenis)
gpio_num> GPIO numurs, ko izmanto kā aktivizācijas avotu. Var izmantot tikai RTC funkcionālus GPIO: 0, 2, 4, 12-15, 25-27, 32-39.
līmenis> ievades līmenis, kas aktivizēs trauksmi (0 = LOW, 1 = HIGH)
5. darbība. Ārējā modināšana (ext1)
RTC kontrolieris satur loģiku, lai aktivizētu modinātāju, izmantojot vairākus RTC GPIO.
esp_deep_sleep_enable_ext1_wakeup (maska uint64_t, esp_ext1_wakeup_mode_t)
maska> GPIO numuru bitu maska, kas izraisīs aktivizēšanu. Šajā bitkartē var izmantot tikai ar RTC iespējotus GPIO: 0, 2, 4, 12-15, 25-27, 32-39.
režīms> izvēlieties loģikas funkciju, ko izmanto aktivizācijas nosacījuma noteikšanai:
• ESP_EXT1_WAKEUP_ALL_LOW: pamostas, kad visi atlasītie GPIO ir LOW
• ESP_EXT1_WAKEUP_ANY_HIGH: pamostas, kad kāds no atlasītajiem GPIO ir HIGH
6. darbība: ULP kopprocesora modināšana
ULP kopprocesors var darboties, kamēr mikroshēma atrodas dziļā miega režīmā, un to var izmantot, lai meklētu sensorus, uzraudzītu ADC vai kapacitatīvo skārienjutīgo sensoru vērtības un aktivizētu mikroshēmu, kad tiek konstatēts konkrēts notikums.
ULP kopprocesors ir daļa no RTC perifērijas ierīču jaudas domēna un palaiž lēnas atmiņas RTC saglabāto programmu. Tāpēc RTC perifērijas ierīces un RTC lēnā atmiņa tiks aktivizētas dziļā miega laikā, ja tiek pieprasīts šis aktivizācijas režīms.
7. darbība: skārienpaliktnis
RTC kontrolieris satur loģiku, lai aktivizētu trauksmi, izmantojot kapacitatīvos skārienjutīgos sensorus. Skārientapu definīcija tomēr ir atšķirīga. Mums ir jāizmanto pieskāriena pārtraukšana katrai vēlamajai tapai.
Pēc pārtraukumu iestatīšanas mēs aktivizējām modināšanas režīmu, lai izmantotu sensorus.
// Konfigurēt skārienpaliktni kā modināšanas avotu esp_sleep_enable_touchpad_wakeup ();
8. solis: pārejiet dziļā miega režīmā
Pēc modināšanas režīma iestatīšanas pietiek ar vienu komandu, lai ESP32 ieslēgtu dziļā miega režīmā (tērējot 2,5 μA vai mazāk). Šeit es uzsveru, ka šie izdevumi ir no ESP mikroshēmas, nevis no plāksnes, jo pēdējā tērē vairāk.
esp_deep_sleep_start ();
No šīs komandas ESP32 aizmieg un, piemēram, neizpilda nākamās koda rindas.
Svarīgi! Pirms izpildīt iepriekš minēto komandu, ir jāveic visi modināšanas iestatījumi.
9. solis. Šeit ir vēl kāda svarīga informācija
Tālāk norādītais zvans atgriež ESP32 modināšanas cēloni.
1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_cause ();
Ja mēs iestatām modināšanu ar skārienpaliktni, mēs varam atgūt, kurš GPIO pieskāriens noticis, izmantojot komandu
esp_sleep_get_touchpad_wakeup_status ();
Katru reizi, kad ESP32 pamostas, tas vēlreiz veiks iestatīšanas ciklu. Tādējādi visi mainīgie, kas nav definēti RTC atmiņā, atgriezīsies savā sākotnējā stāvoklī.
Lai saglabātu mainīgos atmiņā pat pēc aizmigšanas, izmantojiet mainīgā deklarāciju zemāk esošajā piemērā:
// RTC_DATA_ATTR var mainīt un atcerēties RTCRTC_DATA_ATTR int bootCount = 0;
10. solis: demonstrācija
Video parāda, ka programma darbojas saskaņā ar attēlu.
11. solis: WiFi mezglsMCU-32S ESP-WROOM-32
12. solis: montāža
13. solis: programma
Tagad mēs izveidosim programmu, kurā konfigurēsim ESP32, lai tas pārietu dziļā miega režīmā. Tas tiks pamodināts trīs dažādos veidos: viens ārējai modināšanai (ext0), otrs taimerim un otrs skārienpaliktnim. Viņi nevar strādāt kopā, tāpēc, lai konfigurētu pamošanās veidu, mēs izmantosim mainīgo, kas būs skaitītājs, cik reižu ESP32 deva Boot.
14. darbība. Nepieciešama bibliotēka
Lai kontrolētu OLED displeju, mums ir nepieciešama ārēja bibliotēka. Šim nolūkam mēs lejupielādēsim U8g2 bibliotēku.
Arduino IDE dodieties uz izvēlni Skice >> Iekļaut bibliotēku >> Pārvaldīt bibliotēkas….
15. darbība: bibliotēkas un mainīgie
Mēs esam iekļāvuši bibliotēku, lai kontrolētu OLED displeju, kā arī displeja kontroliera instances konstruktoru. Mēs arī piešķiram mainīgo RTC atmiņā. Mēs iestatījām jutību pret pieskārienu, mikrosekundes konversijas koeficientu sekundēm un laiku, kad ESP32 pāriet miega režīmā (sekundēs).
#include // biblioteca para controle do display oled
// construtor da instancia do controlador do display // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C displejs (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR var mainīt un atcerēties 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
16. darbība: iestatīšana
Iestatīšanas laikā mēs palielinām sāknēšanas reižu skaitu. Mēs izsaucam funkciju, lai izdrukātu sāknēšanas motīvu. Ja sāknēšanas numurs ir PAR, mēs iestatām, lai ESP32 pamostos, izmantojot pogu (EXT0). Ja tas ir 3 reizinājums, mēs iestatām, lai ESP32 pamostos pēc noteiktā laika. Pretējā gadījumā mēs uzstādījām kapacitatīvās skārientapiņas, lai pamodinātu ESP32. Visbeidzot, mēs iestatījām skārienpaliktni kā modināšanas avotu un piespiedām ESP32 pāriet miega režīmā.
void setup () {Serial.begin (115200); kavēšanās (1000); // pieaugums vai skaits 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 = augsts, 0 = zems} // se vairāku konfigurāciju konfigurēšanai vai ESP32 paraugam depois de um temp 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 kapacitivo para despertar o ESP32 else {// Setup interrupt on Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, atzvanīšana, slieksnis); // Konfigurēt skārienpaliktni kā modināšanas avotu esp_sleep_enable_touchpad_wakeup (); } Serial.println (“entrando em modo sleep”); esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}
17. darbība: cilpa, atzvanīšana un displeja konfigurēšana
Cilpā mums nav ko darīt. Pēc tam mēs pārtraucam atzvanīšanu, ja mums ir kaut kas jādara, kad notiek pārtraukums. Attiecībā uz configureDisplay mēs inicializējam displeju un konfigurējam dažus parametrus. Mēs drukājam uz ekrāna, cik reižu sāknēšana notika.
// nada a se fazer no loopvoid loop () {} // atzvanīšana das interrupções void callback () {// caso queira fazer algo ao ocorrer a interrupção} void configureDisplay () {// inicializa o display and configura alguns parametros display. sākt (); 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 o BOOT display.drawString (0, 0, "BOOT NUM:"); display.drawString (0, 2, virkne (bootCount).c_str ()); display.drawString (0, 4, "MOTIVO:"); }
18. solis: Print_wakeup_reason (zinot atmodas cēloni)
Šeit mums ir funkcija izdrukāt ESP32 pamošanās cēloni. Pārbaudiet tapu un izdrukājiet displejā.
// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Virknes iemesls = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // atjaunot slēdzi (wakeup_reason) {case 1: reason = "EXT0 RTC_IO BTN"; pārtraukums; 2. gadījums: iemesls = "EXT1 RTC_CNTL"; pārtraukums; 3. gadījums: iemesls = "TIMER"; pārtraukums; 4. gadījums: iemesls = "TOUCHPAD"; pārtraukums; 5. gadījums: iemesls = "ULP PROGRAMMA"; pārtraukums; noklusējums: iemesls = "NO DS CĒLOŅS"; pārtraukums; } Serial.println (iemesls); display.clearLine (6); // Apaga a linha 6 do displejs 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}}
19. solis: Print_wakeup_touchpad (ziniet GPIO Touch)
Tagad šajā solī mums ir funkcija izdrukāt pieskārienu. Mēs atguvām GPIO, kas pamodināja ESP32, un izdrukājām to displejā.
// função para imprimir o pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // atgūt vai GPIO que despertou o ESP32 String GPIO = ""; slēdzis (touchPin) {gadījums 0: GPIO = "4"; pārtraukums; 1. gadījums: GPIO = "0"; pārtraukums; 2. gadījums: GPIO = "2"; pārtraukums; 3. gadījums: GPIO = "15"; pārtraukums; 4. gadījums: GPIO = "13"; pārtraukums; 5. gadījums: GPIO = "12"; pārtraukums; 6. gadījums: GPIO = "14"; pārtraukums; 7. gadījums: GPIO = "27"; pārtraukums; 8. gadījums: GPIO = "33"; pārtraukums; 9. gadījums: GPIO = "32"; pārtraukums; noklusējums: Serial.println ("Wakeup not by touchpad"); pārtraukums; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // redziet 7 un parādiet display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}
20. darbība: lejupielādējiet failus
ES NĒ
Ieteicams:
Kā trīskāršot AAA lukturīšu akumulatora darbības laiku: 3 soļi
Kā trīskāršot AAA zibspuldzes akumulatora darbības laiku: Ja izmantojat 3 W LED zibspuldzes, kuras darbina AAA baterijas, paredzams, ka tās ilgs aptuveni 30 minūtes. Ir veids, kā trīskāršot darbības laiku, izmantojot AA baterijas, ko es jums parādīšu, pievienojot tam AA bateriju turētāju
Uzlauzt darbības kameras akumulatora darbības laiku: 4 soļi (ar attēliem)
Uzlauzt darbības kameras akumulatora darbības laiku: vai nu jums ir GoPro, Contour vai jebkura cita kamera, kas ir paredzēta jums! Videokameras baterijas bieži ir problēma. Vai nu jūs uzņemat garus videoklipus, un tie nav pietiekami ilgi, vai arī jūs vienkārši aizmirsāt to pilnībā uzlādēt. Varbūt tas ir ļoti labs
Meteoroloģiskā stacija: ESP8266 ar dziļu miegu, SQL, grafiku ar kolbu un zīmējumu: 3 soļi
Meteoroloģiskā stacija: ESP8266 Ar dziļu miegu, SQL, grafiku ar kolbu un zīmējumu: Vai būtu jautri uzzināt jūsu balkona temperatūru, mitrumu vai gaismas intensitāti? Es zinu, ka gribētu. Tāpēc es izveidoju vienkāršu laika staciju, lai savāktu šādus datus. Šīs sadaļas ir soļi, ko es veicu, lai izveidotu vienu. Sāksim
ESP-01 kustības sensors ar dziļu miegu: 5 soļi
ESP-01 kustības sensors ar dziļu miegu: esmu strādājis pie pašdarinātu kustības sensoru izgatavošanas, kas aktivizējot nosūta e-pasta ziņojumu. Ir daudz pamācību piemēru un citu piemēru, kā to izdarīt. Nesen man tas bija jādara, izmantojot ar akumulatoru darbināmu PIR kustības sensoru un ESP
Ūdens taupīšana lietus laikā: 6 soļi
Ūdens taupīšana lietus laikā: Nesen lietus laikā es pamanīju, ka mana sprinkleru sistēma turpināja pildīt savu uzdevumu, pat ja dārzā bija vairāk nekā pietiekami daudz ūdens. Kāpēc ne automātiski atspējot smidzinātāju lietus laikā