Bislang haben wir damit in diesem Forum keine besonders positiven Erfahrungen gemacht, weil der Fragesteller ahnungslos ist und die KI ihre Quellen nicht preisgibt. Das sind schlechte Voraussetzungen, um helfen zu können. Andererseits enthält Dein Programm ein paar schöne Ideen.
Hier siehst Du eine Begrenzung auf 30 Versuche. Bei mir genügen weniger als 5, aber es waren vereinzelt auch schon mal deutlich mehr, das hängt von der Belegung der Funkfrequenzen ab. Eventuell ist es hilfreich, Du läßt Dir mal ein paar Versuchszahlen anzeigen. Außerdem könntest Du den zweiten, mir bislang unbekannten Weg bewußt nutzen, um zu testen, ob er überhaupt zum Erfolg führt. Ich werde das mit meiner Fritz!Box mal tun. Versuch macht kluch!
Inzwischen getestet mit Verbindungsversuch 1:
Verbindungsversuch 1: Standard WPA/WPA2-PSK
Verbinde..
Verbindung erfolgreich!
IP-Adresse: 192.168.178.27
Gateway: 192.168.178.1
DNS: 192.168.178.1
Subnet: 255.255.255.0
RSSI: -24 dBm
Kanal: 6
Verbindung stabil, RSSI: -29 dBm
Verbindung stabil, RSSI: -30 dBm
Verbindung stabil, RSSI: -30 dBm
Verbindungsversuch 1 komentiert:
Verbindungsversuch 1: Standard WPA/WPA2-PSK
Verbinde
Verbindung fehlgeschlagen
Verbindungsversuch 2: Alternativ mit PMF deaktiviert
Verbinde..............................
Auch alternative Verbindung fehlgeschlagen
WiFi-Status: 255
Verbindungsstatus: 255
Verbindungsstatus: 255
Verbindungsstatus: 255
Da scheint die Alternative keine bei mir funktionierende zu sein.
Noch ein Tipp: Wenn Deine ESPs 24/7 laufen, sollte die WiFi-Verbindung in Zeitintervallen überprüft und bei Nichtverbindung neu aufgebaut werden. Die WiFi-Verbindungsaufnahme gehört daher in eine Funktion, die auch von loop() aufgerufen wird.
WiFi-Verbindungsfunktion
void routerVerbindung()
{
unsigned long connDauer = 20000;
unsigned long connTimer = millis();
if (WiFi.status() != WL_CONNECTED)
{
DEBUG_F("Verbindung zum Router ");
WiFi.mode(WIFI_STA);
WiFi.disconnect();
WiFi.begin(STA_SSID, STA_PASSWORD);
while (WiFi.status() != WL_CONNECTED && (millis() - connTimer < connDauer)) {
digitalWrite(LED_BUILTIN, 1);
delay(250);
digitalWrite(LED_BUILTIN, 0);
delay(250);
DEBUG_F(".");
}
if (WiFi.status() == WL_CONNECTED)
{
WiFi.setAutoReconnect(true);
WiFi.persistent(false); // true = default, bei reboot werden ssid+pass in den Flash geschrieben, killt den freien Speicher!
DEBUG_L("\nVerbunden mit: " + WiFi.SSID());
DEBUG_L("Esp32 IP: " + WiFi.localIP().toString() + "\n");
} else {
DEBUG_L(" nicht hergestellt");
}
}
}