※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();
}
コメント: