Metainformationen zur Seite
  •  

ESP Wifi Relais

#include <ESP8266WiFi.h>
 
const char* ssid     = "";
const char* password = "";
const char* HOSTNAME = "";
 
//Webserver auf Port 80
WiFiServer server(80);
 
// Eine Variable um den HTTP Request zu speichern
String header;
 
// Die verwendeted GPIO Pins
const int relayPin = D1; // The Shield uses pin D1 for the relay // Bei mini pro No 5
const int aufPin = D3; // Reed Tor auf // Bei mini pro No 0
const int zuPin = D4; // Reed Tor zu   // Bei mini pro No 2
 
void setup() {
  Serial.begin(115200);
 
  // Die definierten Pins und setzen
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, LOW);
 
  pinMode(aufPin, INPUT);                   // definiere Pin als Eingang
  digitalWrite(aufPin, HIGH);               // aktiviert den Pull- Up- Widerstand 
  pinMode(zuPin, INPUT);                   // definiere Pin als Eingang
  digitalWrite(zuPin, HIGH);               // aktiviert den Pull- Up- Widerstand 
 
  // Per WLAN mit dem Netzwerk verbinden
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.mode(WIFI_STA);  //Wichtig Accesspoint deaktivieren
  WiFi.hostname(HOSTNAME);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Die IP vom Webserver auf dem seriellen Monitor ausgeben
  Serial.println("");
  Serial.println("WLAN verbunden.");
  Serial.println("IP Adresse: ");
  Serial.println(WiFi.localIP());
  server.begin();
}
 
void loop(){
  WiFiClient client = server.available();   // Hört auf Anfragen von Clients
 
  if (client) {                             // Falls sich ein neuer Client verbindet,
    Serial.println("Neuer Client.");          // Ausgabe auf den seriellen Monitor
    String currentLine = "";                // erstelle einen String mit den eingehenden Daten vom Client
    while (client.connected()) {            // wiederholen so lange der Client verbunden ist
      if (client.available()) {             // Falls ein Byte zum lesen da ist,
        char c = client.read();             // lese das Byte, und dann
        Serial.write(c);                    // gebe es auf dem seriellen Monitor aus
        header += c;
        if (c == '\n') {                    // wenn das Byte eine Neue-Zeile Char ist
          // wenn die aktuelle Zeile leer ist, kamen 2 in folge.
          // dies ist das Ende der HTTP-Anfrage vom Client, also senden wir eine Antwort:
          if (currentLine.length() == 0) {
            // HTTP-Header fangen immer mit einem Response-Code an (z.B. HTTP/1.1 200 OK)
            // gefolgt vom Content-Type damit der Client weiss was folgt, gefolgt von einer Leerzeile:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
 
            //Taster
            if (header.indexOf("GET /d1/push") >= 0) {
              Serial.println("Taster gedrückt");
              digitalWrite(relayPin, HIGH);
              delay(2000)
              digitalWrite(relayPin, LOW);                            
 
 
            //HTML Seite angezeigen:
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // Es folgen der CSS-Code um die Ein/Aus Buttons zu gestalten
            // Hier können Sie die Hintergrundfarge (background-color) und Schriftgröße (font-size) anpassen
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #333344; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".buttonAuf {background-color: #00FF00;}");
            client.println(".buttonZu {background-color: #FF0000;}")
            client.println(".buttonNone {background-color: #0000FF;}</style></head>")
 
 
 
            // Webseiten-Überschrift
            client.println("<body><h1>Garagetor Web-Server</h1>");
 
            //Button erstellen und link zum aufrufen erstellen
            client.println("<p><a href=\"/d1/push\"><button class=\"button\">PUSH</button></a></p>");  
 
            //Zustand anzeigen
            if ((digitalRead(aufPin) == HIGH) && (digitalRead(zuPin) == LOW))
               client.println("<p><button class=\"buttonAuf\">AUF</button></p>");
            if ((digitalRead(aufPin) == LOW) && (digitalRead(zuPin) == HIGH))
               client.println("<p><button class=\"buttonZu\">ZU</button></p>");
            if ((digitalRead(aufPin) == HIGH) && (digitalRead(zuPin) == HIGH))
               client.println("<p><button class=\"buttonNone\">None</button></p>");
            if ((digitalRead(aufPin) == LOW) && (digitalRead(zuPin) == LOW))
               client.println("<p><button class=\"buttonNone\">None</button></p>");
 
            //HTML Ende
            client.println("</body></html>");
 
            // Die HTTP-Antwort wird mit einer Leerzeile beendet
            client.println();
            // und wir verlassen mit einem break die Schleife
            break;
          } else { // falls eine neue Zeile kommt, lösche die aktuelle Zeile
            currentLine = "";
          }
        } else if (c != '\r') {  // wenn etwas kommt was kein Zeilenumbruch ist,
          currentLine += c;      // füge es am Ende von currentLine an
        }
      }
    }
    // Die Header-Variable für den nächsten Durchlauf löschen
    header = "";
    // Die Verbindung schließen
    client.stop();
    Serial.println("Client getrennt.");
    Serial.println("");
  }
}