一般先从这几处查,软件侧最常见:
-
先确认真的进了 Deep Sleep
-
看日志是不是已经执行到
esp_deep_sleep_start() -
上电后打印
esp_sleep_get_wakeup_cause(),确认不是刚睡下又被立刻唤醒 -
如果功耗是 mA 级,很多时候不是深睡眠没进去,就是反复唤醒了
-
-
查唤醒源是不是配错
-
定时器、GPIO、触摸、UART、ULP 有没有误开
-
GPIO 唤醒脚是否悬空、极性是否配反,导致一进睡眠就醒
-
先只保留一个最简单的唤醒源测试,比如只开 timer
-
-
睡前有没有把外设都关干净
-
Wi-Fi / BT:
esp_wifi_stop()、esp_bt_controller_disable()、esp_bluedroid_disable()等 -
UART、ADC、I2C、SPI、LED、传感器电源控制脚是否还在工作
-
某些任务/定时器/中断如果还在跑,说明根本没真正进入深睡
-
-
查 RTC 电源域有没有被保留
-
重点看有没有显式保留:
-
ESP_PD_DOMAIN_RTC_PERIPH -
ESP_PD_DOMAIN_RTC_SLOW_MEM -
ESP_PD_DOMAIN_RTC_FAST_MEM -
ESP_PD_DOMAIN_XTAL
-
-
如果不需要,尽量关掉,例如:
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF);
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_OFF);
-
-
查 GPIO 状态
-
睡前 GPIO 电平是否导致外部电路漏电
-
某些 IO 内部上下拉没关,或者外部上下拉打架,会明显增大功耗
-
特别查:
-
接 MOS 管使能脚
-
传感器 EN 脚
-
电平转换芯片 OE 脚
-
外挂 Flash / PSRAM / 屏幕背光 / LDO EN
-
-
-
查是否用了 GPIO hold / RTC IO 配置不当
-
gpio_hold_en()/gpio_deep_sleep_hold_en()有时能稳住电平省电 -
但配错也可能让外围一直处于耗电状态
-
RTC IO 如果作为唤醒脚,注意其上下拉和方向配置
-
-
查日志和调试配置
-
串口日志本身不会让 deep sleep 一直高很多,但如果程序在睡前还卡在打印、flush、等待事件,就会误以为"睡了"
-
先用最小代码验证:
void app_main(void)
{
esp_sleep_enable_timer_wakeup(10 * 1000000ULL);
esp_deep_sleep_start();
}
-
如果这个版本功耗正常,说明问题就在你业务初始化/外设/唤醒配置里
-
-
查有没有"反复重启"而不是"持续休眠"
-
很多板子看起来是深睡高功耗,实际上是:
-
睡下去
-
被错误唤醒
-
又启动一遍
-
再睡
-
-
这样平均电流就很高
-
先做一个最小 deep sleep 示例 测功耗
再一项项加回:
-
先加唤醒源
-
再加 GPIO 配置
-
这样最快定位。
-
再加外设初始化
-
最后加 Wi-Fi / BLE
-