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

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

    学习学习

  2. Cjiio

    学习学习

  3. Joy

    感谢分享!

  4. aboutibm

    esp d1 mini试试

  5. 小白8335

    大佬流弊,学习

  6. Domi

    学习

  7. 睡眠唤醒之后,就不执行接下去的函数了

  8. kkk

    正好学习一下

  9. 我的2024

    66

  10. 💭8428

    666

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