#include <WiFi.h> // Define WiFi
volatile bool disconnectRequested = false;
void IRAM_ATTR handleInterrupt() {
disconnectRequested = true; // Just set a flag
}
void wiFiStationConnected(
WiFiEvent_t event,
WiFiEventInfo_t info
){
Serial.println("Connected to AP successfully!");
}
void wiFiGotIP(
WiFiEvent_t event,
WiFiEventInfo_t info
){
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("** Running tasks requiring WiFi");
}
void wiFiStationDisconnected(
WiFiEvent_t event,
WiFiEventInfo_t info
) {
Serial.println("Disconnected from WiFi access point");
Serial.print("WiFi lost connection. Reason: ");
Serial.println(info.wifi_sta_disconnected.reason);
Serial.println("Trying to Reconnect");
WiFi.begin("Wokwi-GUEST", "", 6);
Serial.println("** Running tasks requiring WiFi -- HALTED");
}
void setup() {
Serial.begin(115200);
WiFi.onEvent(
wiFiStationConnected,
ARDUINO_EVENT_WIFI_STA_CONNECTED
);
WiFi.onEvent(
wiFiGotIP,
ARDUINO_EVENT_WIFI_STA_GOT_IP
);
WiFi.onEvent(
wiFiStationDisconnected,
ARDUINO_EVENT_WIFI_STA_DISCONNECTED
);
WiFi.mode(WIFI_STA);
WiFi.begin("Wokwi-GUEST", "", 6);
WiFi.setAutoReconnect(true); // Will try to reconnect
// Simulate WiFi disconnection
pinMode(32, INPUT_PULLDOWN);
attachInterrupt(
digitalPinToInterrupt(32),
handleInterrupt,
RISING
);
}
void loop() {
if (disconnectRequested) {
disconnectRequested = false; // Clear the flag
Serial.println("Button pressed. Disconnecting WiFi...");
WiFi.disconnect();
}
delay(2000);
}