ESPnow is een peer2peer verbinding tussen twee of meer ESP's.
Bij een synchroon getimede aansturing kunnen de ontvangende units de resterende wachttijd energie besparen door in LightSleep te gaan.
Zie voorbeeld ESPnow-Mesh en Deel 3
In de Sleep routine wordt het modem UIT en AAN gezet met WiFi.mode(). Omdat modem AAN 100mS vergt dient de Wake-Up minimaal 100mS voor het Sync moment plaats te vinden. Middels styd-millis() wordt (na de uit te voeren actie) de resterende (slaap) tijd tot het volgende Wake-Up moment berekend.
void OnDataRecv(byte *mac, byte *data, byte len) {
rcvd = true;
memcpy(&Sync, data, sizeof(Sync));
styd = millis() + Sync.Sync - 110;
}
void loop() {
if (rcvd) {
rcvd = false;
...... plaats hier de uit te voeren actie
Sleep(styd - millis());
}
}
void Sleep(int sleepTime) {
WiFi.mode(WIFI_OFF);
wifi_fpm_set_sleep_type(LIGHT_SLEEP_T);
wifi_fpm_open();
wifi_fpm_do_sleep(sleepTime * 1000);
delay(sleepTime + 1);
WiFi.mode(WIFI_STA);
}
NOOT: WiFi.mode() is nagenoeg hetzelfde als wifi_set_opmode() maar bleek hier net wat effectiever... Volgens diverse docs zou voor ESP8266 in combinatie met WiFi.mode() ook WiFi.forceSleepBegin() en WiFi.forceSleepWake() nodig zijn, maar dat blijkt niet het geval!
Heb je vragen of opmerkingen? Stuur me een berichtje en je krijgt alle gewenste informatie!