ESP8266Arduino编程实例深度休眠与唤醒
ESP8266-Arduino编程实例-深度休眠与唤醒
深度休眠与唤醒
1、ESP8266休眠模式介绍
在嵌入式系统中,功耗是一个绕不开的问题。不同的单片机、嵌入式设备一般会提供电源管理,即功耗管理。ESP8266提供了三个不同的功耗模式,即休眠模式。分别是:Modem Sleep(调制解调器睡眠), Light Sleep(轻度休眠)和Deep Sleep(深度休眠)。每种不同的休眠模式对应不同的功耗及工作状态。不同休眠模式区别如下(ESP8266数据手册):
| Item | Modem-sleep | Light-sleep | Deep-sleep |
|---|---|---|---|
| Wi-Fi | OFF | OFF | OFF |
| System clock | ON | OFF | OFF |
| RTC | ON | ON | ON |
| CPU | ON | Pending | OFF |
| Substrate current | 15 mA | 0.4 mA | ~20 uA |
| Average current (DTIM = 1) | 16.2 mA | 1.8 mA | – |
| Average current (DTIM = 3) | 15.4 mA | 0.9 mA | – |
| Average current (DTIM = 10) | 15.2 mA | 0.55 mA | – |
注:表中功耗指的是 ESP8266 作为独立芯片。 如果使用的是开发板,则它们具有使用更多电流的无源组件。
从上表可以知道,当ESP8266进入深度休眠模式时,除了RTC外,几乎所有设备都停止工作,基板电流达到20uA。但是,如果使用带有内置编程器、LED 等的全功能开发板,将无法实现如此低功耗的状态。
在了解了ESP8266的休眠模式之后,那么如何编写带有休眠模式的应用程序呢?一般流程如下:
- ESP8266连接WiFi
- ESP8266执行任务,如,读取传感器,上报数据等
- 休眠一段预定义的时间
- 唤醒ESP8266
- 不断重复1~4过程
ESP8266有如下唤醒方式:
- 定时器唤醒:ESP8266 在预定义的时间段后自行唤醒
- 外部唤醒:按下 RST 按钮唤醒 ESP8266(ESP8266 重启)
本文将介绍如何使用定时器唤醒深度睡眠的ESP8266和使用复位 (RST) 引脚进行外部唤醒深度睡眠的ESP8266。
2、硬件准备
- ESP8266 NodeMCU开发板一块
- 开关一个
- 220欧姆电阻一个
- 杜邦线若干
- 数据线一条
3、软件准备
- Arduino IDE或VSCode + PlatformIO
在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:
ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:
4、通过定时器唤醒
在ESP8266 NodeMCU的 ESP8266-Arduino编程实例-认识ESP8266中,我们知道,D0接口具有唤醒功能:

因此,要通过 ESP8266 使用定时器唤醒,需要将 RST 引脚连接到 NodeMCU 板上标记为 D0(GPIO 16)。 接线图如下:

注意,请在上传代码完成之后,再连接D0与RST。
ESP8266 运行时,ESP8266 的 RST 引脚始终为高电平。 但是,当 RST 引脚接收到 LOW 信号时,它会重新启动微控制器。
如果使用 ESP8266 设置深度睡眠定时器,一旦定时器结束,GPIO 16 会发送一个 LOW 信号。 这意味着D0(GPIO16) 连接到 RST 引脚时,可以在设定的时间后唤醒 ESP8266。
示例代码如下:
1 | int count = 1; |
示例的代码如何工作?
在setup中,当串口等设备初始化后,任务执行完成后,进入深度休眠30s
1 | ESP.deepSleep(30e6); |
ESP.deepsleep(uS) 函数以睡眠时间作为参数传递(以微秒为单位)。
注意:调用ESP.deepSleep完成后,ESP.deepSleep()函数后面的代码将不会再执行。
5、外部唤醒
还可以通过外部唤醒来唤醒 ESP8266,例如按下按钮或簧片开关。 只需将 ESP8266 无限期地置于深度睡眠模式,然后将 RST 引脚设置为低电平即可将其唤醒。连接电路如下:

示例代码如下:
1 | int count = 1; |
外部唤醒与定时器唤醒的区别是,ESP.deepSleep函数传递参数。外部唤醒时,只需传递0即可,即ESP8266进入无限深度休眠;当传递具体大于0的数值时,ESP8266进入指定时间休眠。
文章来源: https://iotsmart.blog.csdn.net/article/details/126026824