首页

如何开启ESP8266的深度睡眠模式?定时器唤醒

在本教程中,我们将了解ESP8266 SoC的低功耗操作,并学习如何启用ESP8266深度睡眠模式。我们还将测量正常工作模式和深度睡眠模式下的电流。

NodeMCU-On-board-LEDs
NodeMCU上有两个板载led

简介

现代微控制器和片上系统(soc)的设计具有良好的功率效率。这实际上是小处理器(如mcu和soc)的一个关键特征,它们通常在电池供电系统中实现。

为产品设计选择MCU的主要因素之一是它在低功耗模式下运行的能力,这是现代微控制器的一个特殊的电源管理特性。

在低功耗模式下,微控制器关闭其系统中不被应用程序使用的部分。这一点很重要,特别是当你设计一个锂电池操作系统,并且你想让你的系统长时间依靠电池运行时。

当你与无线相关的设计工作时,事情变得更有趣,例如,一个基于ESP8266 Wi-Fi SoC的系统。除了普通微控制器的东西(如GPIO, SPI, ADC, I2C等),ESP8266 SoC还具有集成的Wi-Fi网络功能。

即使有所有集成的Wi-Fi硬件,如RF Balun,低噪声接收放大器,功率放大器,滤波器和天线开关,ESP8266 Wi-Fi SoC提供几个低功耗操作,构建一个节能系统。

ESP8266 SoC的工作模式

凭借先进的电源管理技术,ESP8266EX Wi-Fi SoC支持四种不同的工作模式。

  • 主动模式
  • Modem-Sleep模式
  • 轻度睡眠模式
  • 深度睡眠模式

主动模式

这是默认的操作模式,CPU正常运行,同时Wi-Fi和Radio上电,以便SoC可以传输、接收或收听Wi-Fi。当CPU在工作时,所有外设也都是活动的,可以被应用程序使用。

主动式模式的功耗取决于SoC是通过Wi-Fi传输数据还是接收数据。此外,功耗还取决于IEE 802.11协议的类型(如802.11b、802.11g或802.11n)及其相关调制(CCK、OFDM或MCS7)。

下表给出了主动模式下各种参数的典型功耗值。电源电压为3.0V,环境温度为250C。

参数

mA典型电流

TX

802.11b - CCK - 11mbps - P= + 17 dBm 170
802.11g - OFDM - 54mbps - P= + 15 dBm

140

802.11n - MCS7 - P= + 13 dBm

120

处方

802.11b - 1024B报文长度-80 dBm

50

802.11g - 1024B报文长度- -70 dBm

56
802.11n - 1024B报文长度- -65 dBm

56

注意:功耗值仅针对射频模块,没有任何额外的CPU操作(如GPIO、ADC等)。

Modem-Sleep模式

这是ESP8266 SoC的第一个也是最简单的低功耗模式或休眠模式。顾名思义,在Modem-Sleep模式下,ESP8266 SoC的CPU是正常工作的,但Wi-Fi和Radio是关闭的。

即使Wi-Fi调制解调器电路断电,芯片仍然保持Wi-Fi连接。这意味着没有数据传输,只有连接。

关闭Wi-Fi调制解调器将显著降低功耗,由于CPU仍在工作,调制解调器休眠模式可用于只有CPU必须工作的应用程序(如ADC、PWM或I2S)。

轻度睡眠模式

在轻睡眠模式下,除了Wi-Fi调制解调器电路外,CPU、时钟和所有内部外围设备也处于暂停状态,有助于更低的功耗。

浅睡眠模式的一个简单应用是Wi-Fi Switch, CPU在不工作时可以空闲,但系统连接到Wi-Fi接收命令(Wi-Fi传输也被禁用)。

由于ESP8266的CPU处于Light-Sleep Mode挂起状态,无法响应来自内部外设的信号和中断。因此,为了从Light-Sleep模式唤醒,必须应用一个外部GPIO触发器。

注意:GPIO16不能用于轻睡眠唤醒。

深度睡眠模式

ESP8266的深度睡眠模式是终极低功耗模式,除了RTC块,所有东西都被关闭。CPU、时钟、外设、Wi-Fi、无线电均关闭,以降低功耗。

虽然调制解调器睡眠模式和浅睡眠模式可以由系统自动实现,但ESP8266深度睡眠模式是由用户发起的(通过固件)。

注意:要使能ESP8266的深度休眠模式,必须将GPIO16和EXT_RSTB引脚连接在一起。EXT_RSTB在ESP-12E模块和NodeMCU中也表示为RST引脚。

ESP8266 NodeMCU深度休眠模式在低功耗应用程序中非常有用,在这些应用程序中数据传输不是很频繁,CPU大部分时间处于空闲状态。

在这种情况下,如果ESP8266激活了深度睡眠模式,那么系统将在预定义的时间间隔后从深度睡眠中唤醒,测量来自Sensor的数据,通过Wi-Fi网络将数据上传到远程服务器,然后返回到深度睡眠模式。这个过程再次重复。

ESP8266睡眠模式的比较

下表显示了ESP8266 SoC中三种睡眠模式的简单比较。

调制解调器——睡眠 光——睡眠 深度——睡眠
CPU 暂停

系统时钟

无线网络

清债信托公司

电力消耗 15个马 0.9马

20µ

注意:此数据基于Espressif Systems提供的数据表。实时值肯定会随着设置的不同而不同。

如何开启ESP8266的深度睡眠模式?

将ESP8266 SoC置于深度睡眠模式实际上非常简单。它只是调用了函数ESP.deepSleep(),以微秒为单位的睡眠时间作为参数传递。有趣的是如何从深度睡眠模式中醒来。

有两种方法可以唤醒ESP8266从深度睡眠模式。它们是:

  • 自动唤醒
  • 外部叫醒

自动唤醒也被称为定时器唤醒,在休眠时间过去后,ESP8266自动从深度睡眠模式唤醒自己。在外部唤醒的情况下,当你按下RST按钮(即,当你应用一个瞬间的低信号到RST引脚),ESP8266从深度睡眠唤醒。

让我们看看如何为ESP8266深度睡眠模式实现这两种唤醒系统。我将使用ESP8266 NodeMCU板进行演示。

注意:如果你有ESP-01模块,那么实现外部唤醒是非常容易的,因为你可以访问RST引脚。由于不能直接访问GPIO16引脚,因此实现定时器唤醒有点困难。

但是你总是可以将一根导线焊接到ESP8266EX SoC的GPIO16引脚上使用它。如果你想要焊接一根导线到GPIO16引脚,要非常小心,因为你不想与其他引脚短路。

看看ESP8266NodeMCU引出线有关ESP8266引脚的更多信息。

ESP8266深度睡眠与自动(定时器)唤醒

要实现基于定时器的自动唤醒从深度睡眠模式,所有你必须做的是连接GPIO16引脚到RST引脚。在NodeMCU单板上,GPIO16标记为D0。

ESP8266-Deep-Sleep-Automatic-Timer-Wake-Up

重要提示:在上传代码之前,不要将GPIO16连接到RST,因为在上传代码时可能会遇到困难。上传代码后再将GPIO16连接到RST引脚。

解释

在正常工作条件下,ESP8266的RST引脚总是HIGH。如果你看NodeMCU原理图,你可以发现RST引脚通过12 KΩ电阻被拉到3.3V。

为了复位或重新启动ESP8266单片机,RST引脚必须设置为瞬时低信号。记住这一点。

现在,您可以通过调用ESP.deepSleep()函数将ESP8266分钟设置为深度睡眠模式,并将睡眠时间以微秒为参数。例如,如果你调用ESP.deepSleep(10000000)或ESP.deepSleep(10e6),那么设备被置于深度睡眠模式10000000微秒或10秒,一旦计时器结束,MCU在GPIO16引脚上发送一个LOW信号。

当我们将GPIO16与RST引脚连接时,深度睡眠计时器完成后,GPIO16上的LOW信号将对RST引脚应用LOW信号,微控制器被重置。

测试代码

为了演示ESP8266中的深度睡眠模式与定时器或自动唤醒,我写了一个简单的代码。在这种情况下,一个连接到GPIO的LED被打开5秒,然后SoC被置于深度睡眠5秒。

当ESP8266 MCU进入深度睡眠模式时,LED将关闭。5秒休眠时间过后,GPIO16引脚将通过RST引脚复位MCU,此过程重复。

ESP8266深度睡眠与外部唤醒

要使用外部信号从深度睡眠唤醒ESP8266,您必须使用一个按钮拉RST引脚LOW。但是如果您注意到NodeMCU板,就会发现已经有一个RESET按钮连接到RST引脚。

ESP8266-Deep-Sleep-External-Wake-Up

测试代码

该代码与前面的代码非常相似,但是由于没有超时或预定义的睡眠时间,所以必须将0作为参数传递给ESP.deepSleep()函数。

这将使ESP8266无限期处于深度睡眠模式,直到按下外部唤醒按钮。

正常模式和深度休眠模式下的功耗

我做了一个简单的电路来测量ESP8266 NodeMCU在正常模式和深度睡眠模式下的电流消耗。为此,我使用了外部5V电源和万用表。万用表设置为“直流电流测量模式”。

想了解更多关于万用表和如何使用它,请查看如何使用万用表教程。

5V电源的正轨接在万用表的红色探头上。黑色探针接在NodeMCU的VIN引脚上,NodeMCU的GND接在5V电源负轨上。

我用的是自动或定时叫醒系统。因此,GPIO16和RST引脚连接在一起(仅在上传代码后)。

在正常工作模式下,ESP8266 NodeMCU吸收约80毫安电流。在这里,你也可以看到LED是ON的。

Power-Consumption-Normal-Mode

一旦它在延迟5秒后进入深度睡眠模式,电流下降到大约10毫安。它停留在深度睡眠模式5秒后,ESP8266被GPIO16引脚唤醒。当ESP8266进入深度睡眠模式时,LED熄灭。

Power-Consumption-Deep-Sleep-Mode

结论

这里实现了一个关于ESP8266深度睡眠模式的完整教程。您了解了ESP8266 SoC的不同工作模式,ESP8266的不同睡眠模式,不同模式下的功耗比较,如何将ESP8266置于深度睡眠模式,以及从深度睡眠模式唤醒的不同方式。

留下一个回复

您的电邮地址将不会公布。

Electronicshub图标
Baidu
map