本帖最后由 true 于 2017-4-26 12:34 编辑
1 概述esp8266 系列芯片提供以下三种可配置的睡眠模式,您可以根据应用按需选用: - Modem-sleep
- Light-sleep
- Deep-sleep
三种模式的区别如下:
2 Modem Sleep2.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 Sleep3.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 Sleep4.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 一样,电流最小
复制代码
说明:
4.3 唤醒在 Deep-sleep 状态下,可以通过外部 IO 在芯片 EXT_RSTB 管脚上产生一个低电平脉冲,芯片即可被唤醒并启动
注意:如果自动唤醒与外部唤醒须要同时作用,须要在外部电路设计时,使用合适的线逻辑操作电路
4.4 应用Deep-sleep 可以用于低功耗的传感器应用,或者大部分时间都不需要进行数据传输的情况 设备可以每隔一段时间从 Deep-sleep 状态醒来测量数据并上传,之后继续进入 Deep-sleep 也可以将多个数据存储于RTC memory(RTC memory 在 Deep-sleep 模式下仍然可以保存数据),然后一次发送出去 |