Բովանդակություն:

Մարտկոցի կյանքը խնայելով խոր քունով `20 քայլ
Մարտկոցի կյանքը խնայելով խոր քունով `20 քայլ

Video: Մարտկոցի կյանքը խնայելով խոր քունով `20 քայլ

Video: Մարտկոցի կյանքը խնայելով խոր քունով `20 քայլ
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Դեկտեմբեր
Anonim
Image
Image
ESP32 արթնացնելու եղանակները
ESP32 արթնացնելու եղանակները

Ձեզ հետաքրքրու՞մ է մարտկոց օգտագործել ձեր ESP32- ի հետ: Եթե այո, ապա ես այսօր կքննարկեմ այս թեմայի վերաբերյալ որոշ կարևոր տեխնիկական տեղեկություններ: Մենք գիտենք, որ այս միկրոկոնտրոլերը շատ էներգիա է ծախսում տեղեկատվություն փոխանցելիս: Այն սպառում է մոտ 190 միլիամպ: Այս տեսանյութում ես ցույց կտամ, թե ինչպես կարելի է էներգիա խնայել ESP32- ից, այսպես կոչված, «ԽՈՐ ՔՆԵԼ» գործառույթով: Չիպը կդնենք այս ռեժիմ մուտք գործելու, սովորելու այս ռեժիմից դուրս գալու ուղիները և ստեղծելու օրինակ, որը ցույց է տալիս ESP32- ի արթնացման երեք տարբեր եղանակներ:

Կարևոր է հիշել, որ ռադիոն ավելի շատ էներգիա է ծախսում, քան պրոցեսորը: Էներգախնայողությունը շատ կարևոր է: Դա պայմանավորված է նրանով, որ վերջնակետերը (տեղեկատվություն ուղարկող սխեմաները) հաճախ աշխատում են մարտկոցից և պետք է տևեն մինչև հինգ տարի: Կան որոշ արտադրողներ, որոնք խոստանում են մինչև տաս տարի տևողություն, և դա վավեր է բարձրորակ մարտկոցների համար, որոնք այնքան էլ չեն օգտագործում վերջնակետերը: Մնացած բոլոր դեպքերում ես խորհուրդ եմ տալիս օգտագործել Deep Sleep- ը ՝ ձեր շղթայից էներգիա խնայելու համար:

Քայլ 1: Ներածություն

ESP32- ն ունի էներգախնայողության ռեժիմ, որը կոչվում է «Խորը քուն»: Այս ռեժիմում պրոցեսորները, RAM- ի մեծ մասը և թվային ժամացույց ունեցող բոլոր ծայրամասային սարքերն անջատված են: Չիպի միակ մասերը, որոնք դեռ կարելի է միացնել, RTC վերահսկիչն են, RTC ծայրամասային սարքերը (ներառյալ ULP համամշակողը) և RTC հիշողությունները:

Մենք ESP32- ը քնած ժամանակ արթնացնելու մի քանի եղանակ ունենք: Արթնանալու աղբյուրները կարող են ստեղծվել ցանկացած պահի ՝ նախքան Deep Sleep ռեժիմ մտնելը:

Քայլ 2. ESP32- ի արթնացման ուղիները

ESP32- ն արթնացնելու հինգ եղանակ կա.

• Timամաչափ

• Արտաքին արթնացում (ext0)

• Արտաքին արթնացում (ext1)

• ULP համամշակող արթնացում

• Touchpad

Քայլ 3: Timամաչափ

RTC վերահսկիչն ունի ներկառուցված ժմչփ, որը կարող է օգտագործվել չիպը ակտիվացնելու համար կանխորոշված ժամանակահատվածից հետո: Isամանակը նշվում է միկրովայրկյան ճշգրտությամբ:

esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)

time_in_us> ժամանակը միկրո վայրկյաններում է

Քայլ 4: Արտաքին արթնացում (ext0)

RTC IO մոդուլը պարունակում է տրամաբանություն `ազդանշանը գործարկելու համար, երբ RTC GPIO- ներից մեկը մտնում է կանխորոշված տրամաբանական մակարդակ: RTC IO- ն RTC ծայրամասային սարքերի էներգիայի տիրույթի մի մասն է, ուստի RTC- ի ծայրամասային սարքերը կենդանի կպահվեն Deep Sleep- ի ընթացքում, եթե պահանջվի ակտիվացման այս աղբյուրը:

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int մակարդակ)

gpio_num> GPIO համար, որն օգտագործվում է որպես ակտիվացման աղբյուր: Կարող են օգտագործվել միայն RTC- ֆունկցիոնալ GPIO- ներ ՝ 0, 2, 4, 12-15, 25-27, 32-39:

մակարդակ> մուտքագրման մակարդակ, որը ազդանշան կհանգեցնի (0 = OWԱOWՐ, 1 = ԲԱՐՁՐ)

Քայլ 5: Արտաքին արթնացում (ext1)

RTC վերահսկիչը պարունակում է զարթուցիչը միացնելու տրամաբանություն ՝ օգտագործելով բազմաթիվ RTC GPIO- ներ:

esp_deep_sleep_enable_ext1_wakeup (uint64_t դիմակ, esp_ext1_wakeup_mode_t ռեժիմ)

դիմակ> GPIO համարների բիտ դիմակ, որը կհանգեցնի ակտիվացման: Այս bitmap- ում կարող են օգտագործվել միայն RTC- ով միացված GPIO- ներ ՝ 0, 2, 4, 12-15, 25-27, 32-39:

ռեժիմ> ընտրեք ակտիվացման պայմանը որոշելու համար օգտագործվող տրամաբանական գործառույթը.

• ESP_EXT1_WAKEUP_ALL_LOW. Արթնանում է, երբ բոլոր ընտրված GPIO- ները գտնվում են LOW- ում

• ESP_EXT1_WAKEUP_ANY_HIGH. Արթնանում է, երբ ընտրված GPIO- ներից որևէ մեկը բարձր է

Քայլ 6: ULP համակարգչային արթնացում

ULP համամշակողը կարող է գործել, երբ չիպը գտնվում է Deep Sleep- ում և կարող է օգտագործվել սենսորների որոնման, ADC կամ capacitive touch sensor ցուցիչների արժեքների վերահսկման և չիպի ակտիվացման համար, երբ հայտնաբերվում է որոշակի իրադարձություն:

ULP համամշակողը հանդիսանում է RTC ծայրամասային սարքերի հզորության տիրույթ և գործարկում է դանդաղ հիշողության RTC- ում պահվող ծրագիրը: Հետևաբար, RTC- ի ծայրամասային սարքերը և RTC- ի դանդաղ հիշողությունը կակտիվացվեն Deep Sleep- ի ընթացքում, եթե պահանջվի այս ակտիվացման ռեժիմը:

Քայլ 7: Touchpad

RTC վերահսկիչը պարունակում է տրամաբանություն `ազդանշանը գործարկելու համար` օգտագործելով capacitive touch sensors- ը: Հպման քորոցի սահմանումը, սակայն, այլ է: Մենք պետք է օգտագործենք հպման ընդհատումը ցանկալի յուրաքանչյուր կապում:

Ընդհատումները սահմանելուց հետո մենք միացրեցինք արթնացման ռեժիմը ՝ օգտագործելով սենսորները:

// Կարգավորել Touchpad- ը որպես արթնացման աղբյուր esp_sleep_enable_touchpad_wakeup ();

Քայլ 8: Մտեք խորը քնի ռեժիմ

Արթնացման ռեժիմը սահմանելուց հետո բավական է մեկ հրաման ՝ ESP32- ը Deep Sleep ռեժիմում (ծախսելը 2,5 μA կամ ավելի քիչ): Այստեղ ես շեշտում եմ, որ այս ծախսը ESP չիպից է և ոչ թե ափսեից, քանի որ վերջինս ավելի շատ է ծախսում:

esp_deep_sleep_start ();

Այս հրամանից ESP32- ը քնում է և չի կատարում օրինակ կոդի հաջորդ տողերը:

Կարևոր. Արթնացման բոլոր պարամետրերը պետք է կատարվեն վերը նշված հրամանը կատարելուց առաջ:

Քայլ 9: Ահա որոշ ավելի կարևոր տեղեկություններ

Ահա որոշ ավելի կարևոր տեղեկություններ
Ահա որոշ ավելի կարևոր տեղեկություններ

Ստորև բերված զանգը վերադարձնում է ESP32 արթնացման պատճառը:

1: EXT0 2: EXT1 3: IMԱՄԱՆԱԿԸ 4: TOUCHPAD 5: ULP

esp_sleep_get_wakeup_cause ();

Եթե մենք արթնացնենք touchpad- ով, մենք կարող ենք վերականգնել, թե որ GPIO- ն է, որ հպումը տեղի է ունեցել հրամանի միջոցով

esp_sleep_get_touchpad_wakeup_status ();

Ամեն անգամ, երբ ESP32- ն արթնանում է, այն նորից շրջանցում է կարգավորումը: Այսպիսով, բոլոր փոփոխականները, որոնք սահմանված չեն RTC հիշողության մեջ, կվերադառնան իրենց սկզբնական վիճակին:

Փոփոխականները հիշողության մեջ պահելու համար նույնիսկ քնելուց հետո օգտագործեք ստորև բերված օրինակում փոփոխականների հայտարարությունը.

// RTC_DATA_ATTR ալոկա և հիշողություն RTCRTC_DATA_ATTR int bootCount = 0;

Քայլ 10: Demուցադրություն

Ցույց
Ցույց

Տեսանյութում երևում է, որ ծրագիրը աշխատում է ՝ ըստ պատկերի:

Քայլ 11. WiFi NodeMCU-32S ESP-WROOM-32

WiFi NodeMCU-32S ESP-WROOM-32
WiFi NodeMCU-32S ESP-WROOM-32

Քայլ 12: Հավաքում

Ժողով
Ժողով

Քայլ 13: Programրագիր

Այժմ մենք կկազմենք ծրագիր, որտեղ մենք կկարգավորենք ESP32- ը ՝ Deep Sleep ռեժիմ մտնելու համար: Սա կարթնանա երեք տարբեր եղանակներով ՝ մեկը Արտաքին արթնացման համար (ext0), մեկը ՝ erամաչափի համար, և մեկը ՝ Touchpad- ի համար: Նրանք չեն կարող աշխատել միասին, ուստի մենք կօգտագործենք մի փոփոխական, որը կլինի հաշվիչ այն անգամների համար, երբ ESP32- ը Boot- ին տվել է արթնանալու ճանապարհը կազմաձևելու համար:

Քայլ 14: Պահանջվում է գրադարան

Պահանջվում է գրադարան
Պահանջվում է գրադարան

OLED էկրանը կառավարելու համար մեզ արտաքին գրադարան է պետք: Դրա համար մենք ներբեռնելու ենք U8g2 գրադարանը:

Arduino IDE- ում գնացեք Էսքիզների ընտրացանկ >> Ներառել գրադարան >> Կառավարեք գրադարանները….

Քայլ 15. Գրադարաններ և փոփոխականներ

Մենք ներառել ենք գրադարանը `OLED էկրանը վերահսկելու համար, ինչպես նաև ցուցադրիչի վերահսկիչի պատյան կառուցող: Բացի այդ, մենք փոփոխականը տեղաբաշխում ենք RTC հիշողության մեջ: Մենք դնում ենք զգայունությունը հպման ընդունման համար, միկրովայրկյան փոխակերպման գործակիցը վայրկյանների ընթացքում, և այն ժամանակը, երբ ESP32- ը անցնում է քնի ռեժիմին (վայրկյաններով):

#include // biblioteca para controle do display oled

// construtor da instancia do controlador to display // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C էկրան (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR ալկոհա և հիշողություն 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) #սահմանել TIME_TO_SLEEP

Քայլ 16: Կարգավորում

Setup- ում մենք ավելացնում ենք Boot- ի կատարման քանակը: Մենք կանչում ենք Boot մոտիվը տպելու գործառույթը: Եթե Boot- ի համարը PAR է, մենք սահմանում ենք ESP32- ի արթնացումը (EXT0) կոճակի միջոցով: Եթե դա 3 -ի բազմապատիկ է, մենք սահմանում ենք ESP32- ը, որ որոշ ժամանակ անց արթնանա: Հակառակ դեպքում, մենք ստեղծում ենք capacitive touch pins ՝ արթնացնելու ESP32- ը: Ի վերջո, մենք դնում ենք Touchpad- ը որպես արթնացման աղբյուր և ստիպում ESP32- ին մտնել քնի ռեժիմ:

void setup () {Serial.begin (115200); ուշացում (1000); // ավելացում կամ թվերի ավելացում, որը թույլ է տալիս կատարել BOOT և ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se numero de boot for PAR configuramos o ESP32 para desperatar através do botão (EXT0) if (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Բարձր, 0 = }ածր} // se for multiplo de 3 configuramos o ESP32 for depertis depois de um tempo 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 capacitivo despertar o ESP32 else {// Setup break on Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, հետադարձ զանգ, շեմ); // Կարգավորել Touchpad- ը որպես արթնացման աղբյուր esp_sleep_enable_touchpad_wakeup (); } Serial.println («entrando em modo sleep»); esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}

Քայլ 17. Loop, Callback & ConfigureDisplay

Օղակում մենք անելիք չունենք: Այնուհետև մենք շարունակում ենք հետադարձ զանգի ընդհատումը, եթե ինչ -որ բան ունենք անելու, երբ ընդհատումը տեղի է ունենում: Ինչ վերաբերում է configureDisplay- ին, մենք նախաստորագրում ենք ցուցադրումը և կարգավորում որոշ պարամետրեր: Մենք էկրանի վրա տպում ենք 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 and configura alguns parametros display. սկսել (); 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, լարային (bootCount).c_str ()); display.drawString (0, 4, "MOTIVO:"); }

Քայլ 18: Print_wakeup_reason (իմանալով արթնության պատճառը)

Այստեղ մենք ունենք ESP32 արթնացման պատճառը տպելու գործառույթ: Ստուգեք քորոցը և տպեք էկրանին:

// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Լարային պատճառ = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakeup_reason) {case 1: reason = "EXT0 RTC_IO BTN"; ընդմիջում; դեպք 2: պատճառ = "EXT1 RTC_CNTL"; ընդմիջում; դեպք 3: պատճառ = "IMԱՄԱՆԱԿ"; ընդմիջում; դեպք 4: պատճառ = "TOUCHPAD"; ընդմիջում; դեպք 5: պատճառ = "ULP PROGRAM"; ընդմիջում; լռելյայն ՝ reason = "NO DS CAUSE"; ընդմիջում; } Serial.println (պատճառ); display.clearLine (6); // apaga a linha 6 do 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: Print_wakeup_touchpad (իմացեք GPIO Touch- ը)

Այժմ, այս քայլում, մենք ունենք այն գործառույթը, որը տպում է հպված քորոցը: Մենք վերականգնեցինք GPIO- ն, որն արթնացրեց ESP32- ը և տպեց այն էկրանին:

// função para imprimir o pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // վերականգնել GPIO կամ despertou o ESP32 լարային GPIO = ""; անջատիչ (touchPin) {case 0: GPIO = "4"; ընդմիջում; գործ 1: GPIO = "0"; ընդմիջում; դեպք 2: GPIO = "2"; ընդմիջում; դեպք 3: GPIO = "15"; ընդմիջում; դեպք 4: GPIO = "13"; ընդմիջում; դեպք 5: GPIO = "12"; ընդմիջում; դեպք 6: GPIO = "14"; ընդմիջում; դեպք 7: GPIO = "27"; ընդմիջում; գործ 8: GPIO = "33"; ընդմիջում; դեպք 9: GPIO = "32"; ընդմիջում; լռելյայն ՝ Serial.println («Արթնանալ touchpad- ով»); ընդմիջում; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // apaga a linha 7 do display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}

Քայլ 20: Ներբեռնեք ֆայլերը

PDF

ԻՆՈ

Խորհուրդ ենք տալիս: