Включить режим глубокого сна esp32 после определенного периода бездействия

#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