Added powersaving to all ESP32 boards with RTC-supported DIO1

Added CLI to enable/disable powersaving
This commit is contained in:
Kevin Le 2025-12-23 12:48:08 +07:00
parent 0c3fb918b2
commit 5c6c15942b
7 changed files with 68 additions and 2 deletions

View file

@ -19,12 +19,19 @@ void halt() {
static char command[160];
// For power saving
unsigned long lastActive = 0; // mark last active time
unsigned long nextSleepinSecs = 120; // next sleep in seconds. The first sleep (if enabled) is after 2 minutes from boot
void setup() {
Serial.begin(115200);
delay(1000);
board.begin();
// For power saving
lastActive = millis(); // mark last active time since boot
#ifdef DISPLAY_CLASS
if (display.begin()) {
display.startFrame();
@ -117,4 +124,15 @@ void loop() {
ui_task.loop();
#endif
rtc_clock.tick();
if (the_mesh.getNodePrefs()->powersaving_enabled && // To check if power saving is enabled
the_mesh.millisHasNowPassed(lastActive + nextSleepinSecs * 1000)) { // To check if it is time to sleep
if (the_mesh.hasPendingWork() == 0) { // No pending work. Safe to sleep
board.sleep(1800); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
lastActive = millis();
nextSleepinSecs = 5; // Default: To work for 5s and sleep again
} else {
nextSleepinSecs += 5; // When there is pending work, to work another 5s
}
}
}