Tach zusammen!
Mein Projekt sieht Arduino ESP32 als eine Art kleine SPS (Speicherprogrammierbare Steuerung) vor, die Messdaten und Schaltzustände per WiFi und UDP an einen Server sendet und von diesem auch (über UDP) hin und wieder Schaltbefehle, die aktuelle Uhrzeit usw. erhält. Der Netzwerkverkehr ist nicht sonderlich hoch.
Mir ist beim Experimentieren mit dem Board aufgefallen, dass das der WiFi-Teil nach 2 Minuten Netzwerkinaktivität, also kein Senden eines UDP-Pakets in eine Art Schlafmodus fällt. Er sendet dann nichts mehr per UDP. Per Ping ist der ESP32 zu finden. Sendet man dann dem ESP32 ein UDP-Paket, sendet er auch wieder, bis die nächste Pause von mehr als 2 Minuten kommt. Und die Netzwerkkommunikation schläft wieder ein.
Meine konkreten Fragen:
Die Funktion WiFi.setSleep(false) habe ich nach viel Internetrecherche, aber nicht bei arduino.cc, gefunden und in meinen Quellcode eingebaut. Echtes Dokumentationsmanko! Das hat aber scheinbar keinerlei Auswirkung. Gibt es noch mehr undokumentierte Features. Hat einer eine Liste oder einen Link zu einer besseren Doku?
Wegen der lückenhaften Dokumentation der Arduino-WiFi-Bibliothek. Bin ich bereit auf eine bessere, auch umfangreichere Bibliothek zu wechseln. Hier habe ich aber noch keinen echten Ansatz gefunden. Benutzt Ihr alle die Arduino eigene WiFi-Bibliothek oder gibt es eine Alternative?
Was Sie beobachten, ist ein normales Verhalten des ESP32, der den WiFi-Schlafmodus aktiviert, um Energie zu sparen. WiFi.setSleep(false) sollte diesen Modus theoretisch deaktivieren, aber in einigen Firmware-Versionen funktioniert das nicht immer wie erwartet.
Auf diese Dokumentation und den Befehl bin ich auch schon gestoßen. Ausprobiert habe ich es auch, bekomme aber leider schon beim Kompilieren die Fehlermeldung, dass dies nicht deklariert worden wäre. Ist ja kein Wunder, weil ich nur folgende Bibliotheken und Deklarationen verwende:
Sie müssen zuerst das Wi-Fi mit WiFi.begin() initialisieren, warten, bis die Verbindung hergestellt ist, und dann das Energiemanagement mit esp_wifi_set_ps(WIFI_PS_NONE); deaktivieren.
@J-M-L
Hallo! Ich habe es jetzt explizit umgestellt und es funktioniert.
Ich glaube, diese Geschichte habe ich jetzt im Griff.
Jetzt stellt sich ein neues Problem, welches aber nichts mit diesem Forum zu tun hat. Ich verwende drei verschiedene Windows-Rechner (W11, W10 Srv2019) über LAN mit dem Packetsender-Programm als Empfänger und Sender.
Interessanterweise empfängt W11 alle Pakete, W10 verliert das eine oder andere und der Server 2019 empfängt nur nach "Aufforderung an den ESP32" die ersten 12 bis 25 Paketen. Das wird wohl nichts mehr mit dem ESP32 zu tun zu haben.
Vielen lieben Dank für Eure prompte Unterstützung. Auf jeden Fall hat es mir viel gebracht auf "esp_wifi.h". Das war ein echter Gewinn!
@wwerner
Da hast Du natürlich grundsätzlich recht. Wenn das ein oder andere Paket verloren geht ... geschenkt! Aber dass der eine Rechner nur so um die 20 Pakete empfängt und dann nichts mehr, ist schon merkwürdig.
Ich gebe zu, ich habe auch unsere Fritz!Repeater und Fritz!Box in Verdacht und auch alle kontrolliert. Hier bestätigte sich der Verdacht aber nicht.
Abschließend möchte ich erstmal für die Hilfe bedanken!
Aber auch dringend darauf hinweisen, dass beim Datenverkehr über Netzwerk man NIE die Firewalls außer Acht lassen sollte. Eine Firewall verhindert scheinbar nicht grundsätzlich einen Datenverkehr, sondern macht schlicht "komische" Dinge. Mal lässt sie Paket durch, dann mal nicht. Oder lässt nach gewisser Zeit keine Pakete mehr durch.
Kurzum wer auch noch so abstruse Probleme mit dem Datenverkehr hat - GRUNDSÄTZLICH - erstmal die Firewall auf dem Rechner ausschalten. Und dann erst mit den Firewall-Regeln rumspielen.
In meinem Fall musste ich zwei Regeln anlegen eine "eingehende" Regel, das war die Wichtigere: Freischaltung des lokalen Ports 11018 UND des Remoteports 11018 für die UDP-Pakete. Die "ausgehende" Regel habe ich mal genauso angelegt und eingestellt.
PS: 11018 ist der von mir verwendete Port. Das kann in anderen Projekten natürlich anders sein. Interessanter Link: Liste der Portnummern – Wikipedia