Función millis() en arduino
La función millis() permite obtener un valor en ms. del tiempo de ejecución del sketch. El valor devuelto por esta función es del tipo unsigned long, como podéis ver aquí. Esta función trabaja también con el microcontrolador Nodemcu.
Ahora bien, para qué nos puede ser útil esta función. Esta función se usa para comparar un valor con un intervalo de tiempo y poder realizar una acción. Veamos un ejemplo escrito en concreto para Nodemcu:
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
void setup() {
//desactivamos el watchdog
ESP.wdtDisable();
Serial.begin(115200);
delay(10);
//activamos el watchdog
ESP.wdtEnable(WDTO_8S);
}
void loop() {
//reseteamos el watchdog
ESP.wdtFeed();
//establecemos el intervalo que se va a realizar una acción
int t = 23000;
unsigned long currentMillis, loopMillis;
//obtenemos el valor de tiempo y lo asignamos a la variable
currentMillis = millis();
do {
//reseteamos el watchdog para evitar que se resetee el micro si el periodo t es mayor que el tiempo de disparo del micro.
ESP.wdtFeed();
//vamos obteniendo en cada repetición del bucle el valor del tiempo y lo asignamos a loopMillis:
loopMillis = millis();
} while ((loopMillis - currentMillis) < t);
Serial.print("loopMillis ");
Serial.println(loopMillis);
Serial.print("currentMillis ");
Serial.println(currentMillis);
}
Puede surgir la pregunta de por qué no usar la función delay(). Como podéis ver, en el bucle do while podemos resetear el watchdog a cada iteración lo que nos permite comparar periodos de tiempo superiores al tiempo de disparo del watchdog. Esto no puede hacerse con la función delay().

