ESP8266 Sleep
(→Light Sleep) |
(→参考) |
||
(未显示1个用户的19个中间版本) | |||
第1行: | 第1行: | ||
== 概述 == | == 概述 == | ||
− | ESP8266 | + | ESP8266 系列芯片提供以下三种可配置的睡眠模式,您可以根据应用按需选用: |
* Modem-sleep | * Modem-sleep | ||
第15行: | 第15行: | ||
== Modem Sleep == | == Modem Sleep == | ||
+ | |||
+ | === 特性 === | ||
目前 ESP8266 的 Modem-sleep 仅工作在 Station 模式下,连接路由器后生效。ESP8266 通过 Wi-Fi 的 DTIM Beacon 机制与路由器保持连接 (一般路由器的 DTIM Beacon 间隔为 100 ms ~ 1000 ms) | 目前 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 | + | 在 Modem-sleep 模式下,ESP8266 会在两次 DTIM Beacon 间隔时间内,关闭 Wi-Fi 模块电路,达到省电效果,在下次 Beacon 到来前自动唤醒。睡眠时间由路由器的 DTIM Beacon 时间决定。睡眠同时可以保持与路由器的 Wi-Fi 连接,并通过路由器接受来自手机或者服务器的交互信息。 |
+ | <br><br> | ||
− | SDK | + | === 接口 === |
+ | |||
+ | SDK API,通过以下接口进入 Modem-sleep 模式: | ||
<source lang=cpp> | <source lang=cpp> | ||
第30行: | 第35行: | ||
注意:在 Modem-sleep 模式下,系统可以自动被唤醒,无需配置接口 | 注意:在 Modem-sleep 模式下,系统可以自动被唤醒,无需配置接口 | ||
+ | <br><br> | ||
+ | |||
+ | === 应用 === | ||
Modem-sleep 一般用于必须打开芯片 CPU 的应用场景,例如 PWM 彩灯,需要 CPU 实时控制 | Modem-sleep 一般用于必须打开芯片 CPU 的应用场景,例如 PWM 彩灯,需要 CPU 实时控制 | ||
第36行: | 第44行: | ||
== Light Sleep == | == Light Sleep == | ||
+ | |||
+ | === 特性 === | ||
Light-sleep 的工作模式与 Modem-sleep 相似,不同的是,除了关闭 Wi-Fi 模块电路以外,在 Light-sleep 模式下,还会关闭时钟并暂停内部 CPU,比 Modem-sleep 功耗更低 | Light-sleep 的工作模式与 Modem-sleep 相似,不同的是,除了关闭 Wi-Fi 模块电路以外,在 Light-sleep 模式下,还会关闭时钟并暂停内部 CPU,比 Modem-sleep 功耗更低 | ||
+ | <br><br> | ||
− | SDK | + | === 接口 === |
+ | |||
+ | SDK API,通过以下接口进入 Light-sleep 模式: | ||
<source lang=cpp> | <source lang=cpp> | ||
第46行: | 第59行: | ||
</source> | </source> | ||
− | 在 Wi-Fi 连接后,并且 CPU | + | 在 Wi-Fi 连接后,并且 CPU 处于空闲状态时,会自动进入 Light-sleep 状态 |
− | 在 Light-sleep 模式下,CPU | + | <br><br> |
+ | |||
+ | === 唤醒 === | ||
+ | |||
+ | 在 Light-sleep 模式下,CPU 在暂停状态下不会响应来自外围硬件接口的信号与中断,因此需要配置通过外部 GPIO 信号将 ESP8266 唤醒,唤醒过程小于 3 ms | ||
+ | |||
+ | |||
+ | 通过 GPIO 唤醒只能配置为电平触发模式,接口如下: | ||
+ | |||
+ | <source lang=cpp> | ||
+ | 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 | ||
+ | </source> | ||
+ | |||
+ | <br><br> | ||
+ | |||
+ | === 应用 === | ||
+ | |||
+ | Light-sleep 模式可用于需要保持与路由器的连接,可以实时响应路由器发来的数据的场合。并且在未接收到命令时,CPU 可以处于空闲状态。⽐比如 Wi-Fi 开关的应用,大部分时间 CPU 都是空闲的,直到收到控制命令,CPU 才需要进行 GPIO 的操作 | ||
+ | |||
+ | |||
+ | ;;注意:若系统应用中有小于 DTIM Beacon 间隔时间的循环定时,系统将不能进入 Light-sleep 模式 | ||
<br><br> | <br><br> | ||
== Deep Sleep == | == Deep Sleep == | ||
+ | |||
+ | === 特性 === | ||
+ | |||
+ | 相对于其他两种模式,Deep-sleep 由用户控制,调用接口函数就可立即进入 Deep-sleep 模式 | ||
+ | |||
+ | 在该模式下,芯片会断开所有 Wi-Fi 连接与数据连接,进入睡眠模式,只有 RTC 模块仍然工作,负责芯片的定时唤醒 | ||
<br><br> | <br><br> | ||
− | == | + | === 接口 === |
− | + | SDK API, 通过以下接口使能 Deep-sleep: | |
+ | |||
+ | <source lang=cpp> | ||
+ | void system_deep_sleep(uint32 time_in_us) | ||
+ | </source> | ||
+ | |||
+ | uint32 time_in_us =0 不会定时唤醒,即不会主动醒来 | ||
+ | |||
+ | uint32 time_in_us ≠0 会在设定的时间后,⾃自动唤醒(单位μs) | ||
+ | |||
+ | |||
+ | 可以通过以下接口配置 Deep-sleep 唤醒时的软件工作流程,从而影响长期运行的平均功耗: | ||
+ | |||
+ | <source lang=cpp> | ||
+ | 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 一样,电流最小 | ||
+ | </source> | ||
+ | |||
+ | |||
+ | 说明: | ||
+ | |||
+ | 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]] | ||
<br><br> | <br><br> | ||
+ | |||
+ | === 唤醒 === | ||
+ | |||
+ | '''使用 Deep-sleep 自动唤醒须将 GPIO16 与芯片 EXT_RSTB 管脚连接''' | ||
+ | |||
+ | |||
+ | 在 Deep-sleep 状态下,可以通过外部 IO 在芯片 EXT_RSTB 管脚上产生一个低电平脉冲,芯片即可被唤醒并启动 | ||
+ | |||
+ | |||
+ | ;;注意:如果自动唤醒与外部唤醒须要同时作用,须要在外部电路设计时,使用合适的线逻辑操作电路。 | ||
+ | |||
<br><br> | <br><br> | ||
+ | |||
+ | === 应用 === | ||
+ | |||
+ | Deep-sleep 可以用于低功耗的传感器应用,或者大部分时间都不需要进行数据传输的情况 | ||
+ | |||
+ | 设备可以每隔一段时间从 Deep-sleep 状态醒来测量数据并上传,之后继续进入 Deep-sleep | ||
+ | |||
+ | 也可以将多个数据存储于RTC memory(RTC memory 在 Deep-sleep 模式下仍然可以保存数据),然后一次发送出去 | ||
+ | |||
<br><br> | <br><br> | ||
− | + | ||
+ | == 参考 == | ||
+ | |||
+ | * 9B-ESP8266__Sleep__Function Description: http://bbs.espressif.com/download/file.php?id=534 | ||
+ | |||
<br><br> | <br><br> | ||
<br><br> | <br><br> |
2019年4月23日 (二) 11:20的最后版本
目录 |
[编辑] 1 概述
ESP8266 系列芯片提供以下三种可配置的睡眠模式,您可以根据应用按需选用:
- Modem-sleep
- Light-sleep
- Deep-sleep
三种模式的区别如下:
[编辑] 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 模块仍然工作,负责芯片的定时唤醒
[编辑] 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
[编辑] 4.3 唤醒
使用 Deep-sleep 自动唤醒须将 GPIO16 与芯片 EXT_RSTB 管脚连接
在 Deep-sleep 状态下,可以通过外部 IO 在芯片 EXT_RSTB 管脚上产生一个低电平脉冲,芯片即可被唤醒并启动
- 注意:如果自动唤醒与外部唤醒须要同时作用,须要在外部电路设计时,使用合适的线逻辑操作电路。
[编辑] 4.4 应用
Deep-sleep 可以用于低功耗的传感器应用,或者大部分时间都不需要进行数据传输的情况
设备可以每隔一段时间从 Deep-sleep 状态醒来测量数据并上传,之后继续进入 Deep-sleep
也可以将多个数据存储于RTC memory(RTC memory 在 Deep-sleep 模式下仍然可以保存数据),然后一次发送出去
[编辑] 5 参考
- 9B-ESP8266__Sleep__Function Description: http://bbs.espressif.com/download/file.php?id=534