← all lessons
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:

Wake Sources

ESP32 can wake from:

RTC Memory

RTC memory persists through deep sleep:

Typical Workflow

  1. Save state to RTC memory
  2. Configure wake source (timer, GPIO)
  3. Enter deep sleep
  4. Wake up → restore state from RTC memory
  5. Do work → repeat

Demo

Deep sleep is a power mode, not a visual demo. Review this before implementing power optimization.

Key takeaways

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

  1. Implement deep sleep with 5-minute timer wake
  2. Save sensor reading to RTC memory before sleep
  3. Measure current consumption: active vs deep sleep
  4. Verify state persists through sleep (read RTC memory on wake)
  5. Calculate battery lifetime based on power budget

full glossary →