diff --git a/src/globals.h b/src/globals.h index c02b33b..f7ae102 100644 --- a/src/globals.h +++ b/src/globals.h @@ -54,8 +54,13 @@ void writeFile(fs::FS &fs, const char * path, const char * message){ unsigned long lastStart = 0; +unsigned long lastInteraction = 0; + uint8_t buttontoignore = 0; const int startDelay = 250; +// wait until deep sleep: +const long sleepDelay = 1800000; + #endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 1de5cba..e4b7ccf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -236,11 +236,13 @@ void togglePlayPause() { playNextMp3(); } + lastInteraction = millis(); } void next() { playNextMp3(); + lastInteraction = millis(); } void audio_eof_mp3(const char *info) @@ -262,12 +264,14 @@ void readRFID() String uidString = getRFIDString(rfid.uid.uidByte); Serial.println(uidString); playSongByRFID(uidString); + lastInteraction = millis(); } void setup() { // put your setup code here, to run once: Serial.begin(115200); + pinMode(BTN_START_STOP, INPUT_PULLUP); pinMode(BTN_NEXT, INPUT_PULLUP); @@ -282,7 +286,8 @@ void setup() deactivateRFID(); activateSD(); - + //deep sleep wakeup + esp_sleep_enable_ext0_wakeup((gpio_num_t)BTN_START_STOP, LOW); Serial.print("Initializing SD card..."); @@ -383,6 +388,7 @@ void setup() &RfidTask, /* Task handle. */ 0); /* Core where the task should run */ + lastInteraction = millis(); Serial.println("initialization done."); } @@ -400,6 +406,7 @@ void named_song_action(AsyncWebServerRequest *request) playSongByName(p->value()); } } + lastInteraction = millis(); request->send_P(200, "text/plain", "ok"); } @@ -417,6 +424,7 @@ void progress_action(AsyncWebServerRequest *request) audio.setAudioPlayPosition(atoi(p->value().c_str())); } } + lastInteraction = millis(); request->send_P(200, "text/plain", "ok"); } @@ -434,6 +442,7 @@ void volume_action(AsyncWebServerRequest *request) audio.setVolume(atoi(p->value().c_str())); } } + lastInteraction = millis(); request->send_P(200, "text/plain", "ok"); } @@ -463,6 +472,15 @@ void loop() start(); } + // send device to sleep: + long now = millis(); + if (now - lastInteraction > sleepDelay) { + Serial.println("entering deep sleep..."); + deactivateRFID(); + deactivateSD(); + esp_deep_sleep_start(); + } + if (asyncTogglePlayPause) { asyncTogglePlayPause = false; @@ -526,6 +544,7 @@ boolean buttonPressed(const uint8_t pin) lastStart = now; Serial.println("button pressed."); buttontoignore = pin; + lastInteraction = now; return true; } } else if (digitalRead(pin) == HIGH && buttontoignore == pin) {