ESP32 深度睡眠完全指南 · 唤醒源、功耗与 RTC 内存
深度睡眠能到多少 µA、哪些脚能唤醒、醒来后数据还在吗——配合续航计算器一起用,把电池项目的账算清楚。
深度睡眠时芯片处于什么状态
进入深度睡眠后,CPU、绝大部分 RAM 和外设全部断电,只有 RTC 域还活着(RTC 内存、RTC 外设、ULP 协处理器)。唤醒相当于一次完整重启——setup() 会从头再跑一遍,普通全局变量全部丢失。
功耗到底多少
| 状态 | 典型电流 | 说明 |
|---|---|---|
| 裸模组深度睡眠 | 约 10 µA | 官方量级的参考值 |
| 带 USB-UART 桥 + LDO 的开发板 | 100 µA – 数 mA | 外设漏电远大于芯片本身 |
| Wi-Fi 发射瞬间 | 80 – 150 mA | 真正的耗电大头 |
先把参数填进 电池续航计算器,看清「唤醒时耗电」和「睡眠耗电」各自占多少,再决定优化哪一头。大多数项目根本不该去优化那 10 µA。
唤醒源
| 唤醒源 | 说明 |
|---|---|
| 定时器 | esp_sleep_enable_timer_wakeup(us),最常用 |
| ext0 | 单个 RTC GPIO 达到指定电平 |
| ext1 | 多个 RTC GPIO 的组合(任一 / 全部) |
| 触摸 | ESP32 经典款支持触摸唤醒 |
| ULP 协处理器 | 睡眠中继续采样,超阈值再唤醒主核 |
只有 RTC GPIO 能把芯片从深度睡眠唤醒。ESP32 经典款的 RTC GPIO 是:
0, 2, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 37, 38, 39。把唤醒按键接到别的脚上,你会得到一块「怎么按都不醒」的板子。怎么保存数据
把需要在睡眠间保留的变量用 RTC_DATA_ATTR 声明(ESP-IDF),例如 RTC_DATA_ATTR int bootCount = 0;,它们会被放进 RTC 慢速内存,睡眠期间不掉电。容量有限,只放计数器、状态位之类的小数据。
唤醒后想知道是被什么唤醒的,用 esp_sleep_get_wakeup_cause()。
降低漏电的几个实招
- 用
rtc_gpio_isolate()把没用到的 RTC 引脚断开,能省下不少漏电。 - 拆掉或旁路开发板上的电源 LED 和 LDO——这才通常是漏电大户。
- 传感器用 MOSFET 做电源开关,睡眠时整个断掉,而不是让它进入「待机」。
- 上拉电阻取值尽量大(100 kΩ 量级),或者只在需要时由 GPIO 供电。
本文以 ESP32 经典款为准。各型号的 RTC GPIO 列表、可用唤醒源和睡眠电流差异较大,请以对应型号的官方文档为准。
数据核验:2026-10-20 · 以 Espressif 官方文档交叉核对。随型号或 ESP-IDF 版本变化的字段一律标注「以官方文档为准」,不编造具体数值。
官方外设文档 →
相关页面
I²CESP32 上 I²C 该接哪两个脚、上拉电阻用多大、为什么设备扫描不到——把踩过的坑一次讲清楚,附各型号默认脚位参考。SPIESP32 的 HSPI 与 VSPI 默认接哪几个脚、能跑多快、为什么屏幕就是点不亮——含可直接抄的引脚对照。UARTESP32 三个串口各自默认接哪两个脚、为什么 UART1 用不了、下载失败时该检查什么。RMT 红外与 WS2812RMT 是 ESP32 上最被低估的外设:红外遥控、WS2812 灯带、单总线传感器都靠它。这里讲清通道数、分辨率和 Wi-Fi 干扰问题。LEDC PWMESP32 的 LEDC 有 16 路 PWM。频率和分辨率是此消彼长的关系,这里给出换算表和常用场景的推荐值。