habe eine Frage zum WLAN Reconnect bei Verbindungsverlust.
sowohl in setup() als auch in loop() sofern ich dort feststelle das die WKAN Verbindung verloren gegangen ist rufe ich die unten gepastete connect() Methode auf.
Dies klappt nach einem Reset bislang zu 100%. Wenn er die Verbindung verliert (was leider häufiger vorkommt da der WLAN Accesspoint an einer schlechte DLAN Versorgung hängt) klappt es oft aber bei weitem nicht immer.
Hier sieht man was ich meine:
Rot ist unterbrochen grün verbunden.
'pool' ist die Verbindung zum DLAN an welchem der WLAN Accespoint hängt. Diese Verbindung recovered sich wie man sieht nach einer Störung immer zuverlässig.
'ph' ist die Verbindung zum Arduino (Arduino MKR WiFi 1010). man kann erkennen das der reconnect oft klappt aber zum Beispiel von gestern ~14:00 bis heute Nacht ~3:30 hing.
In dieser zeit blickt die RGB LED rot, er befindet sich also in connect() dauerhaft in dieser Schleife:
while (WiFi.begin(wifiSsid, wifiPass) != WL_CONNECTED)
{
r = r ? 0 : 20;
rgbLed(r, 0, 0);
delay(200);
}
betätige ich in diesem Zeitraum Reset geht es sofort wieder - das habe ich sehr oft getestet.
Mache ich beim Reconnect etwas falsch, kann ich das irgendwie verbessern?
Bevor ich WiFi.disconnect() eingebaut habe trat das Problem noch häufiger auf.
Danke und Grüße
Jörg
void connect()
{
byte r {20};
byte b {20};
if (Serial) Serial.println("Connecting to WiFi '" + String(wifiSsid) + "' ..");
while (!net.connected() || WiFi.status() != WL_CONNECTED)
{
mqtt.disconnect();
WiFi.disconnect();
ntpClient.end();
rgbLed(r, 0, 0);
delay(500);
while (WiFi.begin(wifiSsid, wifiPass) != WL_CONNECTED)
{
r = r ? 0 : 20;
rgbLed(r, 0, 0);
delay(200);
}
if (Serial) Serial.println("Connected to WiFi!");
mqtt.begin(mqttServer, mqttPort, net);
if (Serial) Serial.println("Connecting to MQTT broker '" + String(mqttServer) + ":" + mqttPort + "' ..");
rgbLed(0, 0, b);
delay(500);
while (WiFi.status() == WL_CONNECTED && !mqtt.connect("poold-arduino", key, secret))
{
b = b ? 0 : 20;
rgbLed(0, 0, b);
delay(200);
}
if (Serial) Serial.println("Connected to MQTT broker");
mqtt.loop();
delay(500);
}
mqtt.onMessage(atMessage);
mqtt.subscribe(topicIn);
ntpClient.begin(); // start NTP
delay(500);
isTimeSet = ntpClient.forceUpdate();
}