ESP32的功耗可以通过休眠模式来降低
ESP32 是一个令人难以置信的设备:它可以以数百兆赫的速度处理信息,通过 WiFi 和 Bluetooth 进行通信,并使用其 GPIO 引脚完成各种任务。然而,有人可能会说,强大的功能伴随着巨大的……电力消耗。
公平地说,ESP32 的功耗实际上相较于十年前的类似设备是相当低的。然而,对于现代物联网应用,尤其是在涉及电池的情况下,它可能是一个相对的电力消耗大户,在完全供电时消耗数百毫安的电流。
好消息是,ESP32 还具有休眠和休眠模式的系统。经过仔细使用,这些模式可以控制 ESP 的电力需求,或者至少将其限制在短暂的活跃期内。
休眠模式
ESP32 深度睡眠和其他电源模式在下表中介绍,摘自其数据表:
| 电源模式 | 描述 | 功耗 | |
| Modem-sleep | CPU开启。 | 240 MHz (双核芯片) | 30 mA ~ 68 mA |
| 240 MHz (单核芯片) | N/A | ||
| 160 MHz (双核芯片) | 27 mA ~ 44 mA | ||
| 160 MHz (单核芯片) | 27 mA ~ 34 mA | ||
| 正常速度: 80 MHz (双核芯片) | 20 mA ~ 31 mA | ||
| 正常速度: 80 MHz (单核芯片) | 20 mA ~ 25 mA | ||
| Light-sleep | - | 0.8 mA | |
| Deep-sleep | ULP协处理器启动。 | 150 µA | |
| ULP传感器监控模式 | 100 µA @1% 负载 | ||
| RTC定时器 + RTC存储 | 10 µA | ||
| 休眠 | 仅RTC定时器 | 5 µA | |
| 断电 | CHIP_PU设为低电平,芯片断电。 | 1 µA | |
截图 来自数据表
ESP32有五种低功耗模式:ESP32调制解调器休眠、轻度休眠、深度休眠、休眠和断电模式。调制解调器休眠和深度休眠有几种子模式,基于活动处理能力的不同电力消耗率。休眠模式几乎停止芯片的所有功能,除了用于在设定时间后唤醒的RTC。断电模式在CHIP_PU引脚被置低时激活,需要外部互动重新开始处理。
所有这些的结果是,ESP32的低功耗模式可以消耗68mA到5µA,即.068A到.000005A,不包括断电模式。缺点是每种模式都限制了ESP32的用途,如下所示:
- 调制解调器休眠:无线通信被切断。
- 轻度休眠:暂停CPU但保留内存状态。
- 深度休眠:关闭ESP32的主内存。保留有限的RTC(实时时钟)内存,可以在唤醒时使用。在三种深度休眠子模式中的两种中,ULP(超低功耗)处理器保持激活状态,允许执行简单任务和输入监控。
- 休眠:仅保留RTC和有限数量的GPIO引脚用于唤醒。不保留内存。
- 断电:必须通过外部开关开启。在大多数情况下,1µA的功耗可忽略不计。
忽略电压影响,一个小的3.7V、850mAh可充电电池可以为ESP32在调制解调器休眠状态下供电约12.5小时。轻度休眠可以运行超过1000小时。中等级别的深度休眠可以提供8500小时的运行时间——大约一年——而休眠状态理论上可以维持近20年。当然,设备需要间歇性唤醒才能有用,但通过仔细规划,一个ESP32设置可以实现电池充电之间的极长寿命。
ESP32 深度睡眠开发板差异
截图 来自数据表
在讨论功耗时,ESP32芯片或模块只是电子设备的一部分。进行实验时,您可能会使用开发板。对于更完整的电子设计,需要定制相关部件的组合以运行物联网“设备”。通过精心编程,使用ESP32可以非常节能,但周围的电子设备需要仔细考虑。
为了解释这一点,我将一个 Adafruit HUZZAH32 ESP32 开发板连接到电源和电流测量设备,还有一个DFRobot DFR0478 ESP32板。两者都在这篇ESP32复合视频时钟文章中亮相,并在一个相当小众的用例中表现不同。或许,功率效率也会成为两者之间的一个区别特征。
为了测试这一点,我使用了修改版“TimerWakeUp” ESP32 Arduino 示例草图,该草图进入深度睡眠,唤醒后点亮板载 LED灯,然后再进入睡眠以开始循环。将5.3V输入每个板,以转换为ESP32所需的~3.3伏电平。消耗结果如下:
HUZZAH32: 睡眠 = 6.6mA 唤醒 = 43.2mA 唤醒 + LED = 44.6mA DFR0478: 睡眠 = .02mA 唤醒 = 39.7mA 唤醒 + LED = 40.0mA
公平地说,更好地模拟实际的 IoT 使用情况可能是测量电池接口的电流。尽管如此,在这个场景中,DFR0478 FireBeetle 板 在睡眠模式下比其对应产品更有效率。
HUZZAH32 在深度睡眠时从 电池电源提取7000µA(7mA),大致与我在实验中测量到的相同。Andreas Spiess 的分析发现,DFR0478 在深度睡眠时从电池提取的电流约为 53µA(0.053mA)。这显著高于我在 DFR0478 上测量到的数值,不过他的报告使用了不同的电源输入和更早版本的板子(2.0 对比我测试的 4.0)。这个测量值也逼近了我的万用表可以报告的下限,这可能影响其准确性。最后需要说明的是,测试的 FireBeetle 使用的是 WROOM-32D ESP32 模块,而 HUZZAH32 使用的是 WROOM-32E。
综上所述,测试的两块板之间存在数量级的差异,这很好地说明了支持 ESP32 的电路对能耗可以产生显著影响。
ESP32的功耗通过睡眠模式得到控制
ESP32 是一款功能强大的设备,其运行可能需要相对较大的电力。然而,通过精心编程,可以让这些设备在电池电量下运行数周、数月,甚至更长时间。关键在于理解低功耗设计中的权衡,并了解在仍能实现可接受性能的情况下可以省略哪些部分。

文章标签