ESP32 低功耗模式
ESP32 低功耗模式
1 概要
ESP32 系列芯片提供三种可配置的睡眠模式,针对这些睡眠模式,我们提供了了多种低功耗解决方案,用户可以结合具体需求选择睡眠模式并进行配置。三种睡眠模式如下:
- Modem-sleep 模式:CPU 可运行,时钟可被配置。Wi-Fi/蓝牙基带和射频关闭。
- Light-sleep 模式:CPU 暂停运行,Wi-Fi/蓝牙基带和射频关闭。RTC 存储器和外设以及 ULP 协处理器运行。任何唤醒事件(MAC、主机、RTC 定时器或外部中断)都会唤醒芯片。
- Deep-sleep 模式:CPU 和大部分外设都会掉电,Wi-Fi/蓝牙基带和射频关闭,只有 RTC 存储器和 RTC 外设以及 ULP 协处理器可以工作。Wi-Fi 和蓝牙连接数据存储在 RTC 中。
三种模式的区别如下:
2 Modem-sleep 模式
目前 ESP32 的 Modem-sleep 仅工作在 Station 模式下,连接路由器后生效。Station 会周期性在工作状态和睡眠状态两者之间切换。
ESP32 通过 Wi-Fi 的 DTIM Beacon 机制与路由器保持连接。在 Modem-sleep 模式下,系统可以自动被唤醒,无需配置唤醒源。
一般路由器的 DTIM Beacon 间隔为 100 ms ~ 1,000 ms。
DTIM (Delivery Traffic Indication Message): 使用无线路由器时无线发送数据包的频率。
在 Modem-sleep 模式下,ESP32 会在两次 DTIM Beacon 间隔时间内,关闭 Wi-Fi 模块电路,达到省电效果,在下次 Beacon 到来前自动唤醒。睡眠时间由路由器的 DTIM Beacon 时间决定。Modem-sleep 模式可以保持与路由器的 Wi-Fi 连接,并通过路由器接收来自手机或者服务器的交互信息。
2.1 API 说明
通过以下接口配置 Modem-sleep 模式,type
可选参数:
WIFI_PS_NONE
: 不使用 Modem-sleep 模式WIFI_PS_MIN_MODEM
: ESP32 接收 Beacon 的间隔与路由器的 DTIM 间隔相同,即 1 个路由器间隔WIFI_PS_MAX_MODEM
: ESP32 接收 Beacon 的间隔可由程序进行配置,间隔周期wifi_sta_config_t
结构体中listen_interval
值决定,单位为 路由器的 Beacon 间隔,默认值为 3(即 3 个路由器 Beacon 间隔)
typedef enum {
WIFI_PS_NONE, /**< No power save */
WIFI_PS_MIN_MODEM, /**< Minimum modem power saving. In this mode, station wakes up to receive beacon every DTIM period */
WIFI_PS_MAX_MODEM, /**< Maximum modem power saving. In this mode, interval to receive beacons is determined by the listen_interval parameter in wifi_sta_config_t */
} wifi_ps_type_t;
esp_err_t esp_wifi_set_ps(wifi_ps_type_t type);
type
参数为WIFI_PS_MAX_MODEM
,ESP32 接收 Beacon 的间隔listen_interval
配置方法:
#define LISTEN_INTERVAL 3
wifi_config_t wifi_config = {
.sta = {
.ssid = "SSID",
.password = "Password",
.listen_interval = LISTEN_INTERVAL,
},
};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));