Consulta esp8266-Cómo ejecutar loop mientras intenta conectarse

Hola que tal, les comento mi problema ya que no se como resolverlo.
Resulta que tengo unos interruptores wifi con el modulo esp8266 01 que se conectan a Internet para luego ejecutar el código que enciende y apaga una luz(además de enviar datos de estado a la pag del bróker, etc) . El tema es que si se interrumpe Internet no me funciona el encendido manual apretando el botón. Cosa que no debiera ocurrir ya que uno se queda a oscuras.

Mi consulta es si hay manera de hacer que, mientras el modulo intenta reconectarse, pueda funcionar el código, o por lo menos la parte donde se activa el botón en forma manual. Dejo el código en cuestión por si hay algún error.
Espero me puedan ayudar.
Mil gracias.

 #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);
   
  }
}