#include <WiFi.h> // Define WiFi
volatile bool disconnectRequested = false;
bool wifiTaskStarted = false;
void IRAM_ATTR handleInterrupt() {
disconnectRequested = true; // Just set a flag
}
void setup() {
Serial.begin(115200);
Serial.print("Connecting to WiFi");
WiFi.mode(WIFI_STA);
WiFi.begin("Wokwi-GUEST", "", 6);
WiFi.setAutoReconnect(true); // Will try to reconnect
while (WiFi.status() != WL_CONNECTED) {
delay(100); Serial.print(".");
}
Serial.println(" Connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// 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();
}
if (WiFi.status() == WL_CONNECTED && !wifiTaskStarted) {
Serial.println("** Running tasks requiring WiFi");
wifiTaskStarted = true;
}
else if (WiFi.status() != WL_CONNECTED && wifiTaskStarted) {
Serial.println("** Running tasks requiring WiFi -- HALTED");
wifiTaskStarted = false;
}
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Disconnected from WiFi access point");
Serial.println("Trying to Reconnect");
WiFi.begin("Wokwi-GUEST", "", 6);
}
delay(2000);
}