Mi interruptor WIFI me deja a oscuras sin internet

Hola como estan? Quiero decirles que me es muy grato entrar en este foro ya que veo muchas cosas interesantisimas. Asi que aprovecho para saludarlos y espero aprender mucho por aqui.

Bien, dicho esto les cuento mi inconveniente a ver si alguien me puede dar una mano. Arme unos modulitos wifi de domotica para el encendido de luces en mi casa, utilizando un ESP8266 01s.Los módulos se activan con el broker Adafruit,el google asistance y ademas en forma manual,manteniendo las perillas o efectos de mis cajas de interruptor.

La realidad que funcionan muy bien como yo quería,desde el celular, con mando de voz , etc , pero un día perdí la conexión de internet ,por cuestiones externas, y descubrí que no podía encender las luces en forma manual :confused: .
Obviamente esto no pueder ser asi que por una perdida temporal de internet uno no pueda encender las luces, asi que revisando el codigo (no soy experto) me di cuenta que hay una parte del mismo en donde el modulo buscar reconectarse pero no deja ejecutar el codigo o la parte del pulsado del boton. Sera el famoso delay que esta en el While? ..Dejo aqui el codigo para que lo revisen y si me pueden decir que debo cambiar y como.
Muchas gracias!
C:\Users\griyo\OneDrive\Pictures\IMG_20200414_205245

#define IO_USERNAME    "xxxxxxxxx"
#define IO_KEY         "xxxxxxxxxxxx"



#define WIFI_SSID       "xxxxxxxxxx"
#define WIFI_PASS       "xxxxxxxx"

#include "AdafruitIO_WiFi.h"
AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);


#include <ESP8266WiFi.h>
#include <AdafruitIO.h>
#include <Adafruit_MQTT.h>
#include <ArduinoHttpClient.h>.


const int buttonPin = 2;     
const int ledPin = 0;      


int ledState = HIGH;         
int buttonState;             
int lastButtonState = LOW;   


unsigned long lastDebounceTime = 0;  
unsigned long debounceDelay = 50;    

// set up the 'command' feed
AdafruitIO_Feed *command = io.feed("luzdormitorio");

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
   
   // start the serial connection
  Serial.begin(115200);

  // connect to io.adafruit.com
  Serial.print("Connecting to Adafruit IO");
  io.connect();
    
 // wait for a connection
  while(io.status() < AIO_CONNECTED) {
    Serial.print(".");
    delay(50);
        }
  // we are connected
  Serial.println();
  Serial.println(io.statusText());
  
  command->onMessage(handleMessage);
}

void loop() {

  io.run();
    
  int reading = digitalRead(buttonPin);

    
  if (reading != lastButtonState) {    
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
        if (reading != buttonState) {
      buttonState = reading;
      
      if (buttonState == HIGH) {
        ledState = !ledState;
       
  digitalWrite(ledPin, ledState);
  Serial.print("sending -> ");
  Serial.println(ledState);
command->save(ledState); 
      }
    }
  }
  
  lastButtonState = reading;
 
}

// Esta función se llama cada vez que aparece un mensaje de 'comando'
// se recibe de Adafruit IO. estaba adjunto a
// el feed de comandos en la función setup () anterior

void handleMessage(AdafruitIO_Data *data) {

  int command  = data->toInt();
   if (command == 1){ //light up the LED
    Serial.print("received <- ");
    Serial.println(command);
     digitalWrite(ledPin, HIGH);
        
  } else {
    Serial.print("received <- ");
    Serial.println(command);
    digitalWrite(ledPin, LOW);
    
  }
}