ESP低功耗入门
此篇博客以 ESP32 为例来说明 ESP 的睡眠模式。
ESP32 芯片可以大致分成以为五个模块:
处于工作状态的模块越多,芯片功耗越大,ESP32 一共有四种工作模式,按照运行时的平均功耗由高到底排序,依次为 active, modem sleep, light sleep 和 deep sleep。不同的工作模式下的各模块状态如图 1-1 所示:
图 1-1 不同工作模式下的模块运行状态
1.1. active 模式
该模式下所有的模块都可以正常使用,此时芯片的底电流大约为 20 ~40 mA。
1.2. modem sleep 模式
该模式也就是通常的 Wi-Fi 保活模式。在该模式下 RF 射频模块将被关闭,芯片的底电流会在 20 mA 左右。该模式只能应用于 STA 模式,是否开启由 esp_err_t esp_wifi_set_ps(wifi_ps_type_t type)
这一个 API 决定。
type= WIFI_PS_NONE
, 关闭 modem sleep,此时 RF 会一直处于打开状态。
type= WIFI_PS_MIN_MODEM
,芯片每隔一个 DTIM 会和路由器进行一次交互,交互结束就暂时关闭 RF,然后在下一个 DTIM 再醒来。(补充内容:DTIM 和 listen interval 的区别)
type= WIFI_PS_MAX_MODEM
,每隔一个 listen interval 会和路由器进行一次交互,交互结束就暂时关闭 RF,然后在下一个 listen interval 醒来。
ESP32 的 STA 默认是 WIFI_PS_MIN_MODEM
,因此 modem sleep 模式是默认打开的。
1.3. light sleep 模式
该模式下 RF 模块会被关闭,除 RTC 相关模块外大多数模块都会被下电或者进行动态频率调节,以此来达到功耗降低的结果。此时的芯片底电流可以参考 datasheet 上的功耗,如 ESP32-C3 为 130 μA,ESP32-S3 为 240 μA。
1.4. deep sleep 模式
Deep sleep 模式下除 RTC 模块外全部被下电,底电流可以参考 datasheet,ESP32-C3 为 5 μA,ESP32-S3 为7 μA。
1.5. 唤醒源
处于 light sleep 和 deep sleep状态的芯片可以被唤醒,light sleep 和 deep sleep 唤醒源分别如表 1-1 和表 1-2 所示。各唤醒源的具体使用可以查看我们的light sleep例程以及 IDF 编程指南。
表 1-1 light sleep 唤醒源
ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | |
---|---|---|---|---|
Timer | √ | √ | √ | √ |
GPIO | √ | √ | √ | √ |
EXT0 | √ | √ | √ | |
EXT1 | √ | √ | √ | |
UART | √ | √ | √ | |
Touch | √ | √ | √ |
表 1-2 deep sleep 唤醒源
ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | |
---|---|---|---|---|
Timer | √ | √ | √ | √ |
GPIO | √ | √ | √ | √ |
EXT0 | √ | √ | √ | |
EXT1 | √ | √ | √ | |
UART | ||||
Touch | √ | √ | √ | |
ULP-FSM | √ | √ | √ | |
ULP-RISCV | √ | √ |