diff --git a/Steuerung_Truhen.ino b/Steuerung_Truhen.ino index 4177c77..7e861f2 100644 --- a/Steuerung_Truhen.ino +++ b/Steuerung_Truhen.ino @@ -6,6 +6,7 @@ LiquidCrystal_I2C lcd(0x3F,16,2); //0x3F = Adresse des Displays #include "Truhe.h" #include "Settings.h" +#include "Webserver.h" static unsigned long last_lcd_time = 0; static unsigned long last_mess_time = 0; @@ -35,6 +36,7 @@ void setup() { truhen[i].setup(); } wdt_enable(WDTO_4S); // Watchdog auf 4 s stellen + WifiSetup(); delay(3000); Serial.println("Setup fi"); } @@ -102,5 +104,6 @@ void loop() { } } } + server.handleClient(); wdt_reset(); } diff --git a/Webserver.h b/Webserver.h new file mode 100644 index 0000000..18ae631 --- /dev/null +++ b/Webserver.h @@ -0,0 +1,185 @@ +// Load Wi-Fi library +#include +#include +#include +#include +Preferences preferences; +ESP8266WebServer server(80); +ESP8266HTTPUpdateServer httpUpdater; +String header = " \n" + "\n" + "Truhensteuerung\n" + "\n" + "\n" + "\n" + "

Truhensteuerung Web Server

\n"; +String ssid = "REPLACE_WITH_YOUR_SSID"; +String password = "REPLACE_WITH_YOUR_PASSWORD"; +unsigned long currentTime = millis(); +unsigned long previousTime= 0; +//const long timeoutTime= 2000; + +void WifiConnect(String _ssid, String _password){ + // Connect to Wi-Fi network with SSID and password + Serial.print("Connecting to "); + Serial.println(_ssid); + WiFi.begin(_ssid, _password); + if(WiFi.waitForConnectResult() == WL_CONNECTED) + { + Serial.println(""); + Serial.println("WiFi connected."); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + } + else + { + Serial.println("WiFi Connection failed! Restarting in SoftAP mode instead"); + WiFi.mode(WIFI_AP); + WiFi.softAP("Truhensteuerung", "12345678"); + Serial.print("AP IP address: "); + Serial.println(WiFi.softAPIP()); + } + // Print local IP address and start web server +} + +void handleWifiSetup(){ + String ptr = header; +// ptr += "URI: "; +// ptr += server.uri(); +// ptr += "
\nMethod: "; +// ptr += (server.method() == HTTP_GET) ? "GET" : "POST"; +// ptr += "
\nArguments: "; +// ptr += server.args(); +// ptr += "
\n"; + for (uint8_t i = 0; i < server.args(); i++) { ptr += " " + server.argName(i) + ": " + server.arg(i) + "
\n"; } + if(server.method() == HTTP_GET){ + int n = WiFi.scanNetworks(false, true); + String ssid; + uint8_t encryptionType; + int32_t RSSI; + uint8_t* BSSID; + int32_t channel; + bool isHidden; + ptr += "Home"; + ptr += "
"; + ptr +="\n\n"; + for (int i = 0; i < n; i++) + { + WiFi.getNetworkInfo(i, ssid, encryptionType, RSSI, BSSID, channel, isHidden); + ptr +="\n"; + } + + ptr += "
IDSSIDChannelRSSI
"+String(i + 1)+""+String(ssid.c_str())+""+String(channel)+""+String(RSSI)+"dBm"+String(encryptionType == ENC_TYPE_NONE ? "open" : "")+""+String(isHidden ? "hidden" : "")+"
\n"; + ptr += ""; + ptr += ""; + ptr += "
"; + }else{ + ptr += "

\n"; + if(server.args() != 4){ + ptr += "Missing Arguments
\n"; + ptr += "zurück\n"; + }else{ + String ssid; + String password; + for (uint8_t i = 0; i < server.args(); i++) { + if(server.argName(i) == "ssid"){ + ssid = server.arg(i); + } + if(server.argName(i) == "password"){ + password = server.arg(i); + } + } + ptr += "Connecting to "+ssid+"
\n"; + Serial.println("Connecting to "+ssid+", "+password+""); + WiFi.begin(ssid, password); + if(WiFi.waitForConnectResult() == WL_CONNECTED) + { + Serial.println(""); + Serial.println("WiFi connected."); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + preferences.begin("my-app", false); + preferences.putString("ssid", ssid); + preferences.putString("password", password); + preferences.end(); + ptr += "WiFi connected.
"; +// ptr += "IP address: "; +// ptr += WiFi.localIP(); + ptr += "
\n"; + } + else + { + Serial.println("WiFi Connection failed! Restarting in SoftAP mode instead"); + ptr += "WiFi Connection failed! Restarting in SoftAP mode instead
\n"; + WiFi.mode(WIFI_AP); + WiFi.softAP("Truhensteuerung", "12345678"); + Serial.print("AP IP address: "); + Serial.println(WiFi.softAPIP()); + //ptr += "AP IP address: "; + //ptr += WiFi.softAPIP(); + ptr += "
\n"; + } + // Print local IP address and start web server + ptr += "

\n"; + } + } + server.send(200, "text/html", ptr); + +} +void handleRoot(){ + String ptr = header; + ptr += "Setup Wifi"; + ptr +="\n\n"; + for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { + ptr +="\n\n\n\n\n"; + } + ptr += "
NameTempStatus
"; + ptr +=truhen[i].getName(); + ptr +=""; + ptr +=String(truhen[i].getCurTemp())+"℃"; + ptr +=""; + if (truhen[i].getStat() == -1) { + ptr +="Nicht bekannt"; + } + else if (truhen[i].getStat() == 1) { + ptr +="An"; + } + else if (truhen[i].getStat() == 0) { + ptr +="Aus"; + } + else if (truhen[i].getStat() == 2) { + ptr +="Error"; + } + ptr += "
\n"; + ptr +="\n"; + ptr +="\n"; + server.send(200, "text/html", ptr); +} +void handleNotFound() { + String message = "File Not Found\n\n"; + message += "URI: "; + message += server.uri(); + message += "\nMethod: "; + message += (server.method() == HTTP_GET) ? "GET" : "POST"; + message += "\nArguments: "; + message += server.args(); + message += "\n"; + for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } + server.send(404, "text/plain", message); +} + +void WifiSetup() { + preferences.begin("my-app", false); + ssid = preferences.getString("ssid", ssid); + password = preferences.getString("password", password); + preferences.end(); + + WifiConnect(ssid, password); + httpUpdater.setup(&server); + server.on("/setup",handleWifiSetup); + server.on("/",handleRoot); + + server.begin(); +};