赞
踩
ESP32在工作时功耗蛮大的,所以我们可以在不需要时进行休眠,这也是蛮常用的功能。
使用DeepSleep主要分为两步:
EPS32 DeepSleep的唤醒源有如下几个:
在启动DeepSleep后ESP32只剩RTC相关模块继续工作,其它所有模块全部关闭,所以我们需要根据需求手动处理一些事务,比如手动结束蓝牙、wifi等工作(esp_bluedroid_disable()
esp_bt_controller_disable()
esp_wifi_stop()
);
从DeepSleep唤醒后在Arduino core for the ESP32中对于用户来说程序将重新从void setup(){}
开始运行;
ESP32在进入DeepSleep时内存中所有的数据将无法保持,如果我们需要将某些数据进行存储的话使用RTC Memory是不错的选择。ESP32有快速和慢速两片RTC内存区域,各8K大小。对于我们用户应用来说用来存储数据主要用到慢速的RTC内存。
使用RTC_DATA_ATTR
标记的数据将被放置在RTC内存中,比如RTC_DATA_ATTR int data = 0;
,在程序中可以通过变量名直接访问。
使用下面代码进行测试:
RTC_DATA_ATTR int bootCount = 0; //将变量存放于RTC Memory void setup() { Serial.begin(115200); Serial.println(); bootCount++; //累加计数值 Serial.printf("这是第 %d 次复位\n", bootCount); switch(esp_sleep_get_wakeup_cause()) //获取唤醒原因 { case ESP_SLEEP_WAKEUP_TIMER : Serial.println("通过定时器唤醒"); break; case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("通过触摸唤醒"); break; case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("通过EXT0唤醒"); break; case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("通过EXT1唤醒"); break; case ESP_SLEEP_WAKEUP_ULP : Serial.println("通过ULP唤醒"); break; default : Serial.println("并非从DeepSleep中唤醒"); break; } esp_sleep_enable_timer_wakeup(4000000); //设置定时器4秒唤醒 esp_deep_sleep_start(); //启动DeepSleep } void loop() { }
esp_err_t esp_sleep_enable_timer_wakeup(uint64_t time_in_us)
esp_err_t esp_sleep_enable_ext0_wakeup(gpio_num_t gpio_num, int level)
void esp_deep_sleep_start()
void esp_deep_sleep(uint64_t time_in_us)
esp_sleep_wakeup_cause_t esp_sleep_get_wakeup_cause()
ESP_SLEEP_WAKEUP_UNDEFINED
reset was not caused by exit from deep sleepESP_SLEEP_WAKEUP_EXT0
ESP_SLEEP_WAKEUP_EXT1
ESP_SLEEP_WAKEUP_TIMER
ESP_SLEEP_WAKEUP_TOUCHPAD
ESP_SLEEP_WAKEUP_ULP
ESP_SLEEP_WAKEUP_GPIO
light sleep onlyESP_SLEEP_WAKEUP_UART
light sleep onlyDeepSleep和RTC内容其实不少,这里只是列举了一些基础的,更多需求可以参考如下:
https://blog.csdn.net/espressif/article/details/79360365
https://github.com/espressif/arduino-esp32/tree/master/libraries/ESP32/examples/DeepSleep
https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/system/sleep_modes.html
https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/deep-sleep-stub.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。