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");
}
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.
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.
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.
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.
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.
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.
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?