Buenos días, estoy usando una ESP8266 NodeMCU.
Mi código recibe un mensaje de un celular conectado al Wifi de las ESP8266. Está lee un infrarrojo y genera una respuesta que luego devuelve al celular.
Tengo el problema que a veces genera la respuesta y la envía sin problemas y otras veces algo falla y se reinicia la ESP.
El código de error que mencionas es un reset del watchdog por seguramente usar loops largos o que no le devuelven el control al loop principal.
Tal vez sea este
ya que se queda esperando 274 iteracciones y depende de recibirlas, si no las recibe es como que el ESP8266 dice "Eyyy estoy colgado, reseteo para recuperar el control!!"
Tienes que hacer esos while y do while mas veloces
Si, era un problema con el WatchDog.
Lo solucione poniendo esto en el Setup()
ESP.wdtDisable();
ESP.wdtEnable(WDTO_8S);
y dándole mas tiempo en el bucle con esto
ESP.wdtFeed();
Gracias por las respuestas.
De igual modo cuando ocurra algo similar, usa millis() para metir el tiempo que un loop o una rutina demora en ejecutarse.
Mirando lo que has puesto 8 segundos me parece una barbaridad de tiempo y solo justifica lo que te escribí antes, es decir, tu rutina Serial demora demasiado, tiene que ser más veloz y devolver el control al loop.
Ya leo que lo has arreglado pero te paso unas recomendaciones y dudas.
void loop() {
// Check of client has connected
WiFiClient client = server.available();
if(!client) {
return;
}
Si te fijas, si no se conecta nadie se queda haciendo return y return sin disparar el keepalive del watchdog.
Por otro lado tienes que lees la petición web hasta que te llega ¿un "$"?
lo normal creo que sería String request = client.readStringUntil('\n');
Y aqui como te dijo surbyte:
while(Serial.available() <= 0){}
Se puede quedar en loop infinito y reset por watchdog. Usa mills y si pasan de X segundos (por ejemplo 2) y que retorne de la función devolviendo "" (cadena vacía).
Tampoco inicializas la variable "resp" dentro del loop por lo que si te diera un error LeerIR() te devolvería la última respuesta recibida del IR. Aunque esto no se si es adrede.