作者 Jeremy Cook
ESP32 是一款令人难以置信的器件:它能够以数百兆赫的速度处理信息,通过 WiFi 和蓝牙进行通信,并使用其 GPIO 引脚完成各种各样的任务。然而,有人可能会说,能力越大,…功耗越大。
公平地说,与十年前的类似器件相比,ESP32 的功耗实际上相当低。然而,对于现代物联网应用来说,尤其是在涉及电池的情况下,它可能是一个相对耗电的器件,在完全做功的情况下会消耗数百毫安的电流。
好消息是,ESP32 还具有睡眠和休眠模式系统。如果谨慎使用,这些模式可以使 ESP 的功率需求得到控制,或者至少在短时间的活动中得到限制。
睡眠模式
下表概述了 ESP32 深度睡眠和其他电源模式,摘自其数据表:
ESP32 有五种低功耗模式:ESP32 调制解调器睡眠、轻度睡眠、深度睡眠、休眠和断电。调制解调器睡眠和深度睡眠有几种子模式,根据有效处理能力具有不同的功耗率。休眠几乎停止了芯片的所有功能,除了 RTC 在设定的时间后将其唤醒。当 CHIP_PU 引脚设为低电平时,断电模式被激活,需要外部交互才能再次开始进行处理。
所有这些的结果是,ESP32 的低功耗模式可分别消耗 68mA 到 5µA,或 0.068A 到 0.000005A 电流,而不考虑电源关闭。缺点是每种模式都限制了 ESP32 的实用性,如下所述:
忽略电压影响,一个 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.3v 电压电平。消耗结果如下:
HUZZAH32: | 睡眠 = 6.6mA | 唤醒 = 43.2mA 唤醒 + LED = 44.6mA |
DFR0478: | 睡眠 = 0.02mA | 唤醒 = 39.7mA 唤醒 + LED = 40.0mA |
公平地说,要更好地模拟物联网的实际使用情况,可能是测量通过电池端口的电流。尽管如此,在这种情况下,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 是一款功能强大的器件,需要相对较大的功率才能运行。然而,通过仔细的编程,也有可能让这些器件依靠电池电力持续几周、几个月甚至更长时间。关键是要了解低功耗设计中的取舍,以及在实现可接受的性能的同时可以忽略哪些因素。