He podido generar un server con el que activo temporalmente un relay, pero el problema que tengo es que al cerrar el navegador el times se congela y no corta cuando es debido.
Ya he intentado poniendo el código que corre el timbre por fuera de la configuración del server pero por lo visto lo he colocado mal porque sigue sin funcionar cuando cierro el navegador.
#include <ESP8266WiFi.h>
const char* ssid = "*****";
const char* password = "*****";
IPAddress ip(192, 168, 0, 111);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
String value = "LOW";
int x = 0;
WiFiServer server(80);
unsigned long DELAY_TIME = 5000; // 10 sec
unsigned long delayStart = 0; // the time the delay started
bool delayRunning = false; // true if still waiting for delay to finish
int ledState = LOW;
int ledPin = 13; //Lo conectamos a D7, que es el gpio13
void setup() {
Serial.begin(115200);
delay(10);
WiFi.begin(ssid, password);
WiFi.config(ip, gateway, subnet);
server.begin(); pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
delayRunning = true;
}
void loop() {
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.println("new client");
while (!client.available()) {
delay(1);
}
String request = client.readStringUntil('\r');
client.flush();
//Variable para cuando se activan los temporizadores
if (request.indexOf("/LED=ON") != -1 ) {
value = "HIGH";
if (delayRunning && ((millis() - delayStart) >= DELAY_TIME)) {
delayRunning = false; // finished delay -- single shot, once only
ledState = LOW; // turn led off
value = "LOW";
}
}
//Pantalla para cuando se activan sin tiempo
if (request.indexOf("/LED=TOTALON") != -1) {
value = "HIGHFULL"; ledState = HIGH;
}
//Opcion de apagado
if (request.indexOf("/LED=OFF") != -1) {
value = "LOW"; ledState = LOW;
delayStart = 0;
}
//Opcion de TEmporizador 15 minutos
if (request.indexOf("/LED=ESPERA15") != -1) {
value = "ESPERA15";
unsigned long DELAY_TIME = 5000;
delayStart = millis();
delayRunning = true; ledState = HIGH;
}
//Opcion de TEmporizador 30 minutos
if (request.indexOf("/LED=ESPERA30") != -1) {
value = "ESPERA30";
x = 60;
DELAY_TIME = 60000;
delayStart = millis();
delayRunning = true; ledState = HIGH;
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head><body>");
client.println("<h3>Control equipos - <a href=\"/\">Refresh</a></h3>");
client.println("<html>");
client.print("El led esta ahora: ");
// Pantalla para apagar Temporizadores
if (value == "HIGH") {
x = x - 2;
client.print("Encendido temporalmente");
client.println("
");
client.println(x); client.print(" segundos faltantes");
client.println("
");
client.print("<meta http-equiv=\"refresh\" content=\"2\">");
client.println("
");
client.println("<a href=\"/LED=OFF\"\"><button>Apagar</button></a>
");
}
else
// Pantalla para encender
if (value == "LOW") {
client.print("Apagado");
client.println("
");
client.println("<a href=\"/LED=ESPERA15\"\"><button>Encender 15 minutos</button></a>");
client.println("
");
client.println("<a href=\"/LED=ESPERA30\"\"><button>Encender 30 minutos</button></a>");
client.println("
");
client.println("<a href=\"/LED=TOTALON\"\"><button>Encender Indetermidado</button></a>");
}
else
// Pantalla 15 minutos
if (value == "ESPERA15") {
client.print("Espera");
client.println("
");
client.println("<a href=\"/LED=ON\"\"><button>Activar Temporizador</button></a>"); client.println("
");
client.print("<meta http-equiv=\"refresh\" content=\"2\">");
client.println("<a href=\"/LED=OFF\"\"><button>Apagar</button></a>");
}
else
// Pantalla 30 minutos
if (value == "ESPERA30") {
client.print("Espera");
client.println("
");
client.println("<a href=\"/LED=ON\"\"><button>Activar Temporizador</button></a>"); client.println("
");
client.println("<a href=\"/LED=OFF\"\"><button>Apagar</button></a>"); client.print("<meta http-equiv=\"refresh\" content=\"2\">");
}
else
// Pantalla para apagar Temporizadores
if (value == "HIGHFULL") {
client.print("<meta http-equiv=\"refresh\" content=\"2\">"); client.print("Encendido indetermidamente");
client.println("
");
client.println("<a href=\"/LED=OFF\"\"><button>Apagar</button></a>
");
}
client.println("</html>");
delay(1); digitalWrite(ledPin, ledState);
}
RELEETIMERSUBIR.ino (4.5 KB)