闲置一段时间后启用 esp32 深度睡眠模式
Enable esp32 deep sleep mode after a certain period of inactivity
我有一个用 esp 设计的设备,它包含两个按钮,每个按钮执行一个功能。但是,他一直在监视这些按钮和 运行 电池没电了。在一段时间不活动后,如何实现 esp 的深度睡眠?例如,如果设备在 30 秒内没有读取,则激活睡眠模式。要退出该模式,只需按任何现有按钮即可。
我想到了团队的一些东西,但它不起作用,因为 milis() 参数永远不会重置。
void loop()
{
unsigned long timer=millis();
int botaoRfid = digitalRead(butRFID);
int botaoDig = digitalRead(butDIG);
if(botaoRfid == HIGH){
timer=0;
Serial.println("botao RFID pressionado");
checkRFID();
}
else if(botaoDig == HIGH){
timer=0;
Serial.println("botao DIGITAL pressionado");
checkFingerprint();
return;
}
else if(timer >=10000){
Serial.println("Sleep…");
esp_deep_sleep_start();
}
}
谢谢!
这不是真正的问题,millis()
在启动后不会重置,当您像这样重写代码时:
unsigned long timer = 0;
void setup()
{
}
void loop()
{
int botaoRfid = digitalRead(butRFID);
int botaoDig = digitalRead(butDIG);
if(botaoRfid == HIGH){
timer = millis();
Serial.println("botao RFID pressionado");
checkRFID();
}
else if(botaoDig == HIGH){
timer = millis();
Serial.println("botao DIGITAL pressionado");
checkFingerprint();
return;
}
else if(millis() - timer >= 10000){
Serial.println("Sleep…");
esp_deep_sleep_start();
}
}
这将使 ESP32 在 10 秒后进入深度睡眠状态,而不会重置为当前 millis()
(目前在每个循环周期中都会发生这种情况,但您当然可以将该代码放在循环之外...... .).但是请注意,millis()
会在大约 49 天后溢出,您必须正确处理。
此外,为了将 ESP32 从 DeepSleep 中唤醒,您必须定义一个 PIN 码来监听,例如 esp_sleep_enable_ext1_wakeup(bitmask, mode)
。还有其他选项概述 here.
我有一个用 esp 设计的设备,它包含两个按钮,每个按钮执行一个功能。但是,他一直在监视这些按钮和 运行 电池没电了。在一段时间不活动后,如何实现 esp 的深度睡眠?例如,如果设备在 30 秒内没有读取,则激活睡眠模式。要退出该模式,只需按任何现有按钮即可。
我想到了团队的一些东西,但它不起作用,因为 milis() 参数永远不会重置。
void loop()
{
unsigned long timer=millis();
int botaoRfid = digitalRead(butRFID);
int botaoDig = digitalRead(butDIG);
if(botaoRfid == HIGH){
timer=0;
Serial.println("botao RFID pressionado");
checkRFID();
}
else if(botaoDig == HIGH){
timer=0;
Serial.println("botao DIGITAL pressionado");
checkFingerprint();
return;
}
else if(timer >=10000){
Serial.println("Sleep…");
esp_deep_sleep_start();
}
}
谢谢!
这不是真正的问题,millis()
在启动后不会重置,当您像这样重写代码时:
unsigned long timer = 0;
void setup()
{
}
void loop()
{
int botaoRfid = digitalRead(butRFID);
int botaoDig = digitalRead(butDIG);
if(botaoRfid == HIGH){
timer = millis();
Serial.println("botao RFID pressionado");
checkRFID();
}
else if(botaoDig == HIGH){
timer = millis();
Serial.println("botao DIGITAL pressionado");
checkFingerprint();
return;
}
else if(millis() - timer >= 10000){
Serial.println("Sleep…");
esp_deep_sleep_start();
}
}
这将使 ESP32 在 10 秒后进入深度睡眠状态,而不会重置为当前 millis()
(目前在每个循环周期中都会发生这种情况,但您当然可以将该代码放在循环之外...... .).但是请注意,millis()
会在大约 49 天后溢出,您必须正确处理。
此外,为了将 ESP32 从 DeepSleep 中唤醒,您必须定义一个 PIN 码来监听,例如 esp_sleep_enable_ext1_wakeup(bitmask, mode)
。还有其他选项概述 here.