|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这个,深度睡眠(deepsleep)可以低功耗——超低功耗,但其实是相当于reset,不利开发
下边是ESP32的休眠方法,ESP8266相似,只是方法略有不同。没什么外围的消耗的话(如,LDO也是超低功耗),电流是很低,几个uA
#define uS_TO_S_FACTOR 1000000 /* 微秒到秒的转换级数 */
#define TIME_TO_SLEEP 15 /* 休克的秒数,最大应该是64位的微秒。若想更大的休眠时间,就要使用下边变量结合了*/
RTC_DATA_ATTR int bootCount = 0; //必须是使用RTC保存的
/* 启动的缘由 */
void print_wakeup_reason(){
esp_sleep_wakeup_cause_t wakeup_reason;
wakeup_reason = esp_sleep_get_wakeup_cause();
switch(wakeup_reason){
case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("被 RTC_IO 唤醒的"); break;
case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("被 RTC_CNTL唤醒的"); break;
case ESP_SLEEP_WAKEUP_TIMER : Serial.println("被 timer 唤醒的"); break;
case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("被 touchpad 唤醒的"); break;
case ESP_SLEEP_WAKEUP_ULP : Serial.println("被 ULP program唤醒的"); break;
default : Serial.printf("不是休克被唤醒的码: %d\n",wakeup_reason); break;
}
}
void setup(){
delay(1000); //稍作延时
Serial.begin(115200);
delay(10); //给串口一点时间准备
++bootCount; //重启的次数
Serial.println("已经重启多少次: " + String(bootCount));
print_wakeup_reason(); //打印启动的缘由
//要做的功能,写在这
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Serial.println("休克的时间 " + String(TIME_TO_SLEEP) + " 秒");
Serial.println("我要开始休克了");
Serial.flush();
delay(1000);
esp_deep_sleep_start();
Serial.println("你将看不到我"); //休眠后,就是reset了,所以……
}
void loop(){
//不用写在loop中,因为前面已经深睡了
}
========================
有没有不reset的休眠(克)? 如51单片机的PowerDown模式
|
|