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?