Tutaj będziemy omawiać, w jaki sposób możemy ustawić ESP32 w trybie głębokiego uśpienia w ustalonym czasie, aby zaoszczędzić energię. Zanim dowiemy się, jak obudzić się ESP32 z głębokiego snu za pomocą timera, zrozummy koncepcję głębokiego snu:
Co to jest głęboki sen w ESP32
ESP32 może być urządzeniem głodnym energii ze względu na zintegrowany moduł Wi-Fi i Bluetooth. ESP32 zazwyczaj rysuje 75MA w przypadku operacji nominalnych, podczas gdy może się przejść 240MA Podczas przesyłania danych przez Wi -Fi. Możemy jednak to zoptymalizować, włączając tryb głębokiego uśpienia.
W trybie głębokiego uśpienia cyfrowe urządzenia peryferyjne ESP32, niewykorzystane pamięci RAM i procesory są wyłączone. Tylko następująca lista części pozostaje działająca:
Po włączeniu trybu głębokiego uśpienia główny procesor jest wyłączony; Jednak Koprocesor ULP (ultralowpower) może nadal odczytać dane z czujników i budzić procesor, gdy jest to potrzebne.
To zastosowanie ESP32 jest przydatne, gdy chcemy wygenerować wyjście w określonym czasie lub gdy nastąpi zewnętrzne przerwanie lub zdarzenie. To oszczędza moc ESP32, ponieważ jego procesor pozostaje wyłączony przez resztę czasu i włącza się tylko wtedy, gdy jest nazywany.
Wraz z pamięcią główną CPU ESP32 jest również błyska lub wymazana, więc wszystko przechowywane w tej pamięci nie będzie już dostępne. Trzymana jest tylko pamięć RTC. Dlatego ESP32 zapisuje dane Wi -Fi i Bluetooth w pamięci RTC przed przejściem do trybu głębokiego uśpienia.
Po zresetowaniu lub usunięciu trybu głębokiego uśpienia układ ESP32 rozpoczyna wykonywanie programu od samego początku.
ESP32 można obudzić z głębokiego snu przy użyciu różnych źródeł.
Obudź źródła w ESP32
Dostępnych jest wiele źródeł, aby obudzić ESP32 z głębokiego snu:
W tym przewodniku obejmiemy Obudź się zegar Źródło ESP32.
Jak używać timera, aby obudzić ESP32 z głębokiego snu
Kontroler RTC, który jest wyposażony w ESP32, zawiera moduł licznika czasu, który może obudzić urządzenie po określonym okresie bezczynności. Ta funkcja ma ogromne aplikacje, w których potrzebujemy stemplowania czasu lub potrzebujemy wykonywania instrukcji w określonym czasie, jednocześnie utrzymując optymalne zużycie energii.
Poniższe polecenie może skonfigurować licznik czasu ESP32 jako źródło przebudzenia. Akceptuje czas w mikrosekundach jako argument.
esp_sleep_enable_timer_wakeup (time_in_micro-s)
Przykładowy kod
Jeśli masz zainstalowaną płytę ESP32 w Arduino IDE, wówczas ESP32 ma przykład głębokiego snu, którego będziemy używać w tym samouczku. W Arduino Ide Deep Sleep Timer WakeUp Przykład można otworzyć, idąc do: Plik> Przykłady> ESP32> Deep Sleep> TimerWakeUp
Nowe okno zostanie otwarte z poniżej szkicu:
#definicja US_TO_S_Factor 1000000ull
#definicja TIME_TO_SLEEP 5
Rtc_data_attr int bootCount = 0;
void print_wakeup_reason ()
esp_sleep_wakeup_cause_t wakeup_reason;
WakeUp_reason = esp_sleep_get_wakeup_cause ();
przełącznik (Wakeup_Reason)
case esp_sleep_wakeup_ext0: szeregowy.println („Sygnał zewnętrzny przyczyny budzenia za pomocą rtc_io”); przerwa;
case esp_sleep_wakeup_ext1: szeregowy.println („Sygnał zewnętrzny przyczyny budzenia za pomocą rtc_cntl”); przerwa;
case esp_sleep_wakeup_timer: serial.println („budzenie spowodowane przez licznik”); przerwa;
case esp_sleep_wakeup_touchpad: szeregowy.println („budzenie spowodowane przez touchpad”); przerwa;
case esp_sleep_wakeup_ulp: serial.println („budzenie spowodowane programem ULP”); przerwa;
Domyślnie: serial.printf („Głęboki sen nie spowodował budzenia: %d \ n”, wakeup_reason); przerwa;
void setup ()
Seryjny.rozpocząć (115200);
opóźnienie (1000);
++BootCount;
Seryjny.println („Numer rozruchu:” + string (bootCount));
print_wakeup_reason ();
esp_sleep_enable_timer_wakeup (time_to_sleep * us_to_s_factor);
Seryjny.println („konfiguracja esp32 do spania dla każdego” + ciąg (time_to_sleep) +
" Sekundy");
Seryjny.println („Idę teraz spać”);
Seryjny.spłukać();
esp_deep_sleep_start ();
Seryjny.println („To nigdy nie zostanie wydrukowane”);
void Loop ()
Zdefiniuj głęboki sen: Kod zaczyna się od opisu czasu, dla którego ESP32 pójdzie w trybie uśpienia. Można to modyfikować w zależności od wymaganego czasu. Tutaj czas jest konwertowany z mikrosekund na sekundy, więc ustawiliśmy 5 sekund dla trybu głębokiego uśpienia ESP32. Obudzi się co 5 sekund.
RTC Wspomnienia z danych: Następne użycie Rtc_data_attr Zapisamy dane na pamięci RTC. Ten przykład obejmuje BootCount Zmienna, która jest przechowywana w pamięci RTC i liczy liczbę czasów ESP32 budzi się po każdym głębokim snu.
Pamięć RTC nie jest błyskawiczna, gdy ESP32 jest w trybie głębokiego uśpienia. 8KB SRAM jest zawarty w części ESP32 RTC, znanej również jako szybka pamięć RTC.
Esp32 budzenie powodu: Następnie za pomocą print_wakeup_reason () Funkcja Wydrukowaliśmy przyczynę budzenia z głębokiego snu.
W organizować coś() Część wskaźnik transmisji jest zdefiniowany dla komunikacji szeregowej i ++BootCount Zmienna jest zwiększana o 1 za każdym razem, gdy ESP32 budzi się z głębokiego snu. Całkowita liczba jest drukowana na monitor szeregowych.
Wreszcie za pomocą funkcji esp_deep_sleep_start (), ESP32 jest umieszczony w trybie uśpienia.
Prześlij kod do ESP32 za pomocą Arduino IDE.
Wyjście
Następujące wyjście można zaobserwować na monitorze szeregowym Arduino IDE. Tutaj widzimy, że po 5 sekundach ESP32 budzi się z głębokiego snu, a numer rozruchu jest zwiększany za każdym razem, gdy się budzi.
Notatka: Jeśli naciśniemy przycisk EN ESP32 zresetuje liczbę rozruchu do 0.
Wniosek
Tutaj w tym samouczku skonfigurowaliśmy ESP32, aby obudzić się z głębokiego snu za pomocą programu timera. Po prostu wydrukowaliśmy wiadomość, gdy ESP32 się obudzi; Jednak za pomocą tego artykułu można wykonać dowolne zadanie, gdy ESP32 obudzi się z głębokiego snu.