Esptop 10 Timer Obudź się z głębokiego snu za pomocą Arduino IDE

Esptop 10 Timer Obudź się z głębokiego snu za pomocą Arduino IDE
VESP32 to platforma IoT oparta na mikrokontrolerze. Zużycie energii jest jednym z głównych problemów podczas pracy z płytą mikrokontrolera. Jeśli zasilamy ESP32 zaopatrzeniem prądem stałym.

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:

  • Kontroler RTC
  • Koprocesor ULP
  • RTC Szybka i powolna pamięć
  • Peryferyjne RTC

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:

  • Regulator czasowy
  • Dotknij szpilki
  • Zewnętrzne budzenie ext0
  • Zewnętrzne budzenie Ext1

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.