#arduino #sleep #esp32
#arduino #сон #esp32
Вопрос:
У меня есть устройство, разработанное в 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();
}
}
Спасибо!
Ответ №1:
На самом деле это не проблема, которая 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 из глубокого сна, вы должны определить PIN-код для прослушивания, используя, например esp_sleep_enable_ext1_wakeup(bitmask, mode)
. Здесь также изложен другой вариант.
Комментарии:
1. Привет! Спасибо за помощь, но я думаю, что это не сработало. Таким образом, система никогда не переходила в режим глубокого сна и всегда ожидает ввода
2. Вы удалили основной millis () из цикла?
3. Каким будет этот основной millis ()?
4. Я отредактировал ответ. Если это не поможет, вам, вероятно, следует сначала ознакомиться с основами…
5. Я провел тест и понял, что (миллис () — таймер) всегда больше 5000