ESP8266 Sleep

来自Jack's Lab
跳转到: 导航, 搜索

目录

1 概述

ESP8266 系列芯片提供以下三种可配置的睡眠模式,您可以根据应用按需选用:

  • Modem-sleep
  • Light-sleep
  • Deep-sleep


三种模式的区别如下:

Esp8266-sleep.jpg



2 Modem Sleep

2.1 特性

目前 ESP8266 的 Modem-sleep 仅工作在 Station 模式下,连接路由器后生效。ESP8266 通过 Wi-Fi 的 DTIM Beacon 机制与路由器保持连接 (一般路由器的 DTIM Beacon 间隔为 100 ms ~ 1000 ms)


在 Modem-sleep 模式下,ESP8266 会在两次 DTIM Beacon 间隔时间内,关闭 Wi-Fi 模块电路,达到省电效果,在下次 Beacon 到来前自动唤醒。睡眠时间由路由器的 DTIM Beacon 时间决定。睡眠同时可以保持与路由器的 Wi-Fi 连接,并通过路由器接受来自手机或者服务器的交互信息。



2.2 接口

SDK API,通过以下接口进入 Modem-sleep 模式:

wifi_set_sleep_type(MODEM_SLEEP_T)

注意:在 Modem-sleep 模式下,系统可以自动被唤醒,无需配置接口



2.3 应用

Modem-sleep 一般用于必须打开芯片 CPU 的应用场景,例如 PWM 彩灯,需要 CPU 实时控制



3 Light Sleep

3.1 特性

Light-sleep 的工作模式与 Modem-sleep 相似,不同的是,除了关闭 Wi-Fi 模块电路以外,在 Light-sleep 模式下,还会关闭时钟并暂停内部 CPU,比 Modem-sleep 功耗更低



3.2 接口

SDK API,通过以下接口进入 Light-sleep 模式:

wifi_set_sleep_type(LIGHT_SLEEP_T)

在 Wi-Fi 连接后,并且 CPU 处于空闲状态时,会自动进入 Light-sleep 状态



3.3 唤醒

在 Light-sleep 模式下,CPU 在暂停状态下不会响应来自外围硬件接口的信号与中断,因此需要配置通过外部 GPIO 信号将 ESP8266 唤醒,唤醒过程小于 3 ms


通过 GPIO 唤醒只能配置为电平触发模式,接口如下:

void gpio_pin_wakeup_enable(uint32 i, GPIO_INT_TYPE intr_state);

* uint32 i                   唤醒功能的 IO 序号
* GPIO_INT_TYPE intr_state   唤醒的触发模式 GPIO_PIN_INTR_LOLEVEL/GPIO_PIN_INTR_HILEVEL



3.4 应用

Light-sleep 模式可用于需要保持与路由器的连接,可以实时响应路由器发来的数据的场合。并且在未接收到命令时,CPU 可以处于空闲状态。⽐比如 Wi-Fi 开关的应用,大部分时间 CPU 都是空闲的,直到收到控制命令,CPU 才需要进行 GPIO 的操作


注意:若系统应用中有小于 DTIM Beacon 间隔时间的循环定时,系统将不能进入 Light-sleep 模式



4 Deep Sleep

4.1 特性

相对于其他两种模式,Deep-sleep 由用户控制,调用接口函数就可立即进入 Deep-sleep 模式

在该模式下,芯片会断开所有 Wi-Fi 连接与数据连接,进入睡眠模式,只有 RTC 模块仍然工作,负责芯片的定时唤醒

使用 Deep-sleep 必须将 GPIO16 与芯片 EXT_RSTB 管脚连接。



4.2 接口

SDK API, 通过以下接口使能 Deep-sleep:

void system_deep_sleep(uint32 time_in_us)

uint32 time_in_us =0 不会定时唤醒,即不会主动醒来

uint32 time_in_us ≠0 会在设定的时间后,⾃自动唤醒(单位μs)


可以通过以下接口配置 Deep-sleep 唤醒时的软件工作流程,从而影响长期运行的平均功耗:

bool system_deep_sleep_set_option(uint8 option)

deep_sleep_set_option(0) 由 init 参数的第 108 字节控制 Deep-sleep 醒来后的是否作 RF 校准
deep_sleep_set_option(1) 表示下一次 Deep-sleep 醒来后要作 RF 校准,功耗较大
deep_sleep_set_option(2) 表示下一次 Deep-sleep 醒来后不作 RF 校准,功耗较小
deep_sleep_set_option(4) 表示下一次 Deep-sleep 醒来后,不打开 RF,和 Modem-sleep 一样,电流最小


说明:

init 参数即 esp_init_data_default.bin 内的参数值。比如将第108 字节的数据改为 8,并且调用 deep_sleep_set_option(0),则表示芯片每 8 次 Deep-sleep 唤醒才会进行 RF 校准。详情参考:https://github.com/EspressifSystems/low_power_voltage_measurement/wiki


ESP8266 RF INIT



4.3 唤醒

在 Deep-sleep 状态下,可以通过外部 IO 在芯片 EXT_RSTB 管脚上产生一个低电平脉冲,芯片即可被唤醒并启动


注意:如果自动唤醒与外部唤醒须要同时作用,须要在外部电路设计时,使用合适的线逻辑操作电路



4.4 应用

Deep-sleep 可以用于低功耗的传感器应用,或者大部分时间都不需要进行数据传输的情况

设备可以每隔一段时间从 Deep-sleep 状态醒来测量数据并上传,之后继续进入 Deep-sleep

也可以将多个数据存储于RTC memory(RTC memory 在 Deep-sleep 模式下仍然可以保存数据),然后一次发送出去



5 参考



















个人工具
名字空间

变换
操作
导航
工具箱