ESP8266深度睡眠配置-低功耗模式

释放双眼,带上耳机,听听看~!

本教程展示了如何使用 Arduino IDE 将深度睡眠与 ESP8266 (NodeMCU) 结合使用。我们将介绍使用定时器唤醒的深度睡眠以及使用复位 (RST) 引脚进行外部唤醒的深度睡眠。

ESP8266深度睡眠配置-低功耗模式

要将 ESP8266 置于深度睡眠模式,请使用ESP.deepSleep(uS)并作为参数传递睡眠时间(以微秒为单位)。GPIO 16 必须连接到复位 (RST) 引脚,以便 ESP8266 能够唤醒。

要将 ESP8266 无限期地置于深度睡眠模式,请使用ESP.deepSleep(0)。当 RST 引脚收到低电平信号时,ESP8266 将被唤醒。

 

深度睡眠模式简介

如果您使用电池给 ESP8266 开发板供电制作了一个项目,或者您刚刚将 ESP8266 NodeMCU 开发板连接到移动电源。运行一段时间后,您会发现电池的续航时间并不长,特别是在使用 Wi-Fi 时。

ESP8266深度睡眠配置-低功耗模式

如果您将 ESP8266 置于深度睡眠模式,则会降低功耗,并且电池的使用寿命会更长。

让 ESP8266 处于深度睡眠模式意味着减少运行时消耗更多电量的活动(例如 Wi-Fi),但只留下足够的活动来在发生有趣的事情时唤醒处理器。

睡眠类型

睡眠模式分为三种不同类型:调制解调器睡眠(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 作为独立芯片时的功耗。如果您使用的是开发板,它们具有消耗更多电流的无源组件。

它们都有不同的目的,应该在不同的应用程序中使用。

在本文中,我们将介绍深度睡眠模式。除了实时时钟 (RTC) 之外,一切始终处于关闭状态,这是 ESP8266 跟踪时间的方式。

ESP8266深度睡眠配置-低功耗模式

这是最省电的选项,ESP 芯片仅消耗约 20uA 的电流。但是,如果使用内置编程器、LED等的全功能开发板,则无法实现如此低功耗的状态。

深度睡眠代码

对于深度睡眠,示例程序如下所示:

  1. ESP8266 连接 Wi-Fi
  2. ESP8266 执行任务(读取传感器、发布 MQTT 消息等)
  3. 休眠预定的时间段
  4. ESP8266 唤醒
  5. 这个过程一遍又一遍地重复

唤醒源

将 ESP8266 置于深度睡眠模式后,有不同的方法可以唤醒它:

  • #1 定时器唤醒: ESP8266 在预定义的时间段后自行唤醒
  • #2 外部唤醒:按下 RST 按钮唤醒 ESP8266(ESP8266 重新启动)

对于低功耗项目,您可以考虑使用 ESP32 板,它提供更多深度睡眠模式和唤醒源。

#1 ESP8266 深度睡眠与定时器唤醒

要使用 ESP8266 的定时器唤醒,您需要将 RST 引脚连接到NodeMCU 板中标记为 D0 的 GPIO 16 。只需遵循下一个示意图:

ESP8266深度睡眠配置-低功耗模式

仅在上传代码后将 RST 引脚连接到 GPIO 16。

如果您查看 NodeMCU 引脚排列,您会发现 GPIO 16 是一个特殊引脚,并且具有 WAKE 功能。

ESP8266深度睡眠配置-低功耗模式

 

当 ESP8266 运行时,ESP8266 的 RST 引脚始终为高电平。然而,当 RST 引脚收到低电平信号时,它会重新启动微控制器。

如果您使用ESP8266设置深度睡眠定时器,一旦定时器结束,GPIO 16就会发送低信号。这意味着,当连接到RST引脚时,GPIO 16可以在设置的时间段后唤醒ESP8266。

ESP8266 NodeMCU 定时器唤醒示例程序

安装 Arduino IDE 的 ESP8266 环境后,转到“工具”并选择“ NodeMCU(ESP-12E Module) ”。以下是您需要上传到 ESP 的代码:

在此示例中,我们在串行监视器中打印一条消息:

Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is connected to a LOW signal");
之后,ESP8266 进入睡眠状态 30 秒。
ESP.deepSleep(30e6);

要将 ESP8266 置于深度睡眠状态,您可以使用ESP.deepsleep(uS)并将睡眠时间(以微秒为单位)作为参数传递。

在这种情况下,30e6 对应于 30000000 微秒,等于 30 秒。

上传代码后,按 RST 按钮开始运行代码,然后将 RST 连接到 GPIO 16。ESP8266 应每 30 秒唤醒一次,并在串行监视器中打印一条消息,如下所示。

ESP8266深度睡眠配置-低功耗模式

此示例只是在串行监视器中打印一条消息,但在现实世界的应用程序中,您将执行一项有用的任务,例如发出请求、发布传感器读数等。

ESP-01定时器唤醒电路

如果您想使用ESP-01电路板进行类似的设置,则需要焊接一根导线,如下所示。那个微小的引脚是GPIO 16,它需要连接到RST引脚。

ESP8266深度睡眠配置-低功耗模式

然而,引脚非常小,以至于很难将这样的电线焊接到 ESP-01 上的 GPIO 16…因此,对于这种唤醒模式,您应该使用 NodeMCU 板或裸露的 ESP12-E芯片。

ESP8266深度睡眠配置-低功耗模式

 

#2 ESP8266 深度睡眠与外部唤醒

您也可以通过外部唤醒来唤醒ESP8266,如按下按钮或簧片开关。您只需将ESP8266无限期地置于深度睡眠模式,然后将RST引脚设置为低电平即可唤醒它。
要测试此设置,请将按钮连接到ESP8266板,如下图所示。当你按下按钮时,RST引脚就会变低。

ESP8266深度睡眠配置-低功耗模式

如果您使用的是 ESP-01,请按照下图进行操作。

ESP8266深度睡眠配置-低功耗模式

ESP8266 外部唤醒示例程序

然后,将以下代码上传到您的 ESP8266 开发板。


 /*
 * ESP8266 Deep sleep mode example
 *  
 * Complete Project Details https://www.qutaojiao.com
 */
 
void setup() {
  Serial.begin(115200);
  Serial.setTimeout(2000);

  // Wait for serial to initialize.
  while(!Serial) { }
  
  // Deep sleep mode for 30 seconds, the ESP8266 wakes up by itself when GPIO 16 (D0 in NodeMCU board) is connected to the RESET pin
  //Serial.println("I'm awake, but I'm going into deep sleep mode for 30 seconds");
  //ESP.deepSleep(30e6); 
  
  // Deep sleep mode until RESET pin is connected to a LOW signal (for example pushbutton or magnetic reed switch)
  Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is connected to a LOW signal");
  ESP.deepSleep(0); 
}

void loop() {
}
 

此代码将 ESP8266 无限期地置于深度睡眠模式。为此,您只需将 0 作为参数传递给沉睡()功能:

ESP.deepSleep(0);

只有当电路板被重置时,ESP 才会被唤醒。在这种情况下,按下按钮即可将 RST 引脚拉至 GND。

当您按下按钮时,ESP8266 会唤醒,执行编程任务并返回睡眠状态,直到触发新的重置事件。

测量电流

当开发板处于深度睡眠模式时,用万用表测量电流消耗,看看它消耗了多少电量。

以下是放置万用表探头的方法。

ESP8266深度睡眠配置-低功耗模式

当 ESP-01 处于深度睡眠模式时,仅使用 0.3mA,即大约 300uA。

ESP8266深度睡眠配置-低功耗模式

请记住,在正常使用 Wi-Fi 期间,ESP8266 可能消耗 50mA 至 170mA 的电流。

总结

现在您已经知道如何使用deepSleep()功能,您的电池供电项目可以持续更长时间。

给TA打赏
共{{data.count}}人
人已打赏
ESP32ESP32-进阶免费项目

带有 BME280 的 ESP32 Web 服务器——高级气象站

2023-6-4 0:58:56

Nodemcu/ESP8266Nodemcu/ESP8266-进阶动态

ESP-NOW 入门(ESP8266 NodeMCU)

2023-7-1 13:34:40

4 条回复 A文章作者 M管理员
  1. 迷沙

    学习学习

  2. Cjiio

    学习学习

  3. Joy

    感谢分享!

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
'); })();