Orodha ya maudhui:

Kuokoa Maisha ya Batri na Usingizi Mzito: Hatua 20
Kuokoa Maisha ya Batri na Usingizi Mzito: Hatua 20

Video: Kuokoa Maisha ya Batri na Usingizi Mzito: Hatua 20

Video: Kuokoa Maisha ya Batri na Usingizi Mzito: Hatua 20
Video: DHAMBI KUU 2 MUNGU HAWEZI KUKUSAMEHE!! KUWA MAKINI SANA 2024, Novemba
Anonim
Image
Image
Njia za Kuamsha ESP32
Njia za Kuamsha ESP32

Je! Una nia ya kutumia betri na ESP32 yako? Ikiwa ni hivyo, nitajadili leo habari muhimu ya kiufundi kuhusu mada hii. Tunajua kwamba microcontroller huyu hutumia nguvu nyingi wakati anasambaza habari. Inatumia karibu miligramu 190. Katika video hii, nitaonyesha jinsi ya kuhifadhi nishati kutoka ESP32 na kile kinachoitwa "DEEP SLEEP". Tutaweka chip kuingiza hali hii, jifunze njia za kutoka kwa hali hii, na tuunde mfano unaonyesha njia tatu tofauti za kuamsha ESP32.

Ni muhimu kukumbuka kuwa redio hutumia nguvu nyingi, badala ya wasindikaji. Kuokoa nishati ni muhimu sana. Hii ni kwa sababu Endpoints (mizunguko inayotuma habari) mara nyingi hupewa nguvu ya betri na inapaswa kudumu hadi miaka mitano. Kuna wazalishaji wengine ambao huahidi hadi miaka kumi kwa muda mrefu, na hii ni halali kwa betri zenye ubora wa hali ya juu ambazo hazitumii Mwisho wa Mwisho. Katika visa vingine vyote, ninakushauri utumie usingizi mzito kuokoa nishati kutoka kwa mzunguko wako.

Hatua ya 1: Utangulizi

ESP32 ina hali ya kuokoa nguvu, inayoitwa "Usingizi Mzito." Katika hali hii, CPU, RAM nyingi, na vifaa vyote vya saa vilivyo na dijiti vimezimwa. Sehemu pekee za chip ambazo bado zinaweza kushikamana ni mtawala wa RTC, vifaa vya pembejeo vya RTC (pamoja na processor ya ULP), na kumbukumbu za RTC.

Tuna njia kadhaa za kuamka ESP32 wakati wa kulala. Vyanzo vya kuamka vinaweza kusanidiwa wakati wowote kabla ya kuingia katika hali ya Kulala Sana.

Hatua ya 2: Njia za Kuamsha ESP32

Kuna njia tano za kuamsha ESP32:

• Kipima muda

• Kuamka nje (ext0)

• Kuamka nje (ext1)

• Kuamka kwa processor ya ULP

• Kitufe cha kugusa

Hatua ya 3: Timer

Mdhibiti wa RTC ana kipima muda kilichojengwa ambacho kinaweza kutumiwa kuamsha chip baada ya muda uliotanguliwa. Wakati umebainishwa na usahihi wa microsecond.

esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)

time_in_us> ni wakati katika microseconds

Hatua ya 4: Kuamsha nje (ext0)

Moduli ya RTC IO ina mantiki ya kuchochea kengele wakati moja ya RTC GPIOs inaingia kiwango cha mantiki kilichotanguliwa. RTC IO ni sehemu ya uwanja wa nguvu wa pembejeo za RTC, kwa hivyo viunga vya RTC vitahifadhiwa wakati wa Usingizi wa kina ikiwa chanzo hiki cha uanzishaji kinaombwa.

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, kiwango cha int)

gpio_num> Nambari ya GPIO inayotumiwa kama chanzo cha uanzishaji. GPIO zinazofanya kazi tu za RTC zinaweza kutumika: 0, 2, 4, 12-15, 25-27, 32-39.

kiwango> kiwango cha kuingiza ambacho kitasababisha kengele (0 = LOW, 1 = HIGH)

Hatua ya 5: Kuamsha nje (ext1)

Mdhibiti wa RTC ana mantiki ya kuchochea saa ya kengele kutumia RP GPIO nyingi.

esp_deep_sleep_enable_ext1_wakeup (uint64_t mask, esp_ext1_wakeup_mode_t mode)

mask> mask kidogo ya nambari za GPIO ambazo zitasababisha uanzishaji. Ni GPIO zilizowezeshwa na RTC tu zinazoweza kutumika katika bitmap hii: 0, 2, 4, 12-15, 25-27, 32-39.

mode> chagua kazi ya mantiki inayotumiwa kuamua hali ya uanzishaji:

• ESP_EXT1_WAKEUP_ALL_LOW: inaamka wakati GPIO zote zilizochaguliwa ziko LOW

• ESP_EXT1_WAKEUP_ANY_HIGH: inaamka wakati GPIO yoyote iliyochaguliwa iko juu

Hatua ya 6: Kuamsha Mchapishaji wa ULP

Mchapishaji wa ULP anaweza kufanya kazi wakati chip iko katika Usingizi wa kina na inaweza kutumika kutafuta sensorer, kufuatilia ADC au maadili ya kugusa capacitive, na kuamsha chip wakati tukio fulani linapatikana.

Mchapishaji wa ULP ni sehemu ya uwanja wa nguvu wa pembejeo za RTC na huendesha programu iliyohifadhiwa katika kumbukumbu polepole RTC. Kwa hivyo, pembejeo za RTC na kumbukumbu polepole ya RTC zitaamilishwa wakati wa Usingizi wa kina ikiwa hali hii ya uanzishaji imeombwa.

Hatua ya 7: Bodi ya kugusa

Mdhibiti wa RTC ana mantiki ya kuchochea kengele kwa kutumia sensorer za kugusa zenye uwezo. Ufafanuzi wa pini ya kugusa, hata hivyo, ni tofauti. Lazima tutumie usumbufu wa kugusa kwa kila pini inayotakiwa.

Baada ya kuweka vipingamizi, tuliwasha hali ya kuamka kutumia sensorer.

// Sanidi Touchpad kama chanzo cha kuamsha esp_sleep_enable_touchpad_wakeup ();

Hatua ya 8: Kuingia kwenye Njia ya Kulala Sana

Baada ya kuweka hali ya kuamka, amri moja ya kuweka ESP32 katika hali ya Kulala Sana (kutumia 2.5 μA au chini) inatosha. Nasisitiza hapa kwamba gharama hii inatoka kwa chip ya ESP na sio sahani, kwani ya mwisho hutumia zaidi.

esp_deep_sleep_start ();

Kutoka kwa amri hii, ESP32 hulala na haifanyi mistari inayofuata ya nambari kwa mfano.

Muhimu: Mipangilio yote ya kuamka lazima ifanywe kabla ya kutekeleza amri hapo juu.

Hatua ya 9: Hapa kuna habari muhimu zaidi

Hapa kuna habari muhimu zaidi
Hapa kuna habari muhimu zaidi

Simu hapa chini inarudisha sababu ya kuamka kwa ESP32.

1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP

esp_sleep_get_wakeup_cause ();

Ikiwa tunaweka kuamka kwa pedi ya kugusa, tunaweza kupona ambayo GPIO ambayo kugusa ilitokea kupitia amri

esp_sleep_get_touchpad_wakeup_status ();

Kila wakati ESP32 inapoamka, itazunguka kupitia usanidi tena. Kwa hivyo anuwai zote ambazo hazijafafanuliwa katika kumbukumbu ya RTC zitarudi katika hali yao ya nyumbani.

Kuweka vigeugeu kwenye kumbukumbu hata baada ya kulala, tumia tamko la kutofautisha katika mfano hapa chini:

// RTC_DATA_ATTR aloca a variável na memória RTCRTC_DATA_ATTR int bootCount = 0;

Hatua ya 10: Maonyesho

Maandamano
Maandamano

Video inaonyesha programu hiyo inafanya kazi, kulingana na picha.

Hatua ya 11: WiFi NodeMCU-32S ESP-WROOM-32

Node ya WiFiMCU-32S ESP-WROOM-32
Node ya WiFiMCU-32S ESP-WROOM-32

Hatua ya 12: Mkutano

Mkutano
Mkutano

Hatua ya 13: Programu

Sasa tutafanya mpango ambapo tutasanidi ESP32 ili kuingia katika hali ya Kulala Sana. Hii itaamshwa kwa njia tatu tofauti: moja ya kuamka nje (ext0), moja ya Timer, na moja ya Touchpad. Hawawezi kufanya kazi pamoja, kwa hivyo tutatumia anuwai ambayo itakuwa kaunta kwa idadi ya nyakati ambazo ESP32 ilimpa Boot kusanidi njia ya kuamka.

Hatua ya 14: Maktaba Inahitajika

Maktaba Inahitajika
Maktaba Inahitajika

Ili kudhibiti onyesho la OLED, tunahitaji maktaba ya nje. Kwa hili, tutapakua maktaba ya U8g2.

Katika IDE ya Arduino, nenda kwenye menyu ya Mchoro >> Jumuisha Maktaba >> Dhibiti Maktaba….

Hatua ya 15: Maktaba na Vigeuzi

Tumejumuisha maktaba kudhibiti onyesho la OLED, pamoja na mjenzi wa mfano wa mtawala wa onyesho. Pia, tunatenga tofauti katika kumbukumbu ya RTC. Tunaweka unyeti wa kukubalika kwa kugusa, ubadilishaji wa microsecond kwa sekunde, na wakati ESP32 inakwenda kwa hali ya kulala (kwa sekunde).

# pamoja na // biblioteca para controle zinaonyesha 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 aceitação do toque #define Kizingiti 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) #fasili TIME_TO_SLEEP 3

Hatua ya 16: Sanidi

Katika Usanidi, tunaongeza idadi ya mara ambazo Boot ilitokea. Tunaita kazi hiyo kuchapisha motif ya Boot. Ikiwa nambari ya Boot ni PAR, tunaweka ESP32 kuamka kupitia kitufe cha (EXT0). Ikiwa ni nyingi ya 3, tunaweka ESP32 kuamka baada ya muda uliowekwa. Vinginevyo, tunaanzisha pini za kugusa zenye uwezo wa kuamsha ESP32. Mwishowe, tunaweka Touchpad kama chanzo cha kuamka na kulazimisha ESP32 kuingia katika hali ya kulala.

kuanzisha batili () {Serial.begin (115200); kuchelewesha (1000); // nyongeza ya idadi ya utaftaji wa OBOTI vipindi ++ bootCount; sanidiDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se numero 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 = Juu, 0 = Chini} // se for multiplo de 3 configuramos o ESP32 para despertar depois de um tempo definido else if (bootCount% 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } / // Sanidi Touchpad kama chanzo cha kuamsha esp_sleep_enable_touchpad_wakeup (); } Serial.println ("entando em modo sleep"); esp_deep_sleep_start ();

Hatua ya 17: Loop, Callback & SanidiDisplay

Katika Kitanzi, hatuna cha kufanya. Kisha tunaendelea kukatiza kupiga tena ikiwa tuna kitu cha kufanya wakati usumbufu unatokea. Kuhusu usanidi, onyesha onyesho na usanidi vigezo kadhaa. Tunachapisha kwenye skrini idadi ya mara ambazo Boot ilitokea.

// nada a se fazer no loopvoid loop () {} // callback das interrupções void callback () {// caso queira fazer algo ao ocorrer a interrupção} batili configureDisplay () {// inaleta onyesho na usanidi wa onyesho la maonyesho ya kwanza. Anza (); onyesha.setPowerSave (0); // modo powerSave (0-Off? 1-On) onyesho.setFont (u8x8_font_torussansbold8_u); // fonte utilizada // imprime no display as numero de vezes que aconteceu o BOOT display.drawString (0, 0, "BOOT NUM:"); onyesha.drawString (0, 2, String (bootCount).c_str ()); onyesha.drawString (0, 4, "MOTIVO:"); }

Hatua ya 18: Chapisha_amka_sababu (kujua sababu ya Uamsho)

Hapa, tuna kazi ya kuchapisha sababu ya kuamka kwa ESP32. Angalia pini na uchapishe kwenye onyesho.

// função para imprimir a causa do ESP32 dissertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Sababu ya kamba = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // recupera a causa kufanya Despertar kubadili (wakeup_reason) {kesi ya 1: Sababu = "EXT0 RTC_IO BTN"; kuvunja; kesi 2: sababu = "EXT1 RTC_CNTL"; kuvunja; kesi 3: sababu = "TIMER"; kuvunja; kesi 4: sababu = "TOUCHPAD"; kuvunja; kesi 5: sababu = "PROGRAMU YA ULP"; kuvunja; chaguomsingi: sababu = "HAKUNA SABABU YA DS"; kuvunja; } Serial.println (sababu); onyesha waziLine (6); // apaga linha 6 huonyesha onyesha.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 na imprime hakuna onyesho}}

Hatua ya 19: Print_wakeup_touchpad (ujue GPIO Touch)

Sasa, katika hatua hii, tuna kazi ya kuchapisha pini ambayo iliguswa. Tulipata GPIO iliyoamsha ESP32 na kuichapisha kwenye onyesho.

// 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 Kamba GPIO = ""; kubadili (touchPin) {kesi 0: GPIO = "4"; kuvunja; kesi 1: GPIO = "0"; kuvunja; kesi 2: GPIO = "2"; kuvunja; kesi 3: GPIO = "15"; kuvunja; kesi 4: GPIO = "13"; kuvunja; kesi 5: GPIO = "12"; kuvunja; kesi ya 6: GPIO = "14"; kuvunja; kesi 7: GPIO = "27"; kuvunja; kesi ya 8: GPIO = "33"; kuvunja; kesi 9: GPIO = "32"; kuvunja; chaguomsingi: Serial.println ("Amka sio kwa touchpad"); kuvunja; } Serial.println ("GPIO:" + GPIO); onyesha.clearLine (7); onyesha.drawString (6, 7, GPIO.c_str ()); // hatia o GPIO}

Hatua ya 20: Pakua faili

PDF

INO

Ilipendekeza: