/*********
  Rui Santos
  Complete project details at http://randomnerdtutorials.com  
*********/

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

MDNSResponder mdns;

// Replace with your network credentials
const char* ssid = "Beispiel";
const char* password = "Beisptel";

ESP8266WebServer server(80);

String webPage = "";

int gpio0_pin = 0;
int gpio2_pin = 2;
int gpio1_pin = 1;
int gpio3_pin = 3;

void setup(void){
  webPage += "<h1>  W-Lan Schalter</h1><p> Kanal #1 <a href=\"socket1On\"><button>EIN</button></a>&nbsp;<a href=\"socket1Off\"><button>AUS</button></a></p>";
  webPage += "<p> Kanal #2 <a href=\"socket2On\"><button>EIN</button></a>&nbsp;<a href=\"socket2Off\"><button>AUS</button></a></p>";
  webPage += "<p> Kanal #3 <a href=\"socket3On\"><button>EIN</button></a>&nbsp;<a href=\"socket3Off\"><button>AUS</button></a></p>";
  webPage += "<p> Kanal #4 <a href=\"socket4On\"><button>EIN</button></a>&nbsp;<a href=\"socket4Off\"><button>AUS</button></a></p>";
  
  // preparing GPIOs
  pinMode(gpio0_pin, OUTPUT);
  digitalWrite(gpio0_pin, LOW);
  pinMode(gpio2_pin, OUTPUT);
  digitalWrite(gpio2_pin, LOW);
  pinMode(gpio1_pin, OUTPUT);
  digitalWrite(gpio1_pin, LOW);
  pinMode(gpio3_pin, OUTPUT);
  digitalWrite(gpio3_pin, LOW);
  
  delay(1000);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  
  if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  }
  
  server.on("/", [](){
    server.send(200, "text/html", webPage);
  });
  
  server.on("/socket1On", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio0_pin, HIGH);
    delay(1000);
  });
  server.on("/socket1Off", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio0_pin, LOW);
    delay(1000); 
  });
  server.on("/socket2On", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio2_pin, HIGH);
    delay(1000);
  });
  server.on("/socket2Off", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio2_pin, LOW);
    delay(1000); 
  });
  server.on("/socket3On", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio1_pin, HIGH);
    delay(1000);
  });
  server.on("/socket3Off", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio3_pin, LOW);
    delay(1000); 
  });
  server.on("/socket4On", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio3_pin, HIGH);
    delay(1000);
  });
  server.on("/socket4Off", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio2_pin, LOW);
    delay(1000); 
  });
  server.begin();
  Serial.println("HTTP server started");
}
 
void loop(void){
  server.handleClient();
}