Hombre. Como te dije, el código no era literal, sino para darte una idea. Creo que así sí compilaría. Queda por ver si hace lo que quieres:
//SERVIDOR
#include <ESP8266WiFi.h>
const char WiFiClave[] = ""; //Sin clave
const char AP_Nombre[] = "ESP8266";
const int releAbajo = 2;
const int releArriba = 0;
enum {Arriba, Abajo} estadoPersiana=Arriba;
WiFiServer server(80);
void setup() {
Serial.begin(115200);
pinMode(releAbajo, OUTPUT);
pinMode(releArriba,OUTPUT);
WiFi.mode(WIFI_AP);
WiFi.softAP(AP_Nombre, WiFiClave);
server.begin();
}
void loop() {
WiFiClient client = server.available(); // ¿Hay un cliente conectado?
if (!client) { return;}
String req = client.readStringUntil('\r'); // Lee la primera linea de la petición del cliente
if (req.indexOf("/gpio/0") != -1) {
if (estadoPersiana==Arriba) {
digitalWrite(releAbajo, HIGH);
delay(20000);
digitalWrite(releAbajo, LOW);
estadoPersiana=Abajo;
}
}
else if (req.indexOf("/gpio/1") != -1) {
if (estadoPersiana==Abajo) {
digitalWrite(releArriba, HIGH);
delay(20000);
digitalWrite(releArriba, LOW);
estadoPersiana=Arriba;
}
}
client.flush();
}
No puedes suponer el estado de la persiana si quieres que el programa trabaje bien. O lo conoces de alguna manera y trabajas por tiempos como ahora, o bien necesitas unos sensores de final de carrera. En este caso, efectivamente, lo óptimo sería combinar tiempo y sensor de final de carrera. Para ello necesitarás millis.