ESP8266 Arduino e sensore sonoff 4 ch

Salve a tutti,

ho scritto un piccolissimo firmware da installare su di una scheda SONOFF 4CH Pro. La parte Wifi funziona senza problemi. Quello che volevo fare era programmare anche il funzionamento degli switch fisici.

Ho scritto un pò di codice, però volevo capire se era possibile ottimizzarlo. MI potete dare una mano ?

grazie mille:

// Load Wi-Fi library
#include <ESP8266WiFi.h>
#include <Wire.h> 
#define ESP8266_LED 3


const char* ssid     = "ssd";
const char* password = "m1234567";

const int relayD1 = 12;
const int relayD2 = 4;
const int relayD3 = 5;
const int relayD4 = 15;

//input switch
const int switch1 = 10;


//led segnale wifi
int gpio_13_led = 13;

// Set web server port number to 80
WiFiServer server(80);

// Variable to store the HTTP request
String header;

int conta =0;

// Assign output variables to GPIO pins



//STATO RELE
int SPENTO = 0;
int ACCESO = 1;

void setup() {
  //il pin 6,7,11 non va toccato
 


  Serial.begin(115200);
  pinMode(gpio_13_led, OUTPUT);
  delay(200);  
  digitalWrite(gpio_13_led, ACCESO);
  delay(2000);  
  
  ConnectWiFi();
  
  delay(2000);  
  
  pinMode(relayD1, OUTPUT);
  pinMode(relayD2, OUTPUT);
  pinMode(relayD3, OUTPUT);  
  pinMode(relayD4, OUTPUT);
  
  pinMode(switch1, INPUT_PULL);

  
  digitalWrite(relayD1, SPENTO);
  delay(100);
  digitalWrite(relayD2, SPENTO);
  delay(100);
  digitalWrite(relayD3, SPENTO);
  delay(100);
  digitalWrite(relayD4, SPENTO);
  delay(100);

  Serial.println("Setup PIN terminato");
  delay(200);

  digitalWrite(gpio_13_led, SPENTO);
  delay(200);  
  delay(1000);
 
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop(){
  delay(100);
  
  if(digitalRead(switch1) == LOW){
	//START RELE 1
  }else{
	//......
  }
  
  if (WiFi.status() != WL_CONNECTED){
    Serial.println(WiFi.status());
     Serial.println("riconnessione in corso");
      digitalWrite(gpio_13_led, ACCESO);
      delay(200);  
      ConnectWiFi();
      delay(1000);
  }
   digitalWrite(gpio_13_led, SPENTO);
  delay(200);  
  WiFiClient client = server.available();   // Listen for incoming clients
 if (client) {  
    sendPageHtml(client);// If a new client connects,
   // Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {

            closeConnection(client);
            
			//TO DO
           
            
            
            // Break out of the while loop
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }
    // Clear the header variable
    header = "";
    // Close the connection
    client.stop();
   // Serial.println("Client disconnected.");
   // Serial.println("");
  }
}


bool ConnectWiFi() {
  WiFi.setSleepMode(WIFI_NONE_SLEEP);
  WiFi.begin(ssid, password);
  delay(10000);
  
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println(WiFi.status());
    Serial.println(WL_CONNECTED);
    WiFi.disconnect();
    delay(5000);
    WiFi.begin(ssid, password);
    WiFi.mode(WIFI_STA);
    
   // WiFi.config(ip, gateway, subnet);
    delay(10000);
  }
  Serial.println("");
  Serial.print ("WiFi connected ");
  return true;
}

}

Adesso il sistema "diciamo" che funziona, ma volevo capire se vi fosse un metodo più elegante e sopratutto più efficente di leggere lo stato dei pulsanti. Magari ci potrebbero essere delle situazioni per cui, viene premuto il pulsante, ma il valore non viene letto.