------
mancas
------

WLanRelais

In meinem WLan möchte ich ein Gerät nach Eingabe eines Passwortes schalten.

Der ESP32

Der ESP32 kann mit dem AsyncWebserver eine Internetseite aufbauen.
Er bekommt eine Relaisstufe und schaltet nach eingabe des korrekten Passwortes.

WLanRelaisAufbau.jpg

Von den beiden Relais wird mit diesem Code nur eines genutzt.

/*********
  Verify a code on a website and then open a relay for 5 sec.  
  mancas @ lug-saar.de
*********/

#include <Arduino.h>
#ifdef ESP32
  #include <WiFi.h>
  #include <AsyncTCP.h>
#else
  #include <ESP8266WiFi.h>
  #include <ESPAsyncTCP.h>
#endif
#include <ESPAsyncWebServer.h>


// CREDENTIALS
const char* ssid =     "xxxxx"; //Replace with your data
const char* password = "xxxxx";
String CodeToVerify =  "xxxxx";

//bool ledStat = 0;
const int ledPin = 16;

const char* PARAM_INPUT_1 = "input1";
String globalinputMessage;  // Website input

AsyncWebServer server(80);

// HTML web page to handle input
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html><head>
  <title>22x22.org</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  </head><body>
  <br>
  <br><br>
   <form action="/get">
  input1: <input type="text" name="input1">
  <input type="submit" value="Submit">
</form><br>
</body></html>)rawliteral";

void notFound(AsyncWebServerRequest *request) {
  request->send(404, "text/plain", "Not found");
}


void setup() {
  Serial.begin(115200);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH); //LOW
Serial.println("ledPin is HIGH");
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  
  if (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("WiFi Failed!");
    return;
  }
  Serial.println();
  Serial.print("IPv4 Address: ");
  Serial.println(WiFi.localIP());
  
 Serial.println("Starte Webserver");

  // Send web page with input fields to client
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html);
  });
  
  // Send a GET request to <ESP_IP>/get?input1=<inputMessage>
  server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
   String inputMessage;
   String inputParam;
   
    // GET input1 value on <ESP_IP>/get?input1=<inputMessage>
    
    if (request->hasParam(PARAM_INPUT_1)) {
      inputMessage = request->getParam(PARAM_INPUT_1)->value();
      inputParam = PARAM_INPUT_1;
      globalinputMessage = inputMessage; //gebe weiter an globale Variable
    }
    
  
    else {
      inputMessage = "No message sent";
      inputParam = "none";
    }
    
    Serial.println(inputMessage);
    request->send(200, "text/html", "<br><a href=\"/\">You got it </a>"); 
    
    }

);

  server.onNotFound(notFound);
  server.begin();

}

void loop() {

//compare with your code
if (globalinputMessage == CodeToVerify) {
  digitalWrite(ledPin, LOW); //HIGH
  Serial.print(PARAM_INPUT_1);
  Serial.println("  Taster für 7 sec eingeschaltet  ");
  delay(7000);
  digitalWrite(ledPin, HIGH); //LOW
  Serial.print(PARAM_INPUT_1);
  Serial.println("  Taster ist wieder ausgeschaltet  ");
  globalinputMessage = "0";
  }

}

Alles in ein kleines 3D-gedrucktes Wandgehäuse eingebaut.
WLanRelaisEinbau.jpg