Съдържание:
- Стъпка 1: Въведение
- Стъпка 2: Начини за събуждане на ESP32
- Стъпка 3: Таймер
- Стъпка 4: Външно събуждане (ext0)
- Стъпка 5: Външно събуждане (ext1)
- Стъпка 6: Събуждане на ULP копроцесор
- Стъпка 7: Тъчпад
- Стъпка 8: Влизане в режим на дълбок сън
- Стъпка 9: Ето още по -важна информация
- Стъпка 10: Демонстрация
- Стъпка 11: WiFi NodeMCU-32S ESP-WROOM-32
- Стъпка 12: Монтаж
- Стъпка 13: Програма
- Стъпка 14: Изисква се библиотека
- Стъпка 15: Библиотеки и променливи
- Стъпка 16: Настройка
- Стъпка 17: Цикъл, обратно повикване и конфигуриране на дисплея
- Стъпка 18: Print_wakeup_reason (знаейки причината за пробуждането)
- Стъпка 19: Print_wakeup_touchpad (познайте GPIO Touch)
- Стъпка 20: Изтеглете файловете
Видео: Спестяване на живота на батерията с дълбок сън: 20 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Интересувате ли се от използването на батерия с вашия ESP32? Ако е така, днес ще обсъдя важна техническа информация по този въпрос. Знаем, че този микроконтролер изразходва много енергия, когато предава информация. Консумира близо 190 милиампера. В този видеоклип ще покажа как да се пести енергия от ESP32 с така наречената функция „DEEP SLEEP“. Ще настроим чипа да влиза в този режим, ще научим начините за излизане от този режим и ще създадем пример, показващ три различни начина за събуждане на ESP32.
Важно е да запомните, че радиото харчи много енергия, а не процесора. Спестяването на енергия е много важно. Това е така, защото крайните точки (веригите, които изпращат информация) често се захранват от батерии и трябва да издържат до пет години. Има някои производители, които обещават продължителност до десет години и това важи за висококачествени батерии, които не използват толкова крайните точки. Във всички останали случаи ви съветвам да използвате Deep Sleep, за да пестите енергия от веригата си.
Стъпка 1: Въведение
ESP32 има енергоспестяващ режим, наречен „Deep Sleep“. В този режим процесорите, повечето RAM и всички периферни устройства с тактова честота са изключени. Единствените части на чипа, които все още могат да бъдат свързани, са 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 = НИСКО, 1 = ВИСОКО)
Стъпка 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 са в НИСКО
• ESP_EXT1_WAKEUP_ANY_HIGH: събужда се, когато някой от избраните GPIOs е ВИСОК
Стъпка 6: Събуждане на ULP копроцесор
Съпроцесорът ULP може да работи, докато чипът е в режим на дълбоко заспиване и може да се използва за търсене на сензори, наблюдение на стойностите на ADC или капацитивен сензор за докосване и активиране на чипа, когато се открие конкретно събитие.
Съпроцесорът ULP е част от домейна на захранване на периферните устройства RTC и изпълнява програмата, съхранявана в RTC с бавна памет. Следователно, RTC периферните устройства и RTC бавната памет ще бъдат активирани по време на Deep Sleep, ако се поиска този режим на активиране.
Стъпка 7: Тъчпад
RTC контролерът съдържа логика за задействане на алармата с помощта на капацитивните сензори за докосване. Определението на сензорния щифт обаче е различно. Трябва да използваме прекъсване с докосване за всеки от желаните щифтове.
След като зададохме прекъсванията, активирахме режима на събуждане, за да използваме сензорите.
// Конфигуриране на тъчпада като източник за събуждане esp_sleep_enable_touchpad_wakeup ();
Стъпка 8: Влизане в режим на дълбок сън
След като настроите режим на събуждане, е достатъчна една команда за поставяне на ESP32 в режим на дълбоко заспиване (изразходване 2,5 μA или по-малко). Тук подчертавам, че този разход е от чипа на ESP, а не от плочата, тъй като последната харчи повече.
esp_deep_sleep_start ();
От тази команда ESP32 заспива и не изпълнява например следващите редове код.
Важно: Всички настройки за събуждане трябва да бъдат направени преди изпълнението на горната команда.
Стъпка 9: Ето още по -важна информация
Повикването по -долу връща причината за събуждане на ESP32.
1: EXT0 2: EXT1 3: ТАЙМЕР 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
Стъпка 12: Монтаж
Стъпка 13: Програма
Сега ще направим програма, в която ще конфигурираме ESP32 за влизане в режим на дълбоко заспиване. Това ще се събуди по три различни начина: един за външно събуждане (ext0), един за таймер и един за тъчпад. Те не могат да работят заедно, така че ще използваме променлива, която ще бъде брояч за броя пъти, които ESP32 е дал Boot, за да конфигурира начина за събуждане.
Стъпка 14: Изисква се библиотека
За да контролираме OLED дисплея, се нуждаем от външна библиотека. За целта ще изтеглим библиотеката U8g2.
В IDE на Arduino отидете в менюто Sketch >> Include Library >> Manage Libraries ….
Стъпка 15: Библиотеки и променливи
Включихме библиотеката за управление на OLED дисплея, както и конструктор на екземпляра на контролера на дисплея. Също така, ние разпределяме променливата в RTC паметта. Задаваме чувствителността за приемане на докосване, коефициента на преобразуване в микросекунда за секунди и времето, когато ESP32 преминава в режим на заспиване (в секунди).
#include // biblioteca para controle do display oled
// конструктор за инсталиране на контролер или дисплей // 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 razgovaã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
Стъпка 16: Настройка
В настройката увеличаваме броя на случаите на зареждане. Извикваме функцията за отпечатване на мотива Boot. Ако номерът за зареждане е PAR, ние настройваме ESP32 да се събужда чрез бутона (EXT0). Ако е кратно на 3, ние настройваме ESP32 да се събуди след определено време. В противен случай ние настройваме капацитивните сензорни щифтове, за да събудим ESP32. И накрая, ние зададохме тъчпада като източник за събуждане и принудихме ESP32 да влезе в режим на заспиване.
void setup () {Serial.begin (115200); забавяне (1000); // прибавяне на числови детайли за BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // се показва числото за зареждане за PAR конфигурации или ESP32, за да се отървем от изискванията (EXT0), ако (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Високо, 0 = Ниско} // се използва за многоплощни 3 конфигурации o ESP32 за деспертиране на депо за ум темпо определение иначе ако (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // caso contrario configuramos os pinos de touch kapacitivo para despertar o ESP32 else {// Настройка прекъсване на Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, обратно повикване, праг); // Конфигуриране на тъчпада като източник за събуждане esp_sleep_enable_touchpad_wakeup (); } Serial.println (“entrando em modo sleep”); esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}
Стъпка 17: Цикъл, обратно повикване и конфигуриране на дисплея
В цикъла нямаме какво да правим. След това пристъпваме към прекъсване на обратното повикване, ако имаме какво да правим, когато настъпи прекъсването. Що се отнася до configureDisplay, ние инициализираме дисплея и конфигурираме някои параметри. Отпечатваме на екрана колко пъти се е случило зареждането.
// няма a fazer без loopvoid loop () {} // callback das interrupções void callback () {// caso queira fazer algo ao ocorrer a interrupção} void configureDisplay () {// inicializa o display e configura alguns parametros display. begin (); display.setPowerSave (0); // modo powerSave (0-Off? 1-On) display.setFont (u8x8_font_torussansbold8_u); // използване на фонда // imprime без дисплей 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:"); }
Стъпка 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 (); // възстановяване на превключвател за причиняване на деспертар (wakeup_reason) {случай 1: reason = "EXT0 RTC_IO BTN"; прекъсване; случай 2: reason = "EXT1 RTC_CNTL"; прекъсване; случай 3: reason = "TIMER"; прекъсване; случай 4: reason = "TOUCHPAD"; прекъсване; случай 5: reason = "ULP PROGRAM"; прекъсване; по подразбиране: reason = "NO DS CAUSE"; прекъсване; } Serial.println (причина); 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 (wakeup_reason == 4) {print_wakeup_touchpad (); // verifica o pino e imprime без дисплей}}
Стъпка 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 que despertou o ESP32 String GPIO = ""; ключ (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); // apaga a linha 7 do display display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}
Стъпка 20: Изтеглете файловете
АЗ НЕ
Препоръчано:
Как да утроите живота на батерията на фенерчетата AAA: 3 стъпки
Как да утроите живота на батерията на фенерчетата AAA: Когато използвате 3W LED фенери, захранвани от батерии AAA, ще очаквате те да издържат около 30 минути. Има начин да утроите времето за работа, като използвате батерии тип АА, което ще ви покажа, като закачите държач на батерия АА към него
Метеорологична станция: ESP8266 С дълбок сън, SQL, Графиране по колба и график: 3 стъпки
Метеорологична станция: ESP8266 С дълбок сън, SQL, Графиране чрез колба и плот: Ще бъде ли забавно да знаете температурата, влажността или интензитета на светлината на вашия балкон? Знам, че бих. Затова направих проста метеорологична станция за събиране на такива данни. Следните раздели са стъпките, които предприех, за да създам такъв. Нека започнем
ESP-01 Сензор за движение с дълбок сън: 5 стъпки
ESP-01 Сензор за движение с дълбок сън: Работя по създаването на домашно направени сензори за движение, които изпращат имейл съобщение при задействане. Има много примерни инструкции и други примери за това. Наскоро трябваше да направя това с PIR сензор за движение с батерия и ESP
Удвоете живота на батерията на DX3 радиото от Spektrum за под $ 20: 11 стъпки
Удвоете живота на батерията на DX3 радиото от Spektrum за под $ 20: Първо получих идеята за това в темата за DX6/7 на форумите на RCGRoups.com. Карам нитро коли, затова си купих DX3. Използвах радиото известно време и животът на батерията ми беше от по-добрата страна на повечето радиостанции-но собствениците на DX7 станаха като
Как да удължите живота на батерията на вашия лаптоп: 4 стъпки
Как да удължите живота на заряда на батерията на вашия лаптоп: В тази инструкция ще научите как да удължите живота на заряда на лаптопа. Ако ще летите или шофирате на дълги разстояния, тези стъпки могат да помогнат батерията да издържи много по -дълго от обичайното и да направи пътуването малко по -малко стресиращо