ESP32 Deep Dive · #15 of 48
Deep Sleep: Wake Sources, State, RTC Memory
Power Optimization
Why it matters
Deep sleep reduces power consumption to microamps. This is essential for battery-powered devices that need to run for months.
The idea
What Is Deep Sleep?
In deep sleep:
- CPU stops — no code execution
- RAM is lost — unless using RTC memory
- Only RTC peripherals run — RTC timer, RTC GPIO
- Power consumption: ~10µA (vs ~80mA active)
Wake Sources
ESP32 can wake from:
- Timer — RTC timer (most common)
- GPIO — External interrupt (button, sensor)
- Touch — Touch pad interrupt
- ULP — Ultra Low Power coprocessor
RTC Memory
RTC memory persists through deep sleep:
- RTC_SLOW_MEM — ~8KB, slow access
- RTC_FAST_MEM — ~8KB, fast access
- Use for: state, sensor data, configuration
- Regular RAM is lost on wake
Typical Workflow
- Save state to RTC memory
- Configure wake source (timer, GPIO)
- Enter deep sleep
- Wake up → restore state from RTC memory
- Do work → repeat
Demo
Deep sleep is a power mode, not a visual demo. Review this before implementing power optimization.
Key takeaways
- Deep sleep reduces power to ~10µA (vs ~80mA active)
- CPU stops, RAM is lost (unless using RTC memory)
- Wake sources: timer, GPIO, touch, ULP
- Use RTC memory to persist state through deep sleep
Going deeper
ESP32 has multiple sleep modes: light sleep (keeps RAM, faster wake), deep sleep (loses RAM, slowest wake), hibernation (lowest power, slowest wake). For periodic sensor readings, deep sleep with timer wake is ideal. For event-driven applications, GPIO wake is better.
Math details
Power budget example:
Active mode: 80mA × 2s = 160mAs per reading
Deep sleep: 10µA × 298s = 2.98mAs per cycle
Total per 5min cycle: ~163mAs
For 2000mAh battery:
Cycles = (2000mAh × 3600s/h) / 163mAs ≈ 44,000 cycles
Lifetime ≈ 44,000 × 5min ≈ 153 days
Wake time:
Deep sleep → active: ~200ms (RTC timer wake)
Light sleep → active: ~5ms (faster but uses more power)
Implementation
LLM Prompt: Deep Sleep Implementation
Write Rust code for ESP32 deep sleep with timer wake using esp-hal.
Include: save state to RTC memory, configure wake timer (5 minutes),
enter deep sleep, restore state on wake. Handle RTC memory allocation
and error cases.
Lab Exercise
- Implement deep sleep with 5-minute timer wake
- Save sensor reading to RTC memory before sleep
- Measure current consumption: active vs deep sleep
- Verify state persists through sleep (read RTC memory on wake)
- Calculate battery lifetime based on power budget
Mastery