※This article is based on esp-idf 4.2.1
ESP32做低功耗不是一个好的选择
https://www.icxbk.com/ask/detail/20819.html https://diyprojects.io/esp32-arduino-code-for-deep-sleep-and-wake-ups-timer-touch-pad-gpio/#.YXFOamJByUk
Active 模式、Modem-sleep 模式、Light-sleep 模式、Deep-sleep 模式、休眠模式.
除了Active模式外其他四种模式都属于低功耗模式,按照顺序越往后功耗越低,工作的模块越少。modem-sleep的电流消耗为30mA~3mA,Light-sleep的电流消耗为800uA,deep-sleep模式的电流消耗为6.5uA,休眠模式的电流消耗最低可以达到4.5uA,可以看到esp32在低功耗模式是非常强大的。
唤醒源 | Light-Sleep | Deep-sleep | 休眠 |
EXT0 | Y | Y | - |
EXT1 | Y | Y | Y |
GPIO | Y | Y | - |
RTC计时器 | Y | Y | Y |
SDIO | Y | - | - |
Wi-Fi | Y | - | - |
UART0 | Y | - | - |
UART1 | Y | - | - |
TOUCH | Y | Y | - |
ULP协处理器 | Y | Y | - |
BT | Y | - | - |
API
Method | Modem-Sleep | Light-Sleep | Deep-Sleep | Hibernate | |
Timer | esp_sleep_enable_timer_wakeup() | ✓ | ✓ | ✓ | ✓ |
Touch | esp_sleep_enable_touchpad_wakeup() | ✓ | ✓ | ✓ | |
Ext0 or Ext1 | esp_sleep_enable_ext0_wakeup() esp_sleep_enable_ext1_wakeup() | ✓ | ✓ | ✓ | |
GPIO | esp_sleep_enable_gpio_wakeup() | ✓ | ✓ | ||
UART | esp_sleep_enable_uart_wakeup() | ✓ | ✓ | ||
ULP | esp_sleep_enable_ulp_wakeup() | ✓ | ✓ | ✓ |
EXT0唤醒 void app_main() { switch(esp_speep_get_wakeup_cause()) { case ESP_SLEEP_WAKEUP_EXT0: printf("wake up.........\n"); break; case ESP_SLEEP_WAKEUP_UNDEFINED: default: printf("not sleep...............\n"); break; } //第一个参数:RTCIO的编号 //第二个参数:是高电平唤醒还是低电平唤醒 esp_sleep_enable_ext0_wakeup(34,0); esp_deep_sleep_start(); } EXT1唤醒 void app_main() { switch(esp_speep_get_wakeup_cause()) { case ESP_SLEEP_WAKEUP_EXT1: printf("wake up.........\n"); break; case ESP_SLEEP_WAKEUP_UNDEFINED: default: printf("not sleep...............\n"); break; } uint64_t mask; mask = 1ull << 34; //第一个参数:mask位,如果引脚为34 则mask = 1ull<<34 //第二个参数:是高电平唤醒还是低电平唤醒 esp_sleep_enable_ext1_wakeup(mask,0); esp_deep_sleep_start(); }
コメント: