Sugiero que mires este hilo en como se resolvió esa parte
Esta es la versión donde mezclo tu código y el que te indiqué.
Finalmente era como te dije. No puedes esperar a que las cosas se hagan dentro de las peticiones http
Usa eso para dar órdenes a tu sistema y luego que éste procese lo que deba
Esta es la versión mezclada
/*
* This sketch demonstrates how to set up a simple HTTP-like server.
* The server will set a GPIO pin depending on the request
* http://server_ip/gpio/0 will set the GPIO2 low,
* http://server_ip/gpio/1 will set the GPIO2 high
* server_ip is the IP address of the ESP8266 module, will be
* printed to Serial when the module is connected.
*/
#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>
const char* ssid = "Surbyte";
const char* password = "ricardohns493";
IPAddress ip(192,168,1,227);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
const int rele1 = 13;
const int rele2 = 12;
int val, val1 = 0, val2 = 0;
int periodo = 40000;
byte temp = 0;
unsigned long tiempoAnterior = 0;
int periodo2 = 40000;
byte temp2 = 0;
unsigned long tiempoAnterior2, start;
String req;
byte persiana = 0;
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(1088);
void setup() {
Serial.begin(115200);
delay(10);
// prepare GPIO2
pinMode(2, OUTPUT);
digitalWrite(2, 0);
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
digitalWrite(rele1, HIGH);
digitalWrite(rele2, HIGH);
pinMode(4,INPUT);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
WiFi.config(ip, gateway, subnet);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
ArduinoOTA.setPassword((const char *)"1234");
Serial.println();
Serial.println();
Serial.print("Conectado a ");
Serial.println(ssid);
Serial.print("IP:");
Serial.println(ip);
Serial.printf("MAC Address = %s\n", WiFi.softAPmacAddress().c_str());
Serial.print("Puerto: 1088");
Serial.println();
Serial.print("Ordenes: arriba/abajo");
Serial.println();
Serial.print("Ordenes: arribatodo/abajotodo");
Serial.println();
ArduinoOTA.begin();
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
WiFiClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (req.length() < 100) {
//store characters to string
req += c;
Serial.print(c);
}
//if HTTP request has ended
if (c == '\n') {
//now output HTML data header
if (req.indexOf('?') >=0) { //don't send new page
client.println("HTTP/1.1 204 192.168.1.127");
client.println();
client.println();
}
else {
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n";
s += "<html><p>GPIO is now :";
s += (val)?"high":"low";
s += "</p>";
s += "<p>Rele 1 :";
s += digitalRead(rele1)?"OFF":"ON";
s += "</p>";
s += "<p>Rele 2 :";
s += digitalRead(rele2)?"OFF":"ON";
s += "</p></html>";
// Send the response to the client
client.print(s);
//stopping client
client.stop();
Serial.println("Client disonnected");
// Match the request
if (req.indexOf("/arribaon") != -1)
persiana = 1;
if (req.indexOf("/arribaoff") != -1)
persiana = 2;
if (req.indexOf("/abajoon") != -1)
persiana = 3;
if (req.indexOf("/abajooff") != -1)
persiana = 4;
if (req.indexOf("/abajotodo") != -1)
persiana = 5;
if (req.indexOf("/tiempo") != -1)
persiana = 6;
if (req.indexOf("/arribatodo") != -1)
persiana = 7;
req = "";
}
} // if (c == '\n') {
} // if (client.available()) {
} // while
} // The client will actually be disconnected
// Match the request
int val1 = digitalRead(rele1);
int val2 = digitalRead(rele2);
switch(persiana) {
case 1: // arribaon
digitalWrite(rele1, LOW);
digitalWrite(rele2,HIGH);
Presentar("Subiendo");
temp = 0;
temp2 = 0;
break;
case 2: // arribaoff
digitalWrite(rele1, HIGH);
Presentar("Arriba Stop");
break;
case 3: // abajoon
digitalWrite(rele2, LOW);
digitalWrite(rele1,HIGH);
Presentar("Bajando");
temp = 0;
temp2 = 0;
break;
case 4: // abajooff
digitalWrite(rele2, HIGH);
Presentar("Abajo Stop");
break;
case 5: // abajotodo
tiempoAnterior = millis();
temp = 1;
digitalWrite(rele2,LOW);
digitalWrite(rele1,HIGH);
Presentar("Bajando persiana");
break;
case 6: // tiempo
if (millis()-start > 500UL) {
Serial.println(millis());
Serial.println(tiempoAnterior);
start = millis();
}
break;
case 7: // arribatodo
tiempoAnterior2 = millis();
temp2 = 1;
digitalWrite(rele1,LOW);
digitalWrite(rele2,HIGH);
Presentar("Subiendo persiana");
break;
}
if ((millis()>tiempoAnterior+periodo) && temp==1){
digitalWrite(rele2,HIGH);
temp = 0;
Presentar("Persiana completamente bajada");
}
if ((millis()>tiempoAnterior2+periodo2) && temp2==1) {
digitalWrite(rele1,HIGH);
temp2 = 0;
Presentar("Persiana completamente subida");
}
// Set GPIO2 according to the request
//val = val1;
//digitalWrite(2, val1);
}
void Presentar(const char* str) {
static byte persianaAnt;
if (persiana != persianaAnt) {
Serial.println(str);
persianaAnt = persiana;
}
}
Puede necesitar ajustes pero menores.