WLAN Verbindung recovern - Arduino MKR WiFi 1010

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:
image

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();
}

Hallo,

direkt helfen kann ich nicht. Aber hast Du mal eine andere Version der WifiNINA Firmware probiert ?

Vom Nano 33 IoT weiß ich, dass 1.4.5 die neueste ist, die man über die IDE erreichen kann, und 1.4.7 die über den Arduino Firmware Updater.

Und wenn gar nichts hilft: Kann man vielleicht den Reset über den Watchdog des SAMD auslösen ? Bin mir nicht sicher, ob der auch das Wifi Modul resettet.

danke, das versuche ich direkt nach dem Urlaub

Hast du eine Tipp welche der Watchdog Libraries? Die beiden im Lib Manager angeboten passen nicht zur SAMD Architektur?

Danke hab's gefunden: Sodaq_wdt.
Damit ist es ein drei-zeiler :slight_smile: