Riconnessione WiFi dopo perdita Segnale

Buonasera,
sto tentando di gestire il WiFi recuperando la connessione in caso di perdita segnale.
Ho utilizzato la libreria WiFiMulti per gestire più SSID, ma il problema sussiste anche con l'utilizzo della sola libreria "WiFi".
Ho configurato in cascata l'hotspot dello smartphone, e poi il WiFi di casa.
La prima connessione va senza problemi, collegandosi allo smartphone.
Dopodiché disabilitando l'hotspot l'ESP32 perde la connessione e tenta di riconnettersi, ma il risultato è lo status = 1, che indica Nessun SSID disponibile, ma il WiFi di casa è sicuramente disponibile o anche riattivando l'hotspot del cellulare il risultato è lo stesso .
Ho tentato con tutti gli sketch che ho trovato, ma il risultato è sempre lo stesso.
L'unica soluzione è quella di resettare l'ESP32, ma sinceramente mi sembra una pezza.
Allego il mio sketch, anche se non ha niente di particolare rispetto a quelli condivisi su internet.

#include <WiFi.h>
   #include <WiFiMulti.h>
   WiFiMulti wifiMulti;
   uint8_t WiFiStatus;
    uint8_t prevWiFiStatus = 999;
   
    struct ssid_pass
    {
      char *SSID;
      char *PASS;
    };

    ssid_pass wifiAP[4] 
            =   {
                  {"AndroidAP_3176",  "**********"},
                  {"Vodafonembs2-4",  "************"},
                  {"Redmi2"        ,  "gigione02"},
                  {"Wokwi-GUEST"   ,  ""}
                };

void setup() 
{
  Serial.begin(115200);
  Serial.println("Hello, ESP32!");
  confWifi();
}

void loop() 
{
  delay(1000); 
   WiFiCheck();
   
  Serial.print("wifi Check...");
  Serial.println(WiFi.localIP());    
}
 
   void confWifi()
    {
      for (ssid_pass & item : wifiAP)
      {
            Serial.print(item.SSID);
            Serial.print(" " );
            Serial.println(item.PASS);
            wifiMulti.addAP(item.SSID,  item.PASS);
      }
    }

    void WiFiCheck()
    {
      if(wifiMulti.run() != WL_CONNECTED) 
      {
        Serial.println("WiFi not connected!");
        delay(1000);
      }
  
      WiFiStatus = WiFi.status();  
      String retStatus = "WiFi.status .. : ";
      if(prevWiFiStatus != WiFiStatus)
      {
          switch(WiFiStatus)
          {
            case 1 : 
                Serial.println(retStatus + "Nessun SSID disponibile");
                delay(3000);
                ESP.restart ();
                break ;   
            case 3 :
                Serial.println("Connesso..."); 
                Serial.println(WiFi.localIP());  
                break; 
            case 6 : 
                Serial.println(retStatus + "Disconnesso...");

                break;   
            default :
                Serial.println(retStatus + String(WiFiStatus));

          }
          prevWiFiStatus = WiFiStatus ;
      }
    }

    
    void wifiConnect()
    {
      Serial.println("Connecting Wifi...");
      if(wifiMulti.run() == WL_CONNECTED) 
      {
        Serial.println("");
        Serial.println("WiFi connected");
        Serial.println("IP address: ");
        Serial.println(WiFi.localIP());
      }
    }  

Altra domanda,
volevo fare provare con WOKWI, ma non so come disabilitare e riabilitare il WIFI.
Mi date indicazioni?

piccolo aggiornamento.


wifi Check...192.168.72.162
wifi Check...192.168.72.162
WiFi not connected!
WiFi.status .. : Disconnesso...
wifi Check...0.0.0.0
WiFi not connected!
WiFi.status .. : Nessun SSID disponibile
ets Jul 29 2019 12:21:46


rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4688
load:0x40078000,len:15460
ho 0 tail 12 room 4
load:0x40080400,len:4
load:0x40080404,len:3196
entry 0x400805a4
Hello, ESP32!
AndroidAP_3176 XXXXXX
Vodafonembs2-4 YYYYYY
Redmi2 gigione02
Wokwi-GUEST 
Connesso...192.168.1.39
wifi Check...192.168.1.39
wifi Check...192.168.1.39
wifi Check...192.168.1.39

dopo aver spento l'hotspot del telefono, si è disconnesso, ed ha segnalato "nessun SSID disponibile", ma non è così, infatti dopo il reset si è collegato tranquillamente con l'IP diverso dal precedente che glia ha assegnato il router e non lo smartphone.

HO trovato una nota sul sito di WSPRESIFF dove viene citato un parametro

Attention
4. This API attempts to connect to an Access Point (AP) only once. To enable reconnection in case of a connection failure, please use the 'failure_retry_cnt' feature in the 'wifi_sta_config_t'. Users are suggested to implement reconnection logic in their application for scenarios where the specified AP does not exist, or reconnection is desired after the device has received a disconnect event.

Potrebbe essere questa la causa della mancata riconnessione?
Non so come impostare questo parametro.

Quindi?
Mi rassegno con il RESET :confused:?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.