ESP32是一款功能强大的微控制器,支持Wi-Fi和蓝牙通信,并且具有多种低功耗模式以延长电池寿命。在设计需要长时间运行的物联网设备时,了解如何设置和优化这些低功耗模式至关重要。
ESP32提供了几种低功耗模式:轻睡眠(Light Sleep)、深度睡眠(Deep Sleep)和休眠(Hibernation)。每种模式都有其特定的应用场景和优缺点。
在轻睡眠模式下,CPU被关闭,但外设如UART、SPI、I2C等仍然可以工作。这种模式适用于需要保持某些外设活动的应用场景。
深度睡眠模式下,大部分芯片组件会被关闭,仅保留RTC(实时时钟)电路来维持时间并唤醒系统。这是最低功耗的模式,适用于需要极低功耗的应用场景。
休眠模式是ESP32的另一种极端省电状态,在此模式下,除了少量存储器和RTC外,所有组件都处于关闭状态。恢复速度较慢,通常用于需要最长待机时间的情况。
进入轻睡眠模式相对简单,可以通过调用esp_sleep_enable_light_sleep()
函数实现。
#include "esp_sleep.h"
void enter_light_sleep() {
// Enable light sleep mode
esp_sleep_enable_light_sleep();
// Go to sleep
printf("Entering light sleep\n");
esp_light_sleep_start();
}
进入深度睡眠模式需要配置唤醒源,例如定时器或外部GPIO中断。
void enter_deep_sleep(uint64_t time_us) {
// Set the wake up source from timer
esp_sleep_enable_timer_wakeup(time_us);
// Enter deep sleep
printf("Entering deep sleep for %llu microseconds\n", time_us);
esp_deep_sleep_start();
}
stateDiagram-v2 [*] --> ActiveMode: System starts in active mode ActiveMode --> LightSleepMode : Call `esp_sleep_enable_light_sleep()` LightSleepMode --> ActiveMode : Wakeup event ActiveMode --> DeepSleepMode : Call `esp_sleep_enable_timer_wakeup()` DeepSleepMode --> ActiveMode : Timer expires or interrupt