Zpět na články

ESP32 Deep Sleep – úsporný režim a probuzení mikrokontroleru

ESP32 Deep Sleep šetří energii vypnutím většiny systému a umožňuje probuzení časovačem nebo GPIO.

ESP32 Deep Sleep – úsporný režim a probuzení mikrokontroleru

ESP32 nabízí několik režimů úspory energie. Jedním z nejdůležitějších je Deep Sleep, který výrazně snižuje spotřebu energie. Tento režim je ideální pro projekty napájené z baterie, protože prodlužuje jejich výdrž.

V deep sleep režimu se vypne většina částí mikrokontroleru, například CPU, Wi-Fi a většina paměti. Aktivní zůstávají pouze některé části systému, které umožňují zařízení znovu probudit.

Díky tomu může ESP32 většinu času spát a probudit se pouze tehdy, když je potřeba vykonat určitou úlohu.

Co zůstává aktivní během Deep Sleep

I když je většina systému vypnutá, některé části ESP32 zůstávají aktivní:

  • RTC (Real Time Clock) controller
  • RTC paměť
  • některé RTC GPIO piny
  • ULP koprocesor

Tyto komponenty umožňují sledovat čas nebo reagovat na externí události, které mohou ESP32 probudit.

Zdroje probuzení (Wake-Up Sources)

ESP32 lze z deep sleep režimu probudit několika způsoby:

  1. Timer wake-up – probuzení po určitém čase
  2. Touch wake-up – dotykové senzory
  3. External wake-up – změna signálu na GPIO pinu
  4. ULP koprocesor – probuzení pomocí ultra-low-power procesoru

V tomto článku si ukážeme ty nejčastější způsoby.

Timer Wake-Up (probuzení časovačem)

Jedním z nejjednodušších způsobů je probuzení po určité době.

ESP32 má interní RTC časovač, který může zařízení probudit například každých několik sekund nebo minut.

To je velmi užitečné například pro:

  • pravidelné měření senzorů
  • odesílání dat do internetu
  • časově plánované úlohy

Kód: Deep Sleep s časovačem

sleep.cpp
1#define uS_TO_S_FACTOR 1000000 2#define TIME_TO_SLEEP 5 3 4RTC_DATA_ATTR int bootCount = 0; 5 6void setup() { 7 Serial.begin(115200); 8 9 ++bootCount; 10 Serial.println("Boot number: " + String(bootCount)); 11 12 Serial.println("Going to sleep now"); 13 14 esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); 15 16 delay(1000); 17 esp_deep_sleep_start(); 18} 19 20void loop() { 21 22}

Jak kód funguje

Program postupuje v několika krocích:

  1. inicializuje sériovou komunikaci
  2. zvýší proměnnou bootCount uloženou v RTC paměti
  3. nastaví časovač pro probuzení
  4. přepne ESP32 do deep sleep režimu

Jakmile vyprší nastavený čas, mikrokontroler se restartuje a program začne znovu od začátku.

Touch Wake-Up (dotykový senzor)

ESP32 má také kapacitní dotykové piny. Ty lze použít jako zdroj probuzení.

Pokud se někdo dotkne senzoru, ESP32 se probudí z deep sleep režimu.

To lze využít například pro:

  • dotykové tlačítko
  • chytré ovládání zařízení
  • interaktivní projekty

External Wake-Up (probuzení pomocí GPIO)

ESP32 lze probudit také změnou signálu na určitém GPIO pinu, například stiskem tlačítka.

Existují dvě metody:

EXT0

Používá jeden RTC GPIO pin.

ESP32 se probudí, pokud se pin změní na logickou hodnotu HIGH nebo LOW (podle nastavení).

sleep.cpp
1esp_sleep_enable_ext0_wakeup(GPIO_NUM_X, level);
  • GPIO_NUM_X – číslo pinu
  • level – logická úroveň, která probudí zařízení

EXT1

Tato metoda umožňuje použít více GPIO pinů současně.

ESP32 se může probudit například pokud:

  • jeden z pinů je HIGH
  • všechny piny jsou LOW

Aktivace se provádí funkcí:

sleep.cpp
1esp_sleep_enable_ext1_wakeup_io(bitmask, mode);

Možné režimy jsou například:

  • ESP_EXT1_WAKEUP_ANY_HIGH
  • ESP_EXT1_WAKEUP_ALL_LOW

Ukládání dat do RTC paměti

ESP32 umožňuje uložit data do RTC paměti, která zůstává zachována během deep sleep režimu.

To je užitečné například pro:

  • počítání probuzení zařízení
  • ukládání hodnot senzorů
  • sledování stavu systému

Proměnná uložená v RTC paměti se deklaruje takto:

sleep.cpp
1RTC_DATA_ATTR int bootCount = 0;

Jak zjistit důvod probuzení

ESP32 dokáže zjistit, proč byl probuzen.

Používá se funkce:

sleep.cpp
1esp_sleep_get_wakeup_cause();

Ta vrací hodnotu, která určuje zdroj probuzení, například:

  • časovač
  • externí GPIO
  • dotykový senzor.

Možná využití Deep Sleep

Deep sleep režim je velmi užitečný v projektech napájených z baterie:

  • IoT senzory
  • meteorologické stanice
  • chytré zahradní systémy
  • bezpečnostní senzory
  • zařízení pro sběr dat

ESP32 může například každých 10 minut:

  1. probudit se
  2. přečíst hodnotu senzoru
  3. odeslat data přes Wi-Fi
  4. znovu usnout.
ESP32 Blog image

Nakupte svoje ESP32 ještě dnes!

Doprava Zásilkovnou za 89 Kč
Platba dobírkou
Vrácení do 30 dnů
Omezené zásoby - skladem

ESP32-S3 DevKit USB-C

Kompletní vývojová deska s USB-C

240MHz dvoujádrový
WiFi 802.11 b/g/n
Bluetooth 4.2 + BLE
4MB Flash paměť
520KB SRAM
38 GPIO pinů
209za kus

Množstevní slevy:

1
Celkem
209
Objednat

Bezpečná platba při převzetí zásilky nebo online platba přes Comgate, a.s.