Përmbajtje:

Kursimi i jetës së baterisë me gjumë të thellë: 20 hapa
Kursimi i jetës së baterisë me gjumë të thellë: 20 hapa

Video: Kursimi i jetës së baterisë me gjumë të thellë: 20 hapa

Video: Kursimi i jetës së baterisë me gjumë të thellë: 20 hapa
Video: 5 gabimet më të mëdha të prindërve që dëmtojnë shendetin mendor të fëmijëve 2024, Dhjetor
Anonim
Image
Image
Mënyrat për të zgjuar ESP32
Mënyrat për të zgjuar ESP32

A jeni i interesuar të përdorni një bateri me ESP32 tuaj? Nëse është kështu, unë do të diskutoj sot disa informacione të rëndësishme teknike në lidhje me këtë temë. Ne e dimë se ky mikrokontrollues shpenzon shumë energji kur transmeton informacion. Konsumon afër 190 miliamps. Në këtë video, unë do të tregoj se si të kurseni energji nga ESP32 me të ashtuquajturin funksion "DEEP SLEEP". Ne do ta vendosim çipin të hyjë në këtë mënyrë, të mësojmë mënyrat për të dalë nga kjo mënyrë dhe të krijojmë një shembull që tregon tre mënyra të ndryshme për të zgjuar ESP32.

Importantshtë e rëndësishme të mbani mend se radio shpenzon shumë energji, sesa procesori. Kursimi i energjisë është shumë i rëndësishëm. Kjo ndodh sepse Pikat Fundore (qarqet që dërgojnë informacion) shpesh janë të mundësuar nga bateria dhe duhet të zgjasin deri në pesë vjet. Ka disa prodhues që premtojnë kohëzgjatje deri në dhjetë vjet, dhe kjo vlen për bateri me cilësi të lartë që nuk përdorin aq shumë Pikat Fundore. Në të gjitha rastet e tjera, unë ju këshilloj të përdorni Deep Sleep për të kursyer energji nga qarku juaj.

Hapi 1: Hyrje

ESP32 ka një mënyrë të kursimit të energjisë, të quajtur "Gjumë i thellë". Në këtë mënyrë, CPU -të, shumica e RAM -it dhe të gjitha pajisjet dixhitale me orë fikëse janë të fikura. Pjesët e vetme të çipit që mund të lidhen akoma janë kontrolluesi RTC, pajisjet periferike RTC (përfshirë bashkëprocesorin ULP) dhe kujtimet RTC.

Kemi disa mënyra për të zgjuar ESP32 kur jeni në gjumë. Burimet e zgjimit mund të vendosen në çdo kohë para se të hyni në modalitetin e gjumit të thellë.

Hapi 2: Mënyrat për të zgjuar ESP32

Ka pesë mënyra për të zgjuar ESP32:

• Kohëmatësi

• Zgjimi i jashtëm (ext0)

• Zgjimi i jashtëm (ext1)

• Zgjimi i bashkëprocesorit ULP

• Tastiera me prekje

Hapi 3: Kohëmatësi

Kontrolluesi RTC ka një kohëmatës të integruar që mund të përdoret për të aktivizuar çipin pas një periudhe të paracaktuar kohe. Koha përcaktohet me saktësi mikrosekondë.

esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)

koha_në_us> është koha në mikrosekonda

Hapi 4: Zgjimi i jashtëm (ext0)

Moduli RTC IO përmban logjikë për të aktivizuar alarmin kur një nga GPIO -të e RTC hyn në një nivel logjike të paracaktuar. RTC IO është pjesë e fushës së energjisë të periferikësh RTC, kështu që periferikësh RTC do të mbahen gjallë gjatë Gjumit të Thellë nëse kërkohet ky burim aktivizimi.

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, niveli int)

gpio_num> Numri GPIO i përdorur si burim aktivizimi. Mund të përdoren vetëm GPIO funksionale RTC: 0, 2, 4, 12-15, 25-27, 32-39.

niveli> niveli i hyrjes që do të aktivizojë alarmin (0 = LOW, 1 = HIGH)

Hapi 5: Zgjimi i jashtëm (ext1)

Kontrolluesi RTC përmban logjikë për të aktivizuar alarmin duke përdorur GPIO të shumtë RTC.

esp_deep_sleep_enable_ext1_wakeup (uint64_t mask, esp_ext1_wakeup_mode_t mode)

mask> bit mask i numrave GPIO që do të shkaktojnë aktivizim. Vetëm GPIO të aktivizuara nga RTC mund të përdoren në këtë bitmap: 0, 2, 4, 12-15, 25-27, 32-39.

mode> zgjidhni funksionin logjik të përdorur për të përcaktuar gjendjen e aktivizimit:

• ESP_EXT1_WAKEUP_ALL_LOW: zgjohet kur të gjithë GPIO -të e zgjedhur janë në LOW

• ESP_EXT1_WAKEUP_ANY_HIGH: zgjohet kur ndonjëri prej GPIO -ve të zgjedhur janë të LART

Hapi 6: Zgjimi i procesorit ULP

Koprocesori ULP mund të funksionojë ndërsa çipi është në Deep Sleep dhe mund të përdoret për të kërkuar sensorë, për të monitoruar vlerat e sensorit të prekjes ADC ose kapacitiv dhe për të aktivizuar çipin kur zbulohet një ngjarje e veçantë.

Koprocesori ULP është pjesë e fushës së fuqisë së periferikësh RTC dhe drejton programin e ruajtur në RTC të kujtesës së ngadaltë. Prandaj, pajisjet periferike RTC dhe kujtesa e ngadaltë RTC do të aktivizohen gjatë Gjumit të thellë nëse kërkohet kjo mënyrë aktivizimi.

Hapi 7: tastiera me prekje

Kontrolluesi RTC përmban logjikë për të aktivizuar alarmin duke përdorur sensorët prekës kapacitiv. Përkufizimi i kunjit të prekjes, megjithatë, është i ndryshëm. Ne duhet të përdorim ndërprerësin e prekjes për secilën prej kunjave të dëshiruar.

Pas vendosjes së ndërprerjeve, ne aktivizuam mënyrën e zgjimit për të përdorur sensorët.

// Konfiguro Touchpad si burim zgjimi esp_sleep_enable_touchpad_wakeup ();

Hapi 8: Hyrja në modalitetin e gjumit të thellë

Pas vendosjes së modalitetit të zgjimit, mjafton një komandë e vetme për ta vendosur ESP32 në modalitetin e Gjumit të Thellë (duke shpenzuar 2.5 μA ose më pak). Theksoj këtu se kjo shpenzim është nga çipi ESP dhe jo pjata, pasi kjo e fundit shpenzon më shumë.

esp_deep_sleep_start ();

Nga kjo komandë, ESP32 bie në gjumë dhe nuk ekzekuton rreshtat e ardhshëm të kodit për shembull.

E rëndësishme: Të gjitha cilësimet e zgjimit duhet të bëhen para se të ekzekutoni komandën e mësipërme.

Hapi 9: Këtu janë disa informacione më të rëndësishme

Këtu keni disa informacione më të rëndësishme
Këtu keni disa informacione më të rëndësishme

Thirrja më poshtë kthen shkakun e zgjimit ESP32.

1: EXT0 2: EXT1 3: KOHA 4, TOUCHPAD 5: ULP

esp_sleep_get_wakeup_cause ();

Nëse vendosim zgjimin nga tastiera me prekje, mund të rikuperojmë cilin GPIO që prekja ka ndodhur përmes komandës

esp_sleep_get_touchpad_wakeup_status ();

Sa herë që ESP32 zgjohet, do të kalojë përsëri nëpër konfigurim. Kështu të gjitha ndryshoret që nuk janë të përcaktuara në kujtesën RTC do të kthehen në gjendjen e tyre.

Për të mbajtur variablat në kujtesë edhe pas fjetjes, përdorni deklaratën e ndryshores në shembullin më poshtë:

// RTC_DATA_ATTR alokon një ndryshim në kujtesë RTCRTC_DATA_ATTR int bootCount = 0;

Hapi 10: Demonstrim

Demonstrim
Demonstrim

Video tregon programin duke punuar, në përputhje me imazhin.

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

WiFi NyjeMCU-32S ESP-WROOM-32
WiFi NyjeMCU-32S ESP-WROOM-32

Hapi 12: Asambleja

Kuvendi
Kuvendi

Hapi 13: Programi

Tani do të bëjmë një program ku do të konfigurojmë ESP32 për të hyrë në modalitetin e gjumit të thellë. Kjo do të zgjohet në tre mënyra të ndryshme: një për zgjimin e jashtëm (ext0), një për Kohëmatësin dhe një për Touchpad. Ata nuk mund të punojnë së bashku, kështu që ne do të përdorim një ndryshore që do të jetë një numërues për numrin e herëve që ESP32 i dha Boot për të konfiguruar mënyrën e zgjimit.

Hapi 14: Kërkohet bibliotekë

Kërkohet biblioteka
Kërkohet biblioteka

Për të kontrolluar ekranin OLED, na duhet një bibliotekë e jashtme. Për këtë, ne do të shkarkojmë bibliotekën U8g2.

Në Arduino IDE, shkoni te menyja Sketch >> Përfshi Bibliotekën >> Menaxhoni Bibliotekat….

Hapi 15: Bibliotekat dhe variablat

Ne kemi përfshirë bibliotekën për të kontrolluar ekranin OLED, si dhe një konstruktor të shembullit të kontrolluesit të ekranit. Gjithashtu, ne alokojmë ndryshoren në kujtesën RTC. Ne vendosëm ndjeshmërinë për pranimin e prekjes, faktorin e konvertimit mikrosekond për sekonda dhe kohën kur ESP32 shkon në modalitetin e gjumit (në sekonda).

#include // biblioteca para kontrollit do të shfaqet oled

// konstruktori i instancave për kontrollin e shfaqjes // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR alokon dhe ndryshon kujtesën RTC RTC_DATA_ATTR int bootCount = 0; // sensibilidade para aceitação do toque #define Pragu 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

Hapi 16: Konfigurimi

Në Setup, ne rrisim numrin e herë që ka ndodhur Boot. Ne e thërrasim funksionin për të shtypur motivin Boot. Nëse numri i Boot është PAR, ne vendosim që ESP32 të zgjohet përmes butonit (EXT0). Nëse është një shumëfish i 3, ne vendosim që ESP32 të zgjohet pas një kohe të caktuar. Përndryshe, ne vendosim kunjat prekëse për të zgjuar ESP32. Së fundi, ne vendosim tastierën me prekje si burim zgjimi dhe e detyrojmë ESP32 të hyjë në modalitetin e gjumit.

void setup () {Serial.begin (115200); vonesa (1000); // rritja e numrit të vezave që kanë bërë BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se a numero de boot për konfigurimet PAR ose ESP32 për të zgjedhur através do botão (EXT0) nëse (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = E lartë, 0 = E ulët} // shiko për konfigurimin e shumëfishtë të 3 ose ESP32 për të vendosur depois në um tempo për një tjetër nëse (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // rastet e konfigurimit të konfigurimit për prekjen e kapacitetit të prekjes për ESP32 tjetër {// Ndërprerja e konfigurimit në Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, kthimi i thirrjes, Pragu); // Konfiguro Touchpad si burim zgjimi esp_sleep_enable_touchpad_wakeup (); } Serial.println ("entrando em modo sleep"); esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}

Hapi 17: Loop, Callback & ConfigureDisplay

Në Loop, ne nuk kemi asgjë për të bërë. Ne pastaj vazhdojmë të ndërpresim thirrjen nëse kemi diçka për të bërë kur të ndodhë ndërprerja. Lidhur me konfigurimin e ekranit, ne inicializojmë ekranin dhe konfigurojmë disa parametra. Ne shtypim në ekran numrin e herë që ka ndodhur Boot.

// 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 ose shfaqja e konfigurimit të alguns parametros display. filloj (); 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 ose BOOT display.drawString (0, 0, "BOOT NUM:"); display.drawString (0, 2, String (bootCount).c_str ()); display.drawString (0, 4, "MOTIVO:"); }

Hapi 18: Arsyeja e printimit_ zgjimit (duke ditur Shkakun e Zgjimit)

Këtu, ne kemi funksionin për të shtypur shkakun e zgjimit të ESP32. Kontrolloni kunjin dhe printoni në ekran.

// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Arsyeja e rreptë = ""; arsyeja e zgjimit = esp_sleep_get_wakeup_cause (); // rikuperoni një ndërrim shkaku shkaku (zgjimi_arsye) {rasti 1: arsyeja = "EXT0 RTC_IO BTN"; pushim; rasti 2: arsyeja = "EXT1 RTC_CNTL"; pushim; rasti 3: arsyeja = "KOHA"; pushim; rasti 4: arsyeja = "TOUCHPAD"; pushim; rasti 5: arsyeja = "PROGRAMI ULP"; pushim; parazgjedhje: arsye = "JO DS SHKAK"; pushim; } Serial.println (arsyeja); display.clearLine (6); // apaga a linha 6 bëni display.drawString (0, 6, reason.c_str ()); // imprime a causa do despertar pa shfaqje // se despertou nga TOUCHPAD, duke përfshirë një verifikim të një cilësie të caktuar nëse ((zgjimi_ arsyen == 4) {print_wakeup_touchpad (); // verifica o pino e imprime pa shfaqje}}

Hapi 19: Print_wakeup_touppad (njih GPIO Touch)

Tani, në këtë hap, ne kemi funksionin për të shtypur kunjin e prekur. Ne rikuperuam GPIO që zgjoi ESP32 dhe e printuam në ekran.

// função para imprimir ose pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // rikuperimi i GPIO ose despertou o ESP32 String GPIO = ""; switch (touchPin) {case 0: GPIO = "4"; pushim; rasti 1: GPIO = "0"; pushim; rasti 2: GPIO = "2"; pushim; rasti 3: GPIO = "15"; pushim; rasti 4: GPIO = "13"; pushim; rasti 5: GPIO = "12"; pushim; rasti 6: GPIO = "14"; pushim; rasti 7: GPIO = "27"; pushim; rasti 8: GPIO = "33"; pushim; rasti 9: GPIO = "32"; pushim; parazgjedhje: Serial.println ("Zgjimi jo me anë të tastierës së prekjes"); pushim; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // apaga a linha 7 bëni display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}

Hapi 20: Shkarkoni skedarët

PDF

INO

Recommended: