Talaan ng mga Nilalaman:
- Hakbang 1: Panimula
- Hakbang 2: Mga Paraan upang Wake ang ESP32
- Hakbang 3: Timer
- Hakbang 4: Panlabas na Gumising (ext0)
- Hakbang 5: Panlabas na Gumising (ext1)
- Hakbang 6: ULP Coprocessor Wakeup
- Hakbang 7: Touchpad
- Hakbang 8: Pagpasok sa Deep Sleep Mode
- Hakbang 9: Narito ang Ilang Mas Mahahalagang Impormasyon
- Hakbang 10: Pagpapakita
- Hakbang 11: WiFi NodeMCU-32S ESP-WROOM-32
- Hakbang 12: Assembly
- Hakbang 13: Programa
- Hakbang 14: Kinakailangan ang Library
- Hakbang 15: Mga Aklatan at Variable
- Hakbang 16: Pag-setup
- Hakbang 17: Loop, Callback & ConfigureDisplay
- Hakbang 18: Print_wakeup_reason (alam ang Sanhi ng Pagkagising)
- Hakbang 19: Print_wakeup_touchpad (alam ang GPIO Touch)
- Hakbang 20: I-download ang Mga File
Video: Pag-save ng Buhay ng Baterya Sa Malalim na Pagtulog: 20 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
Interesado ka bang gumamit ng baterya sa iyong ESP32? Kung gayon, tatalakayin ko ngayon ang ilang mahahalagang impormasyong panteknikal patungkol sa paksang ito. Alam namin na ang microcontroller na ito ay gumastos ng maraming enerhiya kapag nagpapadala ito ng impormasyon. Kumokonsumo ito ng halos 190 milliamp. Sa video na ito, ipapakita ko kung paano makatipid ng enerhiya mula sa ESP32 na may tinaguriang "DEEP SLEEP" na pagpapaandar. Itatakda namin ang maliit na tilad upang ipasok ang mode na ito, alamin ang mga paraan upang lumabas sa mode na ito, at lumikha ng isang halimbawa na nagpapakita ng tatlong magkakaibang paraan upang gisingin ang ESP32.
Mahalagang tandaan na ang radyo ay gumastos ng maraming enerhiya, sa halip na ang nagpoproseso. Napakahalaga ng pag-save ng enerhiya. Ito ay dahil ang mga Endpoint (ang mga circuit na nagpapadala ng impormasyon) ay madalas na pinapatakbo ng baterya at dapat tumagal ng hanggang limang taon. Mayroong ilang mga tagagawa na nangangako ng hanggang sa sampung taon ang tagal, at ito ay may bisa para sa mga de-kalidad na baterya na hindi gumagamit ng mga Endpoint. Sa lahat ng iba pang mga kaso, pinapayuhan ko kayo na gumamit ng Deep Sleep upang makatipid ng enerhiya mula sa iyong circuit.
Hakbang 1: Panimula
Ang ESP32 ay may mode na nakakatipid ng kuryente, na tinawag na "Malalim na Pagtulog." Sa mode na ito, naka-off ang mga CPU, karamihan sa RAM, at lahat ng mga digital na orasan na peripheral. Ang mga bahagi lamang ng maliit na tilad na maaaring maiugnay pa rin ay ang RTC controller, RTC peripherals (kabilang ang ULP coprocessor), at mga alaala ng RTC.
Mayroon kaming maraming mga paraan upang gisingin ang ESP32 kapag natutulog. Maaaring mai-set up ang mga mapagkukunan sa anumang oras bago pumasok sa mode na Deep Sleep.
Hakbang 2: Mga Paraan upang Wake ang ESP32
Mayroong limang mga paraan upang gisingin ang ESP32:
• Timer
• Panlabas na paggising (ext0)
• Panlabas na paggising (ext1)
• paggising ng ULP coprocessor
• Touchpad
Hakbang 3: Timer
Ang tagontrol ng RTC ay may built-in na timer na maaaring magamit upang buhayin ang maliit na tilad pagkatapos ng isang paunang natukoy na tagal ng panahon. Ang oras ay tinukoy na may microsecond na katumpakan.
esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)
Ang time_in_us> ay ang oras sa microseconds
Hakbang 4: Panlabas na Gumising (ext0)
Naglalaman ang module ng RTC IO ng lohika upang ma-trigger ang alarma kapag ang isa sa mga RTC GPIO ay pumasok sa isang paunang natukoy na antas ng lohika. Ang RTC IO ay bahagi ng domain ng kapangyarihan ng mga peripheral ng RTC, kaya't ang mga peripheral ng RTC ay mananatiling buhay habang Deep Sleep kung hinihiling ang mapagkukunang ito ng pag-activate.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int level)
gpio_num> Ang numero ng GPIO na ginamit bilang mapagkukunan ng pag-aktibo. Ang mga RTC-functional GPIO lamang ang maaaring magamit: 0, 2, 4, 12-15, 25-27, 32-39.
antas> antas ng pag-input na magpapalitaw ng alarma (0 = LOW, 1 = MATAAS)
Hakbang 5: Panlabas na Gumising (ext1)
Naglalaman ang RTC controller ng lohika upang ma-trigger ang alarm clock gamit ang maraming RTC GPIO.
esp_deep_sleep_enable_ext1_wakeup (uint64_t mask, esp_ext1_wakeup_mode_t mode)
mask> bit mask ng mga numero ng GPIO na magdudulot ng pag-aktibo. Ang mga GPIO na pinagana lang ng RTC ang maaaring magamit sa bitmap na ito: 0, 2, 4, 12-15, 25-27, 32-39.
mode> piliin ang pagpapaandar sa lohika na ginamit upang matukoy ang kondisyon ng pag-aktibo:
• ESP_EXT1_WAKEUP_ALL_LOW: nagigising kapag ang lahat ng mga napiling GPIO ay nasa Mababa
• ESP_EXT1_WAKEUP_ANY_HIGH: nagigising kapag ang alinman sa mga napiling GPIO ay TAAS
Hakbang 6: ULP Coprocessor Wakeup
Ang ULP coprocessor ay maaaring gumana habang ang maliit na tilad ay nasa Deep Sleep at maaaring magamit upang maghanap ng mga sensor, subaybayan ang mga halaga ng ADC o capacitive touch sensor, at buhayin ang maliit na tilad kapag nakita ang isang tukoy na kaganapan.
Ang ULP coprocessor ay bahagi ng domain ng kapangyarihan ng mga peripheral ng RTC at pinapatakbo ang program na nakaimbak sa mabagal na memorya ng RTC. Samakatuwid, ang mga peripheral ng RTC at mabagal na memorya ng RTC ay isasaaktibo sa panahon ng Deep Sleep kung hinihiling ang activation mode na ito.
Hakbang 7: Touchpad
Naglalaman ang RTC controller ng lohika upang ma-trigger ang alarma gamit ang capacitive touch sensors. Ang kahulugan ng touch pin, gayunpaman, ay magkakaiba. Dapat naming gamitin ang ugnay makagambala para sa bawat isa sa nais na mga pin.
Matapos itakda ang mga nakakagambala, pinagana namin ang mode na paggising upang magamit ang mga sensor.
// I-configure ang Touchpad bilang mapagkukunan ng paggising esp_sleep_enable_touchpad_wakeup ();
Hakbang 8: Pagpasok sa Deep Sleep Mode
Matapos magtakda ng isang mode na paggising, isang solong utos na ilagay ang ESP32 sa mode na Deep Sleep (paggastos ng 2.5 μA o mas kaunti) ay sapat na. Binibigyang diin ko dito na ang gastos na ito ay mula sa chip ng ESP at hindi sa plato, dahil ang huli ay gumagasta ng higit pa.
esp_deep_sleep_start ();
Mula sa utos na ito, natutulog ang ESP32 at hindi isinasagawa ang mga susunod na linya ng code halimbawa.
Mahalaga: Ang lahat ng mga setting ng paggising ay dapat gawin bago isagawa ang utos sa itaas.
Hakbang 9: Narito ang Ilang Mas Mahahalagang Impormasyon
Ibinabalik ng tawag sa ibaba ang sanhi ng paggising ng ESP32.
1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_cause ();
Kung itinakda namin ang paggising sa pamamagitan ng touchpad, maaari naming mabawi kung aling GPIO na nangyari ang pagpindot sa pamamagitan ng utos
esp_sleep_get_touchpad_wakeup_status ();
Sa tuwing gigising ang ESP32, ikikot ito sa pag-setup muli. Sa gayon ang lahat ng mga variable na hindi tinukoy sa memorya ng RTC ay babalik sa kanilang estado sa bahay.
Upang mapanatili ang mga variable sa memorya kahit na makatulog, gamitin ang variable na deklarasyon sa halimbawa sa ibaba:
// RTC_DATA_ATTR aloca a variável na memória RTCRTC_DATA_ATTR int bootCount = 0;
Hakbang 10: Pagpapakita
Ipinapakita ng video ang paggana ng programa, alinsunod sa imahe.
Hakbang 11: WiFi NodeMCU-32S ESP-WROOM-32
Hakbang 12: Assembly
Hakbang 13: Programa
Gagawa kami ngayon ng isang programa kung saan mai-configure namin ang ESP32 upang pumasok sa mode na Deep Sleep. Gisingin ito sa tatlong magkakaibang paraan: isa para sa Panlabas na paggising (ext0), isa para sa Timer, at isa para sa Touchpad. Hindi sila maaaring magtulungan, kaya gagamit kami ng isang variable na magiging counter para sa bilang ng beses na binigyan ng ESP32 ng Boot upang i-configure ang paraan upang magising.
Hakbang 14: Kinakailangan ang Library
Upang makontrol ang pagpapakita ng OLED, kailangan namin ng isang panlabas na library. Para sa mga ito, mai-download namin ang library ng U8g2.
Sa Arduino IDE, pumunta sa menu ng Sketch >> Isama ang Library >> Pamahalaan ang Mga Aklatan ….
Hakbang 15: Mga Aklatan at Variable
Isinama namin ang silid-aklatan upang makontrol ang pagpapakita ng OLED, pati na rin isang tagapagbuo ng halimbawa ng display controller. Gayundin, inilalaan namin ang variable sa memorya ng RTC. Itinakda namin ang pagiging sensitibo para sa pagtanggap ng ugnay, ang kadahilanan ng conversion ng microsecond para sa mga segundo, at ang oras na ang ESP32 ay pupunta sa mode ng pagtulog (sa mga segundo).
#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 display (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR aloca a variável na memoria RTC RTC_DATA_ATTR int bootCount = 0; // sensibilidade para sa 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
Hakbang 16: Pag-setup
Sa Pag-setup, pinapalaki namin ang bilang ng beses na naganap ang Boot. Tinatawag namin ang pagpapaandar upang mai-print ang Boot motif. Kung ang numero ng Boot ay PAR, itinakda namin ang ESP32 upang magising sa pamamagitan ng (EXT0) na pindutan. Kung ito ay isang maramihang 3, itinakda namin ang ESP32 upang magising pagkatapos ng isang itinakdang oras. Kung hindi man, na-set up namin ang capacitive touch pin upang gisingin ang ESP32. Sa wakas, itinakda namin ang Touchpad bilang mapagkukunan ng paggising at pinipilit ang ESP32 na pumasok sa mode ng pagtulog.
void setup () {Serial.begin (115200); pagkaantala (1000); // incrementa o numero de vezes que o BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se o numero de boot para sa PAR configuramos o ESP32 para despertar através do botão (EXT0) kung (bootCount% 2 == 0) {esp_sidur_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Mataas, 0 = Mababa} // se for multiplo de 3 configuramos o ESP32 para despertar depois de um tempo definido else if (bootCount% 3 == 0) {esp_sidur_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // caso contrario configuramos os pinos de touch capacitivo para despertar o ESP32 else {// Pag-set up ng abala sa Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, callback, Threshold); // I-configure ang Touchpad bilang mapagkukunan ng paggising esp_sleep_enable_touchpad_wakeup (); } Serial.println ("entrando em modo sleep"); esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}
Hakbang 17: Loop, Callback & ConfigureDisplay
Sa Loop, wala kaming gagawin. Pagkatapos ay nagpapatuloy kami upang makagambala sa callback kung mayroon kaming kailangang gawin kapag nangyari ang pagkagambala. Tungkol sa configureDisplay, isinisimulan namin ang pagpapakita at i-configure ang ilang mga parameter. Nai-print namin sa screen ang bilang ng beses na nangyari ang 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 o display at configura alguns parametros display. simulan (); 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:"); }
Hakbang 18: Print_wakeup_reason (alam ang Sanhi ng Pagkagising)
Dito, mayroon kaming pagpapaandar upang mai-print ang sanhi ng paggising ng ESP32. Suriin ang pin at i-print sa display.
// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakup_reason; String dahilan = ""; wakup_reason = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakup_reason) {case 1: reason = "EXT0 RTC_IO BTN"; pahinga; case 2: reason = "EXT1 RTC_CNTL"; pahinga; kaso 3: dahilan = "TIMER"; pahinga; kaso 4: dahilan = "TOUCHPAD"; pahinga; kaso 5: dahilan = "ULP PROGRAM"; pahinga; default: reason = "NO DS CAUSE"; pahinga; } Serial.println (dahilan); display.clearLine (6); // apaga a linha 6 do display 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 (wakup_reason == 4) {print_wakeup_touchpad (); // verifica o pino e imprime no display}}
Hakbang 19: Print_wakeup_touchpad (alam ang GPIO Touch)
Ngayon, sa hakbang na ito, mayroon kaming pagpapaandar upang mai-print ang pin na hinawakan. Nakuha namin ang GPIO na gumising sa ESP32 at naka-print ito sa display.
// função para imprimir o pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // recupera o GPIO que despertou o ESP32 String GPIO = ""; lumipat (touchPin) {case 0: GPIO = "4"; pahinga; kaso 1: GPIO = "0"; pahinga; kaso 2: GPIO = "2"; pahinga; kaso 3: GPIO = "15"; pahinga; kaso 4: GPIO = "13"; pahinga; kaso 5: GPIO = "12"; pahinga; kaso 6: GPIO = "14"; pahinga; kaso 7: GPIO = "27"; pahinga; kaso 8: GPIO = "33"; pahinga; kaso 9: GPIO = "32"; pahinga; default: Serial.println ("Wakeup not by touchpad"); pahinga; } Serial.println ("GPIO:" + GPIO); display.clearLine (7); // apaga a linha 7 do display display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}
Hakbang 20: I-download ang Mga File
INO
Inirerekumendang:
Mga Buhay na Pixel - Isipin ang Teknolohiya May Buhay: 4 na Hakbang (na may Mga Larawan)
Mga Buhay na Pixel - Ang Teknolohiya ay May Buhay: Nakikita ang mga matalinong produkto ng bahay na mas karaniwan sa ating buhay, sinimulan kong isipin ang tungkol sa ugnayan ng mga tao at ng mga produktong ito. Kung isang araw, ang mga smart na produkto sa bahay ay naging isang kailangang-kailangan na bahagi ng buhay ng bawat isa, kung ano ang dapat nating gawin?
Istasyon ng Panahon: ESP8266 Sa Malalim na Pagtulog, SQL, Graphing ni Flask & Plotly: 3 Hakbang
Istasyon ng Panahon: ESP8266 Sa Malalim na Pagtulog, SQL, Graphing ni Flask & Plotly: Masaya ba malaman ang temperatura, halumigmig, o magaan na ilaw sa iyong balkonahe? Alam kong gagawin ko. Kaya gumawa ako ng isang simpleng istasyon ng panahon upang mangolekta ng nasabing data. Ang mga sumusunod na seksyon ay ang mga hakbang na kinuha ko upang makabuo ng isa. Magsimula na tayo
ESP-01 Motion Sensor Na May Malalim na Pagtulog: 5 Hakbang
ESP-01 Motion Sensor With Deep Sleep: Nagtatrabaho ako sa paggawa ng mga homemade motion sensor na nagpapadala ng isang mensahe sa email kapag na-trigger. Maraming mga halimbawa ng itinuturo at iba pang mga halimbawa ng paggawa nito. Kamakailan ko kailangan itong gawin sa isang baterya na pinatatakbo ng PIR motion sensor at isang ESP
Sukat ng DIY at Bumuo ng isang Power Power Backup Generator W / 12V Malalim na Mga Baterya ng Ikot: 5 Mga Hakbang (na may Mga Larawan)
Laki ng DIY at Bumuo ng isang Power Power Backup Generator W / 12V Malalim na Mga Baterya ng Cycle: *** TANDAAN: Mag-ingat kapag nagtatrabaho sa mga baterya at elektrisidad. Huwag maikling baterya. Gumamit ng mga insulated tool. Sundin ang lahat ng mga panuntunan sa kaligtasan kapag nagtatrabaho sa kuryente. *** Maging handa bago ang susunod na oras na ang kuryente ay patayin gamit ang isang standby na baterya powere
Pagbibigay ng Mga Regalo ng Unang Buhay sa Pangalawang Buhay Gamit ang Amazon.com: 9 Mga Hakbang
Pagbibigay ng Mga Regalo sa Unang Buhay sa Pangalawang Buhay Gamit ang Amazon.com: Sa virtual na mundo Ikalawang Buhay madali upang mabuo ang napakalapit na pakikipagkaibigan sa isang tao na maaaring hindi ka magkaroon ng pagkakataong makilala nang personal. Ipinagdiriwang ng mga residente ng Pangalawang Buhay ang mga pista opisyal sa Unang Buhay tulad ng Araw ng mga Puso at Pasko pati na rin ang personal