当您的IoT项目由家用市电提供电源时,您不会太在乎功耗。但是,如果您要使用电池为项目供电,则需要计算每个mA电流。
这里的解决方案是利用其一种睡眠模式来减少ESP32的功耗使用情况。实际上,这是一个很好的策略,可以显著提高不需要一直活跃的项目的电池寿命。
要了解ESP32如何实现节能,首先我们需要知道芯片内部的内容。下图显示了ESP32芯片的功能框图。

ESP32芯片的核心是一个双核32位微处理器,具有448 kb的ROM、520 kb的SRAM和4MB的存储器。
该芯片还包含一个WiFi模块、一个蓝牙模块、一个加密加速器(专门设计用于执行加密操作的协调员)、一个RTC模块和许多外围设备。
ESP32的高级电源管理提供了五种可配置的电源模式。根据功耗要求,芯片可以在不同的功率模式之间切换。这些模式是:
● 活动模式
● 调制解调器睡眠模式
● 轻度睡眠模式
● 深度睡眠模式
● 休眠模式
每种模式都有自己的独特功能和节能。
正常模式也称为活动模式。在这种模式下,芯片的所有功能都保持活跃。
由于活动模式始终运行所有操作(尤其是WiFi模块、处理核心和蓝牙模块),因此操作芯片需要超过240mA的电流。还可以观察到,如果您一起使用WiFi和蓝牙,有时会出现高功率尖峰(高达790mA)。

显然,这是最低效率的模式,并消耗最多的电流。因此,如果您想节省电源,则必须利用另一种功耗模式来禁用未使用的功能。
在调制解调器睡眠模式下,除了WiFi、蓝牙和射频外,其他所有内容都是活跃的。它还可以使CPU运行,并且时钟是可配置的。
在这种模式下,芯片在慢速下消耗了约3mA,高速消耗20mA。

为了使WiFi/蓝牙连接保持活动,Wi-Fi、蓝牙和射频以预定义的间隔唤醒。这被称为关联睡眠模式(Association Sleep Pattern)。
在这种睡眠方式中,ESP32在活动模式和调制解调器睡眠模式之间切换。为此,ESP32使用DTIM信标机制在站模式下连接到路由器。
为了节省功耗,ESP32停用了两个DTIM信标间隔之间的Wi-Fi模块,并在下一个信标到达之前自动醒来。睡眠时间由路由器的DTIM信标间隔时间决定,通常为100ms至1000ms。
轻度睡眠类似于Modem睡眠,芯片也遵循其中的关联睡眠方式。
唯一的区别是,在轻度睡眠模式下,数字外围设备,大多数RAM和CPU都是时钟门控。
在轻度睡眠模式下,CPU通过关闭其时钟脉冲而暂停,而RTC和ULP-CoproCessor保持活跃。

在进入轻度睡眠模式之前,ESP32将其内部状态存储在RAM中,并在从睡眠中醒来时恢复操作。这被称为完全保留(Full RAM Retention)。
一旦配置了唤醒源,使用esp_light_sleep_start()函数进入轻度睡眠。
在深度睡眠模式下,CPU、大多数RAM和所有数字外围设备都可以关闭。芯片唯一保持运行的部分是:
● ULP协处理器
● RTC控制器
● RTC外围设备
● RTC快速而缓慢的内存
芯片将消耗约0.15 mA(如果ULP协处理器打开)至10µA。

在深度睡眠模式下,主CPU被关闭,而UltraLowPower(ULP)协处理器可以采用传感器读数,并在必要时唤醒CPU。这种睡眠模式称为ULP传感器监控模式。这对于设计应用程序需要由外部事件或计时器或两者组合唤醒的应用程序很有用,同时保持最少的功耗。
与CPU一起,芯片的主要内存也被禁用。因此,存储在该内存中的所有内容被删除且都无法访问。
由于RTC内存一直供电,因此即使在深度睡眠期间也保留了其内容,并且可以在芯片唤醒后检索。这就是为什么芯片在进入深度睡眠之前将Wi-Fi和蓝牙连接数据存储在RTC内存中的原因。
如果要在重新启动后使用数据,请通过使用RTC_DATA_ATTR属性来定义全局变量,将其存储在RTC内存中。例如,RTC_DATA_ATTR int myVar = 0;
从深度睡眠中出来后,芯片通过复位重新启动,并从一开始就开始执行程序。
与其他睡眠模式不同,系统无法自动进入深度睡眠模式。 esp_deep_sleep_start()函数用于配置唤醒源后立即进入深度睡眠。
与深度睡眠模式不同,在休眠模式下,芯片会禁用内部8 MHz振荡器以及ULP处理器。 RTC恢复内存也已关闭,这意味着我们在休眠模式下无法保留任何数据。
除了一个RTC计时器(在慢速时钟)和一些RTC GPIO外,其他所有内容都被关闭。他们负责从休眠模式中唤醒芯片。

这进一步降低了功耗。在休眠模式下芯片仅消耗约2.5μa。如果您要构建一个不需要一直活跃的项目,则此模式特别有用。
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚。
本小节主要介绍Ws2812灯珠的使用、对父类进行扩展实现自定义功能,和指针向下强制转换的使用。
本小节主要介绍RGB三色LED的使用,以及多态的具体实现。
ESP32 Arduino Framework是专门针对ESP32开发板的Arduino应用开发框架,为用户开发IOT应用、HMI应用提供一致的开发体验。
ESPConnect是一个基于现代浏览器的管理器,在你需要快速验证、调试、管理文件、检查状态的时候,它能帮你省下大量打开和切换重型工具的时间。
本文介绍两种使用TEA5767收音机模块实现FM收音机的方案,感兴趣的朋友可在此基础上实现更丰富的功能。
GPIOViewer 是一个强大的 Arduino 库,专门为 ESP32 芯片设计,可以实时监控 ESP32 芯片上的所有 GPIO 引脚状态。它可以帮助你快速直观地了解每个引脚的当前状态,例如高电平、低电平、输入、输出、中断等等。
在音频处理领域,I2S是一种广泛使用的通信协议,它专门用于芯片之间的音频数据传输。ESP32 作为一款高性能的微控制器,不仅支持 I2S 通信,还提供了强大的硬件接口和灵活的软件库,使其成为音频项目开发的理想选择。
小鹏物联网智能浇花系统是照顾植物的好帮手,支持自动控制和手动控制两种模式,可通过电脑端和手机端查看数据和控制浇水。
Arduino开发环境下适用于ESP32芯片系列开发板的应用开发框架。
本小节主要介绍C++ 类相关的基础知识,包括类的定义、继承、多态,范围作用域等。