ESP32 Deep Dive · #15 of 20
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)
<h3>Wake Sources</h3>
ESP32 can wake from:
<ul>
<li><strong>Timer</strong> — RTC timer (most common)</li>
<li><strong>GPIO</strong> — External interrupt (button, sensor)</li>
<li><strong>Touch</strong> — Touch pad interrupt</li>
<li><strong>ULP</strong> — Ultra Low Power coprocessor</li>
</ul>
<h3>RTC Memory</h3>
RTC memory persists through deep sleep:
<ul>
<li><strong>RTC_SLOW_MEM</strong> — ~8KB, slow access</li>
<li><strong>RTC_FAST_MEM</strong> — ~8KB, fast access</li>
<li>Use for: state, sensor data, configuration</li>
<li>Regular RAM is <strong>lost</strong> on wake</li>
</ul>
<h3>Typical Workflow</h3>
<ol>
<li>Save state to RTC memory</li>
<li>Configure wake source (timer, GPIO)</li>
<li>Enter deep sleep</li>
<li>Wake up → restore state from RTC memory</li>
<li>Do work → repeat</li>
</ol>
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)