Spisu treści:
- Krok 1: Wprowadzenie
- Krok 2: Sposoby wybudzenia ESP32
- Krok 3: Zegar
- Krok 4: Wybudzenie zewnętrzne (ext0)
- Krok 5: Wybudzenie zewnętrzne (ext1)
- Krok 6: Wybudzenie koprocesora ULP
- Krok 7: Touchpad
- Krok 8: Wejście w tryb głębokiego uśpienia
- Krok 9: Oto kilka ważnych informacji
- Krok 10: Demonstracja
- Krok 11: Wi-Fi NodeMCU-32S ESP-WROOM-32
- Krok 12: Montaż
- Krok 13: Program
- Krok 14: Wymagana biblioteka
- Krok 15: Biblioteki i zmienne
- Krok 16: Konfiguracja
- Krok 17: Pętla, oddzwanianie i konfiguracja wyświetlacza
- Krok 18: Print_wakeup_reason (znając przyczynę przebudzenia)
- Krok 19: Print_wakeup_touchpad (znaj GPIO Touch)
- Krok 20: Pobierz pliki
Wideo: Oszczędzanie baterii przy głębokim śnie: 20 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Czy jesteś zainteresowany użyciem baterii z ESP32? Jeśli tak, omówię dzisiaj kilka ważnych informacji technicznych na ten temat. Wiemy, że ten mikrokontroler zużywa dużo energii podczas przesyłania informacji. Zużywa blisko 190 miliamperów. W tym filmie pokażę jak oszczędzać energię z ESP32 dzięki funkcji tzw. „DEEP SLEEP”. Ustawimy chip, aby wejść w ten tryb, nauczymy się, jak wyjść z tego trybu i stworzymy przykład pokazujący trzy różne sposoby wybudzenia ESP32.
Należy pamiętać, że radio zużywa dużo energii, a nie procesor. Oszczędność energii jest bardzo ważna. Dzieje się tak, ponieważ punkty końcowe (obwody, które wysyłają informacje) są często zasilane bateryjnie i powinny działać do pięciu lat. Niektórzy producenci obiecują czas działania do dziesięciu lat i dotyczy to wysokiej jakości baterii, które nie używają tak często punktów końcowych. We wszystkich innych przypadkach radzę używać Deep Sleep, aby oszczędzać energię z obwodu.
Krok 1: Wprowadzenie
ESP32 ma tryb oszczędzania energii, zwany „Głębokim uśpienia”. W tym trybie procesory, większość pamięci RAM i wszystkie taktowane cyfrowo urządzenia peryferyjne są wyłączone. Jedyne części układu, które można jeszcze podłączyć, to sterownik RTC, urządzenia peryferyjne RTC (w tym koprocesor ULP) i pamięci RTC.
Mamy kilka sposobów na wybudzenie ESP32 podczas snu. Źródła budzenia można skonfigurować w dowolnym momencie przed przejściem w tryb głębokiego uśpienia.
Krok 2: Sposoby wybudzenia ESP32
Istnieje pięć sposobów na wybudzenie ESP32:
• Zegar
• budzenie zewnętrzne (ext0)
• budzenie zewnętrzne (ext1)
• budzenie koprocesora ULP
• Panel dotykowy
Krok 3: Zegar
Sterownik RTC ma wbudowany zegar, który może być użyty do aktywacji chipa po określonym czasie. Czas jest określony z dokładnością do mikrosekund.
esp_deep_sleep_enable_timer_wakeup(uint64_t time_in_us)
time_in_us> to czas w mikrosekundach
Krok 4: Wybudzenie zewnętrzne (ext0)
Moduł RTC IO zawiera logikę wyzwalającą alarm, gdy jeden z GPIO RTC wejdzie na wstępnie zdefiniowany poziom logiczny. RTC IO jest częścią domeny zasilania urządzeń peryferyjnych RTC, więc urządzenia peryferyjne RTC będą utrzymywane przy życiu podczas głębokiego uśpienia, jeśli wymagane jest to źródło aktywacji.
esp_deep_sleep_enable_ext0_wakeup(gpio_num_t gpio_num, poziom wewnętrzny)
gpio_num> numer GPIO używany jako źródło aktywacji. Można używać tylko GPIO z funkcją RTC: 0, 2, 4, 12-15, 25-27, 32-39.
poziom> poziom wejściowy, który wywoła alarm (0 = NISKI, 1 = WYSOKI)
Krok 5: Wybudzenie zewnętrzne (ext1)
Sterownik RTC zawiera logikę do wyzwalania budzika za pomocą wielu GPIO RTC.
esp_deep_sleep_enable_ext1_wakeup (maska uint64_t, tryb esp_ext1_wakeup_mode_t)
mask> maska bitowa numerów GPIO, które spowodują aktywację. W tej bitmapie można używać tylko GPIO z obsługą RTC: 0, 2, 4, 12-15, 25-27, 32-39.
mode> wybierz funkcję logiczną służącą do określenia warunku aktywacji:
• ESP_EXT1_WAKEUP_ALL_LOW: budzi się, gdy wszystkie wybrane GPIO są w stanie LOW
• ESP_EXT1_WAKEUP_ANY_HIGH: budzi się, gdy którykolwiek z wybranych GPIO jest WYSOKI
Krok 6: Wybudzenie koprocesora ULP
Koprocesor ULP może działać, gdy chip jest w stanie głębokiego uśpienia i może być używany do wyszukiwania czujników, monitorowania wartości ADC lub pojemnościowych czujników dotykowych oraz aktywowania chipa po wykryciu określonego zdarzenia.
Koprocesor ULP jest częścią domeny mocy urządzeń peryferyjnych RTC i uruchamia program przechowywany w wolnej pamięci RTC. Dlatego urządzenia peryferyjne RTC i wolna pamięć RTC zostaną aktywowane podczas głębokiego uśpienia, jeśli ten tryb aktywacji jest wymagany.
Krok 7: Touchpad
Sterownik RTC zawiera logikę wyzwalającą alarm za pomocą pojemnościowych czujników dotykowych. Definicja pinu dotykowego jest jednak inna. Musimy użyć przerwania dotykowego dla każdego z pożądanych pinów.
Po ustawieniu przerwań włączyliśmy tryb wybudzania, aby korzystać z czujników.
//Skonfiguruj Touchpad jako źródło budzenia esp_sleep_enable_touchpad_wakeup();
Krok 8: Wejście w tryb głębokiego uśpienia
Po ustawieniu trybu wybudzania wystarczy jedno polecenie, aby wprowadzić ESP32 w tryb Deep Sleep (wydając 2,5 μA lub mniej). Podkreślam tutaj, że ten wydatek pochodzi z układu ESP, a nie z płytki, bo ta wydaje więcej.
esp_deep_sleep_start();
Z tego polecenia ESP32 zasypia i nie wykonuje na przykład kolejnych linii kodu.
Ważne: Wszystkie ustawienia wybudzania należy wprowadzić przed wykonaniem powyższego polecenia.
Krok 9: Oto kilka ważnych informacji
Poniższe wywołanie zwraca przyczynę wybudzenia ESP32.
1: EXT0 2: EXT1 3: TIMER 4: PANEL DOTYKOWY 5: ULP
esp_sleep_get_wakeup_cause();
Jeśli ustawimy wybudzanie za pomocą touchpada, możemy odzyskać, które GPIO nastąpiło za pomocą polecenia
esp_sleep_get_touchpad_wakeup_status();
Za każdym razem, gdy ESP32 się obudzi, ponownie przejdzie przez konfigurację. W ten sposób wszystkie zmienne, które nie są zdefiniowane w pamięci zegara czasu rzeczywistego powrócą do stanu wyjściowego.
Aby zachować zmienne w pamięci nawet po zaśnięciu, użyj deklaracji zmiennej w poniższym przykładzie:
//RTC_DATA_ATTR w zmiennej pamięci RTCRTC_DATA_ATTR int bootCount = 0;
Krok 10: Demonstracja
Film pokazuje działanie programu, zgodnie z obrazem.
Krok 11: Wi-Fi NodeMCU-32S ESP-WROOM-32
Krok 12: Montaż
Krok 13: Program
Stworzymy teraz program, w którym skonfigurujemy ESP32, aby wejść w tryb głębokiego uśpienia. Zostanie to wybudzone na trzy różne sposoby: jeden dla zewnętrznego budzenia (ext0), jeden dla timera i jeden dla touchpada. Nie mogą ze sobą współpracować, więc użyjemy zmiennej, która będzie licznikiem, ile razy ESP32 dał Bootowi, aby skonfigurować sposób budzenia.
Krok 14: Wymagana biblioteka
Do sterowania wyświetlaczem OLED potrzebujemy zewnętrznej biblioteki. W tym celu pobierzemy bibliotekę U8g2.
W Arduino IDE przejdź do menu Szkic >> Dołącz bibliotekę >> Zarządzaj bibliotekami….
Krok 15: Biblioteki i zmienne
Dodaliśmy bibliotekę do sterowania wyświetlaczem OLED, a także konstruktor instancji kontrolera wyświetlacza. Również alokujemy zmienną w pamięci RTC. Ustawiamy czułość na akceptację dotyku, przelicznik mikrosekund na sekundy oraz czas przejścia ESP32 w tryb uśpienia (w sekundach).
#include //biblioteca para controle do display 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 w pamięci zmiennej 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 mode sleep (em segundos) #define TIME_TO_SLEEP 3
Krok 16: Konfiguracja
W Instalatorze zwiększamy liczbę wystąpień rozruchu. Wywołujemy funkcję, aby wydrukować motyw Boot. Jeśli numerem rozruchu jest PAR, ustawiamy ESP32, aby wybudzał się za pomocą przycisku (EXT0). Jeśli jest to wielokrotność 3, ustawiamy ESP32, aby wybudzał się po określonym czasie. W przeciwnym razie ustawiamy pojemnościowe piny dotykowe, aby obudzić ESP32. Na koniec ustawiamy Touchpad jako źródło wybudzenia i zmuszamy ESP32 do przejścia w tryb uśpienia.
void setup() { Serial.begin(115200); opóźnienie (1000); //zwiększenie o numero de vezes que o BOOT ocorreu ++bootCount; configureDisplay(); //chama a função para imprimir o motivo zrobić BOOT print_wakeup_reason(); //se o numer startowy dla konfiguracji PAR lub ESP32 dla despertar através do botão (EXT0) if(bootCount % 2 == 0) { esp_sleep_enable_ext0_wakeup(GPIO_NUM_39, 1); //1 = High, 0 = Low } //se dla wielu konfiguracji 3 lub ESP32 dla określonego tempa w innym przypadku if(bootCount % 3 == 0) { esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); } //Konfiguracja w kontraście do obsługi funkcji dotykowych dla ESP32 else { //Konfiguracja przerwania na touchpadzie 5 (GPIO12) touchAttachInterrupt(T5, callback, Threshold); //Skonfiguruj Touchpad jako źródło budzenia esp_sleep_enable_touchpad_wakeup(); } Serial.println(„entrando em modo sleep ); esp_deep_sleep_start(); //dla ESP32 entrar em modo SLEEP }
Krok 17: Pętla, oddzwanianie i konfiguracja wyświetlacza
W Pętli nie mamy nic do roboty. Następnie przechodzimy do przerwania wywołania zwrotnego, jeśli mamy coś do zrobienia, gdy nastąpi przerwanie. W przypadku configureDisplay inicjujemy wyświetlacz i konfigurujemy niektóre parametry. Drukujemy na ekranie, ile razy doszło do rozruchu.
//nada se fazer no loopvoid loop() { } //callback das interrupções void callback(){ //caso queira fazer algo ao ocorrer a interrupção } void configureDisplay() { //inicjalizacji wyświetlania i konfigurowania parametrów wyświetlania parametrów. rozpocząć(); display.setPowerSave(0); //modo powerSave (0-Off ? 1-On) display.setFont(u8x8_font_torussansbold8_u); //fonte utilizada //imprime no display o 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:"); }
Krok 18: Print_wakeup_reason (znając przyczynę przebudzenia)
Tutaj mamy funkcję drukowania przyczyny budzenia ESP32. Sprawdź pinezkę i wydrukuj na wyświetlaczu.
//função dla zapisania przyczyny ESP32 despertarvoid print_wakeup_reason(){ esp_sleep_wakeup_cause_t wakeup_reason; Powód ciągu = ""; wakeup_reason = esp_sleep_get_wakeup_cause(); //recupera a causa do despertar switch(wakeup_reason) { case 1:reason = "EXT0 RTC_IO BTN"; przerwa; przypadek 2: powód = "EXT1 RTC_CNTL"; przerwa; przypadek 3: powód = "TIMER"; przerwa; przypadek 4:przyczyna = "PADEK DOTYKOWY"; przerwa; przypadek 5:przyczyna = "PROGRAM ULP"; przerwa; default:reason = "BRAK PRZYCZYNY DS"; przerwa; } Serial.println(powód); display.clearLine(6); //apaga a linha 6 wyświetla display.drawString(0, 6, Reason.c_str()); //włącz przyczynę do despertar no display //se despertou by TOUCHPAD, então vamos verificar em qual dos pinos ocorreu if(wakeup_reason == 4) { print_wakeup_touchpad(); //weryfikacja o pino i imprime bez wyświetlania } }
Krok 19: Print_wakeup_touchpad (znaj GPIO Touch)
Teraz w tym kroku mamy funkcję drukowania pinu, który został dotknięty. Odzyskaliśmy GPIO, które obudziło ESP32 i wydrukowaliśmy je na wyświetlaczu.
//função do zapisania lub pino que tocadovoid print_wakeup_touchpad() { touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status(); //odzyskiwanie GPIO que despertou o ESP32 String GPIO = ""; switch(touchPin) { przypadek 0: GPIO = "4"; przerwa; przypadek 1: GPIO = "0"; przerwa; przypadek 2: GPIO = "2"; przerwa; przypadek 3: GPIO = "15"; przerwa; przypadek 4: GPIO = "13"; przerwa; przypadek 5: GPIO = "12"; przerwa; przypadek 6: GPIO = "14"; przerwa; przypadek 7: GPIO = "27"; przerwa; przypadek 8: GPIO = "33"; przerwa; przypadek 9: GPIO = "32"; przerwa; default: Serial.println("Wybudzanie nie przez touchpad"); przerwa; } Serial.println("GPIO: "+GPIO); display.clearLine(7);//apaga a linha 7 do wyświetlania display.drawString(0, 7, "GPIO: "); display.drawString(6, 7, GPIO.c_str()); //imprime o GPIO }
Krok 20: Pobierz pliki
JA NIE
Zalecana:
Oszczędzanie baterii Fairy Light: 8 kroków (ze zdjęciami)
Oszczędzanie baterii Fairy Light: Baterie CR2032 są świetne, ale nie wytrzymują tak długo, jak byśmy chcieli, podczas jazdy LED „Fairy Light” strings.W okresie świątecznym postanowiłem zmodyfikować kilka 20 lekkich ciągów, aby uruchomić bank zasilania USB.Przeszukałem online i f
Oszczędzanie baterii, wyłącznik zabezpieczający przed rozładowaniem z ATtiny85 do samochodu kwasowo-ołowiowego lub akumulatora Lipo: 6 kroków
Oszczędzanie baterii, wyłącznik zabezpieczający przed rozładowaniem Z ATtiny85 do akumulatorów kwasowo-ołowiowych lub Lipo: Ponieważ potrzebuję kilku ochraniaczy baterii do moich samochodów i systemów słonecznych, znalazłem te komercyjne za 49 dolarów za drogie. Zużywają też zbyt dużo prądu przy 6 mA. Nie mogłem znaleźć żadnych instrukcji na ten temat. Więc zrobiłem własny, który rysuje 2 mA. Jak to
Czujnik ruchu ESP-01 z głębokim snem: 5 kroków
Czujnik ruchu ESP-01 z funkcją głębokiego snu: Pracowałem nad stworzeniem domowych czujników ruchu, które po uruchomieniu wysyłają wiadomość e-mail. Istnieje wiele przykładowych instrukcji i innych przykładów robienia tego. Niedawno musiałem to zrobić za pomocą zasilanego bateryjnie czujnika ruchu PIR i ESP
Zrób sam rozmiar i zbuduj generator zapasowy zasilania z bateriami 12 V z głębokim cyklem: 5 kroków (ze zdjęciami)
Zrób sam rozmiar i zbuduj generator zapasowy zasilania z bateriami 12 V z głębokim cyklem: ***UWAGA: Zachowaj ostrożność podczas pracy z bateriami i energią elektryczną. Nie zwieraj baterii. Używaj izolowanych narzędzi. Przestrzegaj wszystkich zasad bezpieczeństwa podczas pracy z energią elektryczną.*** Bądź przygotowany przed następnym wyłączeniem zasilania z zasilaniem bateryjnym w trybie czuwania
Oszczędzanie „na wpół rozładowanych” baterii: 4 kroki
Oszczędzanie „na wpół rozładowanych” baterii: Nie wyrzucaj jeszcze „na wpół rozładowanych” baterii! Czy wiesz, że możesz połączyć „na wpół wyczerpane” akumulatory szeregowo, aby zapewnić większe napięcie? Byłoby to tak proste, jak zaoszczędzenie wszystkich groszy razem, aby zdobyć większą sumę. Ten instruktażowy w