Migliorare connessione Wifi ESP8266 e Router

Ciao a tutti. Ho implementato un piccolo sketch il quale sfrutta l'ESP8266 per collegarsi al router WiFi di "casa mia", o cmq un ruoter qualsiasi.

Il metodo funziona abbastanza bene secondo me però volevo capire se ci sono margini di miglioramento. Il concetto è. Metto il firmware sulla mia scheda, vado a casa di Mario Rossi, attivo l'alimentazione di Arduino, esso dovrebbe collegarsi alla rete di Mario Rossi, come? Leggendo dalla EEPROM nome SSID e PASSWORD.

Non c'è nessuna info salvata ? Non c'è il router ? ALlora ti crea lui la rete mettendosi in modalità AP cosi ti colleghi e puoi configurare SSID e PASSWORD. A grandi linee io ho già implementato tutto questo e vi posto il codice:

bool ConnectWiFi() {
  //SE HO GIà SALVATO SSID E PASSWORD
  //RECUPERO QUESTE IMPOSTAZIONI ALTRIMENTI
  //AVVIO LA SCHEDA ESP8266 IN ALTRA MODALITà
 
  String WIFI_SSID = read_String(eeprom_ssd);
  Serial.println(" " + WIFI_SSID);
  delay(10);
  String WIFI_PASSWORD = read_String(eeprom_pwd);
  //se la password contiene un carattere speciale come il %21 va modificato
  Serial.println(WIFI_PASSWORD);
  Serial.println(" " + WIFI_SSID);
  
  if(WIFI_SSID == "" || WIFI_PASSWORD == ""){
      WiFi.mode(WIFI_AP);
      WiFi.softAP("Mic", "pas");
   
      Serial.println("Ready");
   
  }else{
    if(debug)
      Serial.println("wifi sta");
    //RECUPERO L'INDIRIZZO ip
    IPAddress ip = getAddressIp(eeprom_ip);
    //RECUPERO IL SUBNETMASK
    IPAddress subnet = getAddressIp(eeprom_subnet);
    //RECUPERO IL GATEWAY
    IPAddress gateway = getAddressIp(eeprom_gateway);


    
    
    WiFi.setSleepMode(WIFI_NONE_SLEEP);
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID.c_str(), WIFI_PASSWORD.c_str());
    WiFi.config(ip, gateway, subnet);
    delay(10000);
    int cont = 0;
    while (WiFi.waitForConnectResult() != WL_CONNECTED) {
     
      delay(200);
      Serial.println(WiFi.status());
      Serial.println(WL_CONNECTED);
      WiFi.disconnect();
      delay(5000);
     // WiFi.config(ip, gateway, subnet);
      cont = cont + 1;
      if(cont == 105){
        //non riesce a collegarsi alla rete wifi.
        startAPMode();
        break;
      }
    }
    
    delay(200);
    Serial.println ("WiFi connected ");
  }
  
  return true;
}

Il baco di questo metodo è il seguente. Se per puro caso, il router viene accidentalmente spento, la scheda si mette in modalità Access Point e non si ricollega più al Router quando esso ritorna disponibile.

Secondo voi come si può ovviare a questo problema ?

Da quello che posti non si capisce bene lo sketch, ma sembra che vada in AP quando non trova la rete o le credenziali sono diverse, giusto?
Non è chiaro chi gestisce lo sketch

Quanto tempo ci metti a far partire l’AP se non c’è nessuna connessione?
Quando e dove ( se lo fai) riprovi a connetterti se noi hai connessione?
Rispetto ai tentativi di connessione, quanto tempo ci mette il modem a riattivare la wifi?
Considera che un modem quando si accende, attiva la wifi prima di aver stabilito una connessione ‘reale’ , spesso IP,GW e SUBNET MASK sono del tutto sballate rispetto a quelle che ti permettono di definirti ‘connesso’ e questo rallenta lo stato di ‘CONNECTED’ , e anche questo deve essere tenuto in considerazione.
In più ,non vedo nessun richiamo alla funzione che gestisce le credenziali su eeprom una volta in AP e c’è un wifi.disconnect() prima di andarci,non potrà mai riprovare a trovare la rete se l’hai appena scollegata.

Esiste già una libreria per ESP8266 che fa proprio quello che intendi fare