ESP8266 - Problemas con conexión interrumpida

Hola buen dia,

Estoy configurando un ESP8266, funciona todo correctamente, se conecta, recibe la instrucción correctamente sin problema. El problema radica cuando dejo de usarlo por unos 15 minutos mas o menos y quiero volver a enviarle una instrucción, por alguna razón no funciona y queda como cargando así como colgado, por lo que no me permite enviar nada y cuando finalmente terminar de cargar, no hace nada (timeout)

Me podrías ayudar por favor para saber que es lo que me falta please?

#include <ESP8266WiFi.h>

const char* ssid = "ssid";
const char* password = "password";

String estatusliving = "Luces del Living se encuentran apagadas";
int valliving = 1;


// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);
  pinMode(2, OUTPUT); 

// Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {

  String mensaje = "";
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(100);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  //Serial.println(req);
  int longitud = req.indexOf("HTTP/1.1");
  String accion = req.substring(5,longitud-1);
  Serial.println(accion);
  client.flush();
 

  if (accion == "Living")
  {
      digitalWrite(2, valliving);
      if (valliving==1)
      {
        mensaje = "Luces del Living encendidas\n";
        estatusliving = "Luces del Living se encuentran encendidas";
        client.println(mensaje);
        valliving = 0;
      }
      else if (valliving==0)
      {
        mensaje = "Luces del Living apagadas\n";
        estatusliving = "Luces del Living se encuentran apagadas";
        client.println(mensaje);
        valliving = 1;
      }
  }
  else if (accion == "Estatus")
  {
      client.println(estatusliving);
  }
  else {
    mensaje = "Orden no se encuentra registrada\n";
      client.println(mensaje);
  }

  client.stop();
  client.flush();

  delay(10);
  Serial.println("Client disonnected");

}

Lo tienes conectado al monitor Serie para saber si se ha colgado o qué ocurre?

así es, el tema es que cuando se queda colgado no hace nada, no imprime nada mas que lo que muestra la imagen a continuación

la verdad he intentado de todo pero no encuentro el error por el cual se está quedando pegado.

De antemano muchas gracias por responder

Saludos cordiales.

Como esta alimentado el ESP?
Fuente : tensión, corriente.
Usas un regulador para los 3.3V, que modelo. Como esta conectado. Es un módulo nodemcu? faltan datos.
Tienes un capacitor 10 o mas uF entre VCC (3.3V) y GND?

Luego te paso una instrucción que habilita el modo DEBUG y da mucha mas información ademas de la que tu le pides que informe.

He cargado tu programa en un Nodemcu conectado por USB y funciona perfectamente, aún dejándolo sin actividad varias horas.

surbyte:
Como esta alimentado el ESP?
Fuente : tensión, corriente.
Usas un regulador para los 3.3V, que modelo. Como esta conectado. Es un módulo nodemcu? faltan datos.
Tienes un capacitor 10 o mas uF entre VCC (3.3V) y GND?

Luego te paso una instrucción que habilita el modo DEBUG y da mucha mas información ademas de la que tu le pides que informe.

Muchas gracias por responder.

Respondiendo a tus consultas, la alimentación la estoy realizando directamente desde la placa arduino. Positivo a salida de 3,3 de la placa y GND a GND de la placa arduino, TX y RX a sus correspondientes de la placa arduino, CH_PD a positivo 3,3 de la arduino en protoboard y GPIO1 a GND para activar el envío del código.

El ESP8266 que estoy utilizando es el siguiente

Adicionalmente compré otros 2 módulos, el cual teniendo la misma programación, ocurre el mismo problema.

En caso que estuviera equivocado en la conexión me podrías ayudar por favor?

Jopapa:
He cargado tu programa en un Nodemcu conectado por USB y funciona perfectamente, aún dejándolo sin actividad varias horas.

En parte si funcionó el mismo código en otra placa, me deja un tanto tranquilo que el problema no estaría en la programación, sino mas bien en la conexión.

De antemano muchas gracias por responder a ambos.

Saludos cordiales.

Respondiendo a tus consultas, la alimentación la estoy realizando directamente desde la placa arduino.

No has leido mucho al respecto, muchos tutoriales no lo mencionan y eso prueba la mala información que hay en internet pero otros SI.

El ESP01 consume casi 200mA al enviar y 150 al recibir si mal recuerdo.
La salida 3.3V solo entrega 60 mA. He ahi tu problema.

Debes usar un regulador LDO tipo AM1117 por ejemplo o un LM340-3.3V o tantos otros reguladores 3.3V.
Algo que reciba 5 y entregue 500mA sin problemas.

A perfecto, me acaba de llegar un Breadboard Power Supply Module para Arduino

Voy a hacer la prueba y comentaré como me va.

Muchas gracias a todos

Saludos cordiales.

Seguro que te irá bien con el.

ha funcionado perfecto, lo he dejado por mucho tiempo inactivo y funciona correctamente al volver a enviar la señal.

Aprovechando, tengo una consulta de respuesta rápida, se puede enviar mensajes por el puerto GPO1 o GPIO0 que no sea un "HIGH" o "LOW"? como para (por ejemplo) conectar el módulo wifi a un arduino y dependiendo del mensaje que le envíe el módulo, el arduino enviar acciones por sus puertos.

De antemano muchas gracias

Saludos cordiales.

Una simple búsqueda te hubiera evita la pregunta.

Esos son los pines del ESP8266-01, dos dicen TX y RX que son los que debes usar para comunicarte con el Arduino.
Hay inumerables tutoriales donde se comunican uno con otro.
Este foro esta lleno de ejemplos, y Documentación tmb.

Muchas gracias

Buscaré si en el foro si encuentro los tutoriales indicados

De antemano muchas gracias

Saludos cordiales.

No es mas que comunicar dos arduinos, no busques cosas raras. Dos arduinos se comunican por Puerto Serie. Uno envia Serial.print("ALGO") o variable y el otro recibe con if(Serial.avialable() > 0) etc etc

Eso esta en el IDE de Arduino.

Ve a Documentación => Indice de Tutoriales => Puerto Serie. Tienes mucho para leer ahi.

Muchas gracias, revisaré lo que me indicas.

Por otro lado, sigo con mis pruebas al módulo ESP 8266, la conexión ha estado bastante estable pero de igual forma se me está quedando pegado, no tanto como antes (cada 5 minutos mas o menos). Entre el 1 de diciembre y ayer en la noche, se ha quedado pegado 1 vez al día aprox. (4 veces). La conexión a la placa Breadboard Power Supply Module la hice directamente, necesitaré adicionarle algo más? será conveniente que deba pegarle a la URL cada 5 minutos pidiendo un estatus como para mantener siempre viva la conexión?

De antemano muchas gracias

Saludos cordiales.