Satura rādītājs:

Akumulatora darbības laika taupīšana ar dziļu miegu: 20 soļi
Akumulatora darbības laika taupīšana ar dziļu miegu: 20 soļi

Video: Akumulatora darbības laika taupīšana ar dziļu miegu: 20 soļi

Video: Akumulatora darbības laika taupīšana ar dziļu miegu: 20 soļi
Video: AEAC ID207 Smart Watch Review: A Budget-Friendly Fitness Tracker with Impressive Features 2024, Novembris
Anonim
Image
Image
ESP32 modināšanas veidi
ESP32 modināšanas veidi

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

Šeit ir vēl kāda svarīga informācija
Š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

Demonstrācija
Demonstrācija

Video parāda, ka programma darbojas saskaņā ar attēlu.

11. solis: WiFi mezglsMCU-32S ESP-WROOM-32

WiFi mezglsMCU-32S ESP-WROOM-32
WiFi mezglsMCU-32S ESP-WROOM-32

12. solis: montāža

Montāža
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

Nepieciešama bibliotēka
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

PDF

ES NĒ

Ieteicams: