#include <WiFi.h>
#include <WiFiMulti.h>
// WiFiMulti to handle multiple networks
WiFiMulti wifiMulti;
// Static IP configuration
IPAddress local_IP(192, 168, 1, 184); // Desired static IP
IPAddress gateway(192, 168, 1, 1); // Router gateway
IPAddress subnet(255, 255, 255, 0); // Subnet mask
IPAddress primaryDNS(8, 8, 8, 8); // Optional primary DNS
IPAddress secondaryDNS(8, 8, 4, 4); // Optional secondary DNS
// Wi-Fi event handler function
void WiFiEvent(WiFiEvent_t event) {
switch (event) {
case WIFI_EVENT_STA_CONNECTED:
Serial.println("Connected to Wi-Fi.");
break;
case WIFI_EVENT_STA_DISCONNECTED:
Serial.println("Disconnected from Wi-Fi, reconnecting...");
WiFi.reconnect(); // Automatically reconnect if disconnected
break;
case IP_EVENT_STA_GOT_IP:
Serial.print("Got IP Address: ");
Serial.println(WiFi.localIP());
break;
default:
break;
}
}
void setup() {
Serial.begin(115200);
// Register Wi-Fi event handler
WiFi.onEvent(WiFiEvent);
// Configure static IP
if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
Serial.println("Failed to configure static IP.");
}
// Add multiple Wi-Fi networks using WiFiMulti
wifiMulti.addAP("Network1", "Password1");
wifiMulti.addAP("Network2", "Password2");
wifiMulti.addAP("Wokwi-GUEST", ""); // Example network for Wokwi
// Set ESP32 hostname
WiFi.setHostname("ESP32-Device");
// Start connecting to the networks
Serial.println("Connecting to Wi-Fi...");
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nConnected to Wi-Fi.");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
void loop() {
// Check connection status every 10 seconds
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Wi-Fi disconnected, attempting to reconnect...");
WiFi.reconnect();
} else {
Serial.println("Wi-Fi connected. IP: " + WiFi.localIP().toString());
}
delay(10000);
}