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:
- Timer wake-up – probuzení po určitém čase
- Touch wake-up – dotykové senzory
- External wake-up – změna signálu na GPIO pinu
- 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
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:
- inicializuje sériovou komunikaci
- zvýší proměnnou
bootCountuloženou v RTC paměti - nastaví časovač pro probuzení
- 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í).
1esp_sleep_enable_ext0_wakeup(GPIO_NUM_X, level);GPIO_NUM_X– číslo pinulevel– 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í:
1esp_sleep_enable_ext1_wakeup_io(bitmask, mode);Možné režimy jsou například:
ESP_EXT1_WAKEUP_ANY_HIGHESP_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:
1RTC_DATA_ATTR int bootCount = 0;Jak zjistit důvod probuzení
ESP32 dokáže zjistit, proč byl probuzen.
Používá se funkce:
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:
- probudit se
- přečíst hodnotu senzoru
- odeslat data přes Wi-Fi
- znovu usnout.

