Мазмұны:

Терең ұйқы кезінде батареяның қызмет ету мерзімін үнемдеу: 20 қадам
Терең ұйқы кезінде батареяның қызмет ету мерзімін үнемдеу: 20 қадам

Бейне: Терең ұйқы кезінде батареяның қызмет ету мерзімін үнемдеу: 20 қадам

Бейне: Терең ұйқы кезінде батареяның қызмет ету мерзімін үнемдеу: 20 қадам
Бейне: Көптен күткен??? Радио қабылдағыш XHDATA D-109 немесе әлі де TECSUN PL-320? 2024, Қараша
Anonim
Image
Image
ESP32 ояту жолдары
ESP32 ояту жолдары

Сіз батареяны ESP32 батареясымен пайдаланғыңыз келе ме? Егер солай болса, мен бүгін осы тақырыпқа қатысты маңызды техникалық ақпаратты талқылаймын. Біз білеміз, бұл микроконтроллер ақпарат жіберген кезде көп энергия жұмсайды. Ол шамамен 190 миллиамперді тұтынады. Бұл бейнеде мен «Терең ұйқы» функциясымен ESP32 энергиясын қалай үнемдеу керектігін көрсетемін. Біз чипті осы режимге орнатамыз, осы режимнен шығудың жолдарын үйренеміз және ESP32 -ді оятудың үш түрлі жолын көрсететін мысал жасаймыз.

Радио процессорға емес, көп энергия жұмсайтынын есте ұстаған жөн. Энергияны үнемдеу өте маңызды. Себебі соңғы нүктелер (ақпаратты жіберетін тізбектер) көбінесе батареямен жұмыс істейді және бес жылға дейін созылуы керек. Кейбір өндірушілер он жылға дейін қызмет етуге уәде береді, және бұл соңғы нүктелерді көп пайдаланбайтын жоғары сапалы аккумуляторлар үшін жарамды. Барлық басқа жағдайларда, мен сізге сіздің схемаңыздан энергияны үнемдеу үшін Deep Sleep функциясын қолдануға кеңес беремін.

1 -қадам: Кіріспе

ESP32-де «Терең ұйқы» деп аталатын қуатты үнемдеу режимі бар. Бұл режимде процессорлар, жедел жадтың көпшілігі және барлық цифрлық сағаттық перифериялық құрылғылар өшіріледі. Чиптің әлі де қосылуға болатын жалғыз бөліктері - бұл RTC контроллері, RTC перифериялық құрылғылары (ULP сопроцессорды қоса) және RTC жадылары.

Бізде ESP32 ұйықтап жатқанда оятудың бірнеше әдісі бар. Терең ұйқы режиміне өтпес бұрын ояту көздерін кез келген уақытта орнатуға болады.

2 -қадам: ESP32 -ді ояту жолдары

ESP32 -ді оятудың бес әдісі бар:

• Таймер

• Сыртқы ояту (ext0)

• Сыртқы ояту (ext1)

• ULP сопроцессорының оянуы

• Сенсорлық тақта

3 -қадам: таймер

RTC контроллерінде орнатылған таймер бар, оны чипті алдын ала белгіленген уақыттан кейін белсендіру үшін пайдалануға болады. Уақыт микросекундтық дәлдікпен көрсетіледі.

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 = LOW, 1 = HIGH)

5 -қадам: Сыртқы ояту (ext1)

RTC контроллері бірнеше RTC GPIO көмегімен оятқышты іске қосатын логиканы қамтиды.

esp_deep_sleep_enable_ext1_wakeup (uint64_t маскасы, esp_ext1_wakeup_mode_t режимі)

маска> белсендіруге әкелетін GPIO нөмірлерінің бит маскасы. Бұл нүктелік суретте тек 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 немесе сыйымдылық сенсорының мәндерін бақылауға және белгілі бір оқиға анықталған кезде чипті іске қосуға болады.

ULP сопроцессоры RTC перифериялық құрылғыларының қуат доменінің бөлігі болып табылады және баяу жады RTC -де сақталған бағдарламаны басқарады. Сондықтан, егер бұл белсендіру режимі қажет болса, терең ұйқы кезінде RTC перифериялық құрылғылары мен RTC баяу жады қосылады.

7 -қадам: сенсорлық тақта

RTC контроллерінде сыйымдылық сенсорлық сенсорлардың көмегімен дабылды іске қосатын логика бар. Сенсорлық түйреуіштің анықтамасы басқаша. Біз қалаған түйреуіштердің әрқайсысы үшін сенсорлық үзілісті қолдануымыз керек.

Үзілістерді орнатқаннан кейін сенсорларды қолдану үшін ояту режимін қостық.

// Сенсорлық тақтаны ояту көзі ретінде теңшеңіз esp_sleep_enable_touchpad_wakeup ();

8 -қадам: Терең ұйқы режиміне өту

Ояту режимін орнатқаннан кейін, ESP32 режимін терең ұйқы режиміне қою үшін бір пәрмен жеткілікті (2,5 мкА немесе одан аз жұмсайды). Мен бұл шығынның пластинадан емес, ESP чипінен екенін баса айтамын, себебі соңғысы көбірек жұмсайды.

esp_deep_sleep_start ();

Бұл пәрменнен ESP32 ұйықтап қалады және келесі код жолдарын орындамайды.

Маңызды: барлық ояту параметрлері жоғарыдағы пәрменді орындамас бұрын жасалуы керек.

9 -қадам: Мұнда тағы бірнеше маңызды ақпарат бар

Мұнда тағы бірнеше маңызды ақпарат бар
Мұнда тағы бірнеше маңызды ақпарат бар

Төмендегі қоңырау ESP32 ояну себебін қайтарады.

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

esp_sleep_get_wakeup_cause ();

Егер сенсорлық тақта арқылы оятуды орнатсақ, пәрмен арқылы жанасудың қай GPIO -ны қалпына келтіре аламыз

esp_sleep_get_touchpad_wakeup_status ();

ESP32 оянған сайын, ол қайта орнату арқылы айналады. Осылайша, RTC жадында анықталмаған барлық айнымалылар бастапқы күйіне оралады.

Ұйықтағаннан кейін де айнымалыларды жадында сақтау үшін төмендегі мысалдағы айнымалы мәлімдемені қолданыңыз:

// RTC_DATA_ATTR барлық нұсқалары RTCRTC_DATA_ATTR int bootCount = 0;

10 -қадам: демонстрация

Демонстрация
Демонстрация

Бейнеде суретке сәйкес бағдарламаның жұмыс істейтіні көрсетілген.

11-қадам: WiFi NodeMCU-32S ESP-WROOM-32

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

12 -қадам: құрастыру

Ассамблея
Ассамблея

13 -қадам: Бағдарлама

Енді біз ESP32 -ді терең ұйқы режиміне кіруге теңшейтін бағдарлама жасаймыз. Бұл үш түрлі жолмен оянады: біреуі сыртқы ояту үшін (ext0), екіншісі таймер үшін, екіншісі сенсорлық тақта үшін. Олар бірге жұмыс істей алмайды, сондықтан біз ояту әдісін конфигурациялау үшін ESP32 Boot -тің санына есептегіш болатын айнымалы мәнді қолданамыз.

14 -қадам: Кітапхана қажет

Кітапхана қажет
Кітапхана қажет

OLED дисплейін басқару үшін бізге сыртқы кітапхана қажет. Ол үшін біз U8g2 кітапханасын жүктейміз.

Arduino IDE -де эскиз мәзіріне >> кітапхананы қосу >> кітапханаларды басқару … бөліміне өтіңіз.

15 -қадам: Кітапханалар мен айнымалылар

Біз OLED дисплейін басқаруға арналған кітапхананы, сонымен қатар дисплей контроллері данасының конструкторын қостық. Сонымен қатар, біз айнымалы мәнді RTC жадына бөлеміз. Біз сенсорлық қабылдауды, микросекундты түрлендіру коэффициентін және ESP32 ұйқы режиміне өтетін уақытты (секундпен) орнатамыз.

#include // biblioteca para controle көрсетіңіз

// construtor da instancia do controlador do display // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C дисплейі (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR RTC_DATA_ATTR int bootCount = 0 жадында сақталады; // sensibilidade para to aqueitação to toque #define Threshold 40 // furs de suhbatão de microsegundos for segundos #define uS_TO_S_FACTOR 1000000 // жылдамдық ESP32 ficará em modo sleep (emgundos) #анықтау TIME_TO_SLEEP 3

16 -қадам: Орнату

Орнату кезінде біз жүктеудің санын көбейтеміз. Біз жүктеу мотивін басып шығару функциясын шақырамыз. Егер жүктеу нөмірі PAR болса, біз ESP32 (EXT0) түймесі арқылы оятуды орнатамыз. Егер бұл 3 -ке еселік болса, біз ESP32 -ді белгіленген уақыттан кейін оянуға қоямыз. Әйтпесе, біз ESP32 -ді ояту үшін сыйымдылықты түйреуіштерді орнаттық. Ақырында, сенсорлық тақтаны ояту көзі ретінде орнатып, ESP32 -ді ұйқы режиміне мәжбүрлейміз.

void setup () {Serial.begin (115200); кешіктіру (1000); // қадамдарды көбейту BOOT ocorreu ++ bootCount; configureDisplay (); // BOOT -тың print_wakeup_reason () функциясын орындауға тырысыңыз (); // жүктеу PAR конфигурациясы үшін ESP32 үшін жүктеу (EXT0) if (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Жоғары, 0 = Төмен} // 3 конфигурациясы үшін ESP32 нұсқасы, егер де (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // ESP32 басқасына сенсорлық сыйымдылықтың конфигурациясы {// Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, кері байланыс, шекті) бойынша үзілісті орнату; // Сенсорлық тақтаны ояту көзі ретінде теңшеңіз esp_sleep_enable_touchpad_wakeup (); } Serial.println («ұйқы режимі»); esp_deep_sleep_start (); // ESP32 режиміне енгізу SLEEP}

17 -қадам: айналдыру, кері қоңырау шалу және конфигурациялау

Циклда бізде ештеңе жоқ. Содан кейін, егер үзіліс орын алған кезде бізде бірдеңе болса, біз кері шақыруды тоқтатамыз. ConfigureDisplay -ге қатысты біз дисплейді инициализациялаймыз және кейбір параметрлерді конфигурациялаймыз. Біз жүктеудің қанша рет болғанын экранға шығарамыз.

// loopvoid циклы жоқ () {} // кері қоңырау кері байланыстың жарамсыздығына кері байланыс () {// caso queira fazer ago ocorrer a interrupção} void configureDisplay () {// дисплей мен конфигурация параметрлері параметрлерінің дисплейі. баста(); display.setPowerSave (0); // modo powerSave (0-Off? 1-On) display.setFont (u8x8_font_torussansbold8_u); // fonte utilizada // unpime no display no BOO display.drawString (0, 0, «BOOT NUM:»); display.drawString (0, 2, String (bootCount).c_str ()); display.drawString (0, 4, «MOTIVO:»); }

18 -қадам: Print_wakeup_reason (Оянудың себебін білу)

Мұнда бізде ESP32 ояну себебін басып шығару функциясы бар. Түйреуішті тексеріп, дисплейде басып шығарыңыз.

// fun_ão para impimir a cause a do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Жолдың себебі = «»; ояну_себебі = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakeup_reason) {1 жағдай: себеп = «EXT0 RTC_IO BTN»; үзіліс; 2 -жағдай: себеп = «EXT1 RTC_CNTL»; үзіліс; 3 -жағдай: себеп = «ТАЙМЕР»; үзіліс; 4 -жағдай: себеп = «TOUCHPAD»; үзіліс; 5 -жағдай: себеп = «ULP БАҒДАРЛАМАСЫ»; үзіліс; әдепкі: reason = «NO DS CAUSE»; үзіліс; } Serial.println (себеп); display.clearLine (6); // дисплейде дисплей.drawString (0, 6, reason.c_str ()) көрсетіледі; // premime a causa do despertar no display // TOUCHPAD, егер сіз (wakeup_reason == 4) {print_wakeup_touchpad (); // verifica o pino e imprime жоқ}}

19 -қадам: Print_wakeup_touchpad (GPIO Touch біліңіз)

Енді, бұл қадамда бізде түйреуішті басып шығару функциясы бар. Біз ESP32 -ді оятатын GPIO -ны қалпына келтірдік және оны дисплейге басып шығардық.

// print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // GPIO немесе ESP32 String GPIO = «» жазуы; switch (touchPin) {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 («Сенсорлық тақта арқылы емес ояту»); үзіліс; } Serial.println («GPIO:»+GPIO); display.clearLine (7); // display 7d display.drawString (0, 7, «GPIO:»); display.drawString (6, 7, GPIO.c_str ()); // GPIO -ға жіберу

20 -қадам: файлдарды жүктеңіз

PDF

МЕН ЖОҚ

Ұсынылған: