#include <WiFi.h>#include <WebServer.h>
const char* ssid_ap = "ESP32 Hotspot"; // Name of the ESP32 hotspot
const char* password_ap = "abcd12345"; // Hotspot password
String ssid_target = ""; // Target WiFi SSID
String password_target = ""; // Target WiFi password
// Create Web Server instance
WebServer server(80); // Web server listens on port 80
// HTML form page for user to input WiFi information
const char* html_form = R"(<!DOCTYPE html>
<html><head><title>WiFi Configuration</title></head><body><center><h1>WiFi Configuration Page</h1><form action="/save" method="POST"><label for="ssid">WiFi SSID:</label><br/><input id="ssid" name="ssid" type="text"/><br/><br/><label for="password">WiFi Password:</label><br/><input id="password" name="password" type="password"/><br/><br/><input type="submit" value="Save and Connect"/></form></center></body></html>)";
// Start the WiFi connection process
void connectToWiFi() {
WiFi.begin(ssid_target.c_str(), password_target.c_str());
Serial.print("Connecting to WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("Connected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
// Handle user submitted WiFi configuration
void handleWifiConfig() {
if (server.hasArg("ssid") && server.hasArg("password")) {
ssid_target = server.arg("ssid");
password_target = server.arg("password");
Serial.println("Received WiFi Credentials:");
Serial.print("SSID: ");
Serial.println(ssid_target);
Serial.print("Password: ");
Serial.println(password_target);
server.send(200, "text/html", "<h1>Configuration Successful, Connecting to WiFi...</h1>");
connectToWiFi();
} else {
server.send(400, "text/html", "<h1>Parameter Error</h1>");
}
}
// Handle root path, display WiFi configuration form
void handleRoot() {
server.send(200, "text/html", html_form);
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_AP_STA); // Set WiFi mode to STA+AP
// Set ESP32 as hotspot
WiFi.softAP(ssid_ap, password_ap);
Serial.println("ESP32 started as hotspot");
// Set up web server routes
server.on("/", HTTP_GET, handleRoot); // Display form
server.on("/save", HTTP_POST, handleWifiConfig); // Handle form submission
// Start web server
server.begin();
Serial.println("Web server started, waiting for connections...");
// If ESP32 is already connected to target WiFi, print its IP address
if (WiFi.status() == WL_CONNECTED) {
Serial.print("WiFi Connected, IP Address:");
Serial.println(WiFi.localIP());
}
}
void loop() {
// Handle web requests
server.handleClient();
// If WiFi is connected, print IP address
if (WiFi.status() == WL_CONNECTED) {
Serial.print("WiFi Connected, IP Address:");
Serial.println(WiFi.localIP());
}
}

