Hola! Configure el nodemcu como web server modo Station (creo que se dice así)
El problema es que deja de funcionar el web server, no hay algo específico puede dejar de funcionar a los minutos, horas desde que fue encendido.
El codigo consiste en la creación de una conexión WiFi, le modifique la ip para alojar el servidor en la ip 200.200.200.1 y de allí mandar datos.
Luego está la parte web que es común a todas, esperan un cliente web y muestran de acuerdo la petición.
El problema es que como dije deja de funcionar y no me muestra nada en la página web, queda en blanco como cargando y ni error me tira, debo reiniciar el sistema para que funcione
Lo creé con el proposito de controlar una cortina por el teléfono (usé app inventor y pongo que al entrar se conecte a esa red y cargue el web server con 3 botones, subir, parar, bajar, funciona apenas arranca y tal vez durante horas, pero llega un momento que deja de responder)
Si me pueden ayudar lo agradezco, si sirve luego subo el código y quisiera recomendación de algo estable para el control de la cortina si no fuera viable como está ahora
Gracias!
#include <ESP8266WiFi.h> //Incluye la librería ESP8266WiFi
const char ssid[] = "Araña"; //Definimos la SSDI de nuestro servidor WiFi -nombre de red-
const char password[] = "helado123"; //Definimos la contraseña de nuestro servidor
WiFiServer server(80); //Definimos el puerto de comunicaciones
int bajada = LOW;
int subida = LOW;//Definimos la variable que va a recoger el estado del LED
void setup() {
Serial.begin(115200);
pinMode(D2, OUTPUT); //Inicializamos el GPIO2 como salida
digitalWrite(D2, LOW); //Dejamos inicialmente el GPIO2 apagado
pinMode(D1, OUTPUT); //Inicializamos el GPIO2 como salida
digitalWrite(D1, LOW); //Dejamos inicialmente el GPIO2 apagado
server.begin(); //inicializamos el servidor
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password); //Red con clave, en el canal 1 y visible
//WiFi.softAP(ssid, password,3,1); //Red con clave, en el canal 3 y visible
//WiFi.softAP(ssid); //Red abierta
Serial.println();
Serial.print("Direccion IP Access Point - por defecto: "); //Imprime la dirección IP
Serial.println(WiFi.softAPIP());
Serial.print("Direccion MAC Access Point: "); //Imprime la dirección MAC
Serial.println(WiFi.softAPmacAddress());
IPAddress local_ip(200, 200, 200, 1); //Modifica la dirección IP
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
WiFi.softAPConfig(local_ip, gateway, subnet);
Serial.println();
Serial.print("Access Point - Nueva direccion IP: ");
Serial.println(WiFi.softAPIP());
}
void loop()
{
// Comprueba si el cliente ha conectado
WiFiClient client = server.available();
if (!client) {
return;
}
// Espera hasta que el cliente envía alguna petición
Serial.println("nuevo cliente");
while(!client.available()){
delay(1);
}
// Imprime el número de clientes conectados
Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum());
// Lee la petición;
String peticion = client.readStringUntil('H');
Serial.println(peticion);
client.flush();
String data = peticion; // habia una peticion por parte de favicon.ico que me molestaba, con esto lo elimine
byte desde = data.indexOf('/'); //porque repetia todo lo que hacia y por ejemplo me apagaba y prendia 2 veces las cosas en 1 seg
desde++; //
byte hasta = data.indexOf('o'); //
String loderojo = data.substring(desde, hasta); //
Serial.println("cliente:" + data.substring(desde, hasta));
String popa="favic";
if (data.substring(desde, hasta) == popa){
goto fin;
}else {
// Comprueba la petición
if (peticion.indexOf('/2') != -1) {
subida = HIGH;
bajada =LOW;
}
if (peticion.indexOf('/1') != -1){
subida = LOW;
bajada = LOW;
}
if (peticion.indexOf('/0') != -1){
subida = LOW;
bajada = HIGH;
}
//Enciende o apaga el LED en función de la petición
if (subida == HIGH){
digitalWrite (D1, LOW);
digitalWrite (D2, LOW);
delay (750);
digitalWrite (D2, HIGH);
digitalWrite (D1, LOW);
}
if (bajada == HIGH){
digitalWrite (D1, LOW);
digitalWrite (D2, LOW);
delay (750);
digitalWrite (D1, HIGH);
digitalWrite (D2, LOW);
}
if (bajada == LOW && subida == LOW){
digitalWrite (D1, LOW);
digitalWrite (D2, LOW);
}
Serial.println ("estados:");
Serial.print("subida");
Serial.println(subida);
Serial.print("bajada");
Serial.println(bajada);
// Envía la página HTML de respuesta al cliente
client.println("HTTP/1.1 200 OK");
client.println(""); //No olvidar esta línea de separación
client.println("<!DOCTYPE HTML>");
client.println("<meta charset='UTF-8'>");
client.println("<html>");
//Imprime el estado del led
client.print("<h1 style='color:blue;' align='center'> Buen día doctora! </h1>");
//Se crean botones para modificar el estado del LED
client.println("<button type='button'align='center' onClick=location.href='/2'> SUBIR </button>");
client.println("");
client.println("<button type='button'align='center' onClick=location.href='/1'> PARAR </button>");
client.println("");
client.println("<button type='button'align='center' onClick=location.href='/0'> BAJAR </button>
");
client.println("</html>");
}
fin:
delay(1);
Serial.println("Petición finalizada"); // Se finaliza la petición al cliente. Se inicaliza la espera de una nueva petición.
//Desconexión de los clientes
//WiFi.softAPdisconnect();
}