#ifndef WIFISETUP_H #define WIFISETUP_H #ifdef ESP32 #include #include #endif #ifdef ESP8266 #include #include #endif #include #ifdef ESP32 AsyncWebServer server(80); #endif #ifdef ESP8266 ESP8266WebServer server(80); #endif #define P_RESET 12 //Edit here pin Reset int Reset = 1; // EEPROM byte used (EEPROM range byte 0-511) int ssidAddress = 0; int passAddress = 100; int Rst = 250; const char* ssid = "ESP_CONFIG"; // Edit here AP name const char* password = "12345678"; //Edit here AP password IPAddress softAPIP(192, 168, 4, 1); //Edit here AP website IP String wifi_ssid = ""; String wifi_pass = ""; const char* html = R"(

ESP32 Configuration Wi-Fi

SSID WiFi:

Password:

)"; void writeStringToEEPROM(int address, const String &data) { for (int i = 0; i < data.length(); i++) { EEPROM.write(address + i, data[i]); } EEPROM.write(address + data.length(), '\0'); EEPROM.commit(); } String readStringFromEEPROM(int address) { String result = ""; char c; for (int i = 0; (c = EEPROM.read(address + i)) != '\0'; i++) { result += c; } return result; } void saveCredentialsToEEPROM(const String &ssid, const String &pass) { writeStringToEEPROM(ssidAddress, ssid); writeStringToEEPROM(passAddress, pass); } void CheckReset(){ if(digitalRead(P_RESET) == LOW){ riavvio1: if(digitalRead(P_RESET) == HIGH){ EEPROM.write(Rst, 1); EEPROM.commit(); Serial.println("Reset"); } else {goto riavvio1;} } } #ifdef ESP8266 void handleRootGet() { server.send(200, "text/html", html); } void handleRootPost() { String input1 = server.arg("input1"); String input2 = server.arg("input2"); wifi_ssid = input1; wifi_pass = input2; Serial.print("SSID: "); Serial.println(input1); Serial.print("Password: "); Serial.println(input2); Serial.println("Restarting.."); saveCredentialsToEEPROM(wifi_ssid, wifi_pass); server.send(200, "text/plain", "Data received successfully! Restarting..."); EEPROM.write(Rst, 0); EEPROM.commit(); delay(2000); ESP.restart(); } #endif void WiFiSetup(){ pinMode(P_RESET, INPUT_PULLUP); EEPROM.begin(511); Serial.println("Starting.."); Reset = EEPROM.read(Rst); String savedSsid = readStringFromEEPROM(ssidAddress); String savedPass = readStringFromEEPROM(passAddress); wifi_ssid = savedSsid; wifi_pass = savedPass; if(Reset == 1){ WiFi.mode(WIFI_AP); WiFi.softAPConfig(softAPIP, IPAddress(0, 0, 0, 0), IPAddress(255, 255, 255, 0)); WiFi.softAP(ssid, password); Serial.println("> Configuration mode <"); Serial.println("Access Point Started!"); Serial.print("AP SSID: "); Serial.print(ssid); Serial.print(" Password: "); Serial.println(password); Serial.println("Configuration page: http://192.168.4.1"); #ifdef ESP32 server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(200, "text/html", html); }); server.on("/", HTTP_POST, [](AsyncWebServerRequest *request){ String input1 = request->arg("input1"); String input2 = request->arg("input2"); wifi_ssid = input1; wifi_pass = input2; Serial.print("SSID: "); Serial.println(input1); Serial.print("Password: "); Serial.println(input2); Serial.println("Restarting.."); saveCredentialsToEEPROM(wifi_ssid, wifi_pass); request->send(200, "text/plain", "Data received successfully! Restarting..."); EEPROM.write(Rst, 0); EEPROM.commit(); delay(2000); ESP.restart(); }); server.begin(); #endif #ifdef ESP8266 server.on("/", HTTP_GET, handleRootGet); server.on("/", HTTP_POST, handleRootPost); server.begin(); #endif } else { WiFi.begin(wifi_ssid.c_str(), wifi_pass.c_str()); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connection in progress..."); CheckReset(); } Serial.println("Connected to the Wi-Fi network."); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } } void WiFiLoop(){ CheckReset(); #ifdef ESP8266 server.handleClient(); #endif } #endif