Wanneer bij het voorbeeld "ESP-Light-Sleep 2" de uit te voeren actie langer is dan de sync interval tijd dient de CPU natuurlijk actief te blijven (bussy). In dat geval is enkel een modemsleep gewenst! De energie- winst is weliswaar minder dan bij lightsleep, maar de moeite waard!
Verbruik met modem aan: 70mA, met modemSleep: 15mA, met lightSleep: 0,5mA.
void OnDataRecv(byte *mac, byte *data, byte len) {
rcvd = true;
memcpy(&Sync, data, sizeof(Sync));
styd = millis() + Sync.Sync - 2;
W = (bussy) ? 108 : 8; // wake-up
}
void loop() {
if (low && millis() > (styd - W)) {
low = false;
WiFi.mode(WIFI_STA);
}
...... plaats hier de uit te voeren actie
if (rcvd) {
rcvd = 0;
Sleep(bussy, (styd - W) - millis());
}
}
void Sleep(bool bussy, int sleepTime) {
low = true;
WiFi.mode(WIFI_OFF);
if (bussy) wifi_fpm_set_sleep_type(MODEM_SLEEP_T);
else wifi_fpm_set_sleep_type(LIGHT_SLEEP_T);
wifi_fpm_open();
wifi_fpm_do_sleep(sleepTime * 1000);
if (bussy) delay(1);
else delay(sleepTime + 1);
}
NOOT: Omdat bij modemsleep de CPU actief blijft, verloopt de herstart van het modem sneller en kan het wake-up moment (enkel) in dat geval (tot wel 80mS) dichter bij het sync moment gekozen worden.
Heb je vragen of opmerkingen? Stuur me een berichtje en je krijgt alle gewenste informatie!