Բովանդակություն:
- Քայլ 1: Ներածություն
- Քայլ 2. ESP32- ի արթնացման ուղիները
- Քայլ 3: Timամաչափ
- Քայլ 4: Արտաքին արթնացում (ext0)
- Քայլ 5: Արտաքին արթնացում (ext1)
- Քայլ 6: ULP համակարգչային արթնացում
- Քայլ 7: Touchpad
- Քայլ 8: Մտեք խորը քնի ռեժիմ
- Քայլ 9: Ահա որոշ ավելի կարևոր տեղեկություններ
- Քայլ 10: Demուցադրություն
- Քայլ 11. WiFi NodeMCU-32S ESP-WROOM-32
- Քայլ 12: Հավաքում
- Քայլ 13: Programրագիր
- Քայլ 14: Պահանջվում է գրադարան
- Քայլ 15. Գրադարաններ և փոփոխականներ
- Քայլ 16: Կարգավորում
- Քայլ 17. Loop, Callback & ConfigureDisplay
- Քայլ 18: Print_wakeup_reason (իմանալով արթնության պատճառը)
- Քայլ 19: Print_wakeup_touchpad (իմացեք GPIO Touch- ը)
- Քայլ 20: Ներբեռնեք ֆայլերը
Video: Մարտկոցի կյանքը խնայելով խոր քունով `20 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:50
Ձեզ հետաքրքրու՞մ է մարտկոց օգտագործել ձեր 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
Քայլ 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: Ներբեռնեք ֆայլերը
ԻՆՈ
Խորհուրդ ենք տալիս:
Ինչպես եռապատկել AAA լապտերների մարտկոցի կյանքը `3 քայլ
Ինչպես եռապատկել AAA լապտերների մարտկոցի կյանքը. AAA մարտկոցներով աշխատող 3W LED լապտեր օգտագործելիս ակնկալում եք, որ դրանք կտևեն մոտ 30 րոպե: Կա մի տարբերակ, որը կարող է եռապատկել շահագործման ժամանակը ՝ օգտագործելով AA մարտկոցներ, ինչը ես ձեզ ցույց կտամ ՝ դրան միացնելով AA մարտկոցի բռնիչը
Խնայելով ջուր. 4 քայլ
Խնայելով ջուր .: Frecuentemente nos damos duchas muy largas o no cerramos la llave. Este proyecto, mide cuanta agua están gastando y te avisa cuando pasas de ceros límites.Necesitas un Makey & MakeyCinta AdhesivaUtilizar una l
ESP-01 Շարժման սենսոր ՝ խորը քունով. 5 քայլ
ESP-01 Շարժման սենսոր ՝ խորը քունով. Ես աշխատում էի տնական շարժման տվիչների ստեղծման վրա, որոնք գործարկելիս էլ. Կան բազմաթիվ օրինակելի հրահանգներ և դրա կատարման այլ օրինակներ: Վերջերս ես պետք է դա անեի մարտկոցով աշխատող PIR շարժման տվիչով և ESP- ով
Ինչպես երկարացնել ձեր նոութբուքի մարտկոցի լիցքավորման կյանքը `4 քայլ
Ինչպես երկարացնել ձեր նոութբուքի մարտկոցի լիցքը: Այս ուսանելի դասում դուք կսովորեք, թե ինչպես երկարացնել նոութբուքի լիցքավորման կյանքը: Եթե դուք պատրաստվում եք թռչել կամ մեքենա վարել երկար հեռավորության վրա, այս քայլերը կարող են օգնել մարտկոցը սովորականից շատ ավելի երկար տևել և երթևեկությունը դարձնել մի փոքր ավելի սթրեսային:
Բարձրացրեք մարտկոցի կյանքը էլեկտրոնիկայի համար `8 քայլ
Բարձրացրեք մարտկոցի կյանքը էլեկտրոնիկայի համար. Այս ուսանելի (լավ, իրականում ոչ ուսանելի) վրա ես ձեզ ցույց կտամ մի քանի խորհուրդ և հնարք ՝ էլեկտրոնիկայի համար մի քանի տարբեր տեսակի մարտկոցների կյանքը մեծացնելու համար: կյանք էլեկտրոնիկայի և ք