ESP32 (Arduino) und UDP / Datenaustausch mit Windows 11/23H2 (WLAN)

  • Hallo Leute,

    hat jemand von Euch schonmal einen Datenaustausch per UDP zwischen einem ESP32 und Windows 11/23H2 dauerhaft hinbekommen ??
    Unter Windows 10 funktioniert das, auch mit einem Android Tablet keinerlei Störungen ....

    Hardware:
    Arduino Nano ESP32 (Espressiv ESP32/S3 verbaut)
    Anbindung an heimisches WLan (ohne Probleme)

    Software:
    Arduino/ESP32: ESP32 Skript aus der Arduino IDE 2.3 Beispiel Sektion für ESP32
    Arduino/ESP32: Das Skript nennt sich AyncUDPClient
    PC: UDP-Sender/Receiver aus dem MS App Shop (und auch andere getestet)
    PC: Im Abschluss soll der Arduino einen simplen String aus Visual Basic .NET gesendet bekommen

    Hier das Skript auf dem Arduino:

    Das Skript läuft einwandfrei auf dem Arduino, daher gehe ich davon aus, dass das Problem eindeutig an Windows 11 liegt.

    Das Lustige:
    Wenn ich am PC die Netzwerkeinstellungen resette, geht es komischerweise ein paar (wenige) mal, dann wird weder gesendet, noch empfangen.
    Ich habe auch schon andere ähnliche Skripte kurz laufen sehen, dann stellten auch diese den Betrieb ein.
    Resette ich dann unter Windows 11 die Netzwerkeinstellungen, geht es wieder einige Male und auch dann ist wieder Schluss.

    Unter Windows 10 und Android (als Sender) läuft das Zeug einwandfrei und dauerhaft.

    Leider muss der Kram in abgewandelter Form von Windows 11 angesteuert werden, da der Rechner, auf dem das letztendlich laufen soll Windows 11 benutzt und das nicht geändert werden kann.

    Da der ESP32/S3 kein normales Bluetooth kann (sondern nur BLE / wäre sonst ideal gewesen, zumal auch der PC nur normales BT kann), fällt das leider raus.
    Ein weiterer Anschluss eines BLE Sticks ist leider nicht möglich.
    Direkter USB Anschluss und Datenversand über Serielle geht 1A aber der PC und Arduino sind zu weit auseinander und Kabel verlegen ist leider nicht.

    Bleibt also nur noch WLan.

    Wie geschrieben, die WLan Verbindung funktioniert einwandfrei und dauerhaft, nur der Datenversand per UDP "eiert" und das auch nur unter Windows 11.

    Nach einigen Forschungen per Google gibt es ja anscheinend seit Kurzem ein UDP Problem genau unter Windows 11/23H2, bei dem scheinbar RDP darüber garnicht mehr läuft.
    MS hat noch keine Lösung, empfiehlt bis zum Fix RDP auf "nur TCP" zu konfigurieren.
    Ich habe keine Ahnung, ob das der selbe Bug ist aber ich habe das Gefühl, da liegt generell was bei MS in Sachen UDP im Argen.

    TCP wäre natürlich auch möglich aber da habe ich keine Ahnung und einen extra Webserver auf dem Arduino wollte ich auch nicht generieren wegen einem max. 10stelligen Textstring.

    Wenn es anders nicht gehen sollte, bräuchte ich ne gute Infoquelle mit dem Nötigsten, um unter VB.NET per TCP einen String zu senden und auf dem Arduino zu empfangen.
    Rückantwort wäre auch ideal, müsste aber nicht unbedingt sein.

    Ich habe so gut wie kaum/keine Erfahrungen mit Netzwerkprogrammierung, alles setzte sich bisher aus Copy/Paste/ReWrite zusammen.
    Und das mit dem UDP Versand/Empfang hat mich gleich begeistert, weil es auf Anhieb funktioniert hat, bis es halt auf den Windows 11 PC kam ....

    Any Ideas ??

    ;) Gruß Outi :D
    Pis: 2x Pi B, 1x Pi B+, 1x Pi 2 B in Rente / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 / 2x Pi Zero 1.3 / 2x Pi Zero W 1.1 / 1x Pi Zero 2 (BW+CUPS/SANE) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Tests) / Pi 400 (BW) / 1x Pi 5 (BW) / 2x Pi Pico / 2x Pi Pico W
    HATs: Sense HAT / HM-MOD-RPI-PCB / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT / Pi 5 Kühler HAT / Pimoroni NVMe BASE
    Cams: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

  • ESP32 (Arduino) und UDP / Datenaustausch mit Windows 11/23H2 (WLAN)? Schau mal ob du hier fündig wirst!

  • Hast Du mal versucht, auf dem Windows-11-PC einen Paket-Sniffer zu installieren, damit man sehen kann, ob der auch keine UDP-Pakete sieht?

    Hat die Netzwerkkarte in dem Windows-11-PC den aktuellsten Firmware-Stand bzw. ist das BIOS im PC aktuell?

    Hast Du geprüft, ob der Treiber für die Netzwerkarte im PC auf dem aktuellesten Stand ist? Eventuell gibt es vom Hersteller Karte bzw. von dem Hersteller der Mutterplatine (wenn die Karte darauf verbaut ist) einen neueren Treiber als den, den Windows mitliefert.

    Hast Du mal versucht, mit dem Notfall-Windows von Heise den Fehler nachzustellen? Der Hinweis zielt darauf ab, dass das Windows in der Notfall-Version etwas schlanker ist als das regulär installierte Windows.

  • peuler
    Ich hatte verschiedene Netzwerk"beobachter" getestet und bei allen kam nix mehr durch UDP durch, während TCP einwandfrei lief.
    Auch mit ncat auf den Arduino losgelassen, reagierte der Arduino einwandfrei auch als UDP nicht mehr funktionierte.

    Wie geschrieben, nach dem "Netzwerkeinstellungen Reset" läuft der ganze Kram ja einwandfrei, nur halt nicht lange.

    Und die Hardware, auf dem Windows 10 läuft, ist noch viel älter aber der Tipp mit der Notfall Version ist super.
    Ich habe ja auf meiner Synology noch PXE installiert und boote mal per Netzwerk ein "blankes" System.

    Was halt eben gesichert läuft, ist TCP aber ich hätte auf Grund der Simplizität gerne UDP verwendet ....

    ;) Gruß Outi :D
    Pis: 2x Pi B, 1x Pi B+, 1x Pi 2 B in Rente / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 / 2x Pi Zero 1.3 / 2x Pi Zero W 1.1 / 1x Pi Zero 2 (BW+CUPS/SANE) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Tests) / Pi 400 (BW) / 1x Pi 5 (BW) / 2x Pi Pico / 2x Pi Pico W
    HATs: Sense HAT / HM-MOD-RPI-PCB / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT / Pi 5 Kühler HAT / Pimoroni NVMe BASE
    Cams: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

  • Mein Vorschlag: MQTT

    Ich habe hier im Haus verschiedene ESP-Sensoren (Temp, Luftfeuchte, Luftdruck, Wasserstand, Bewegung, CAM u.v.m.) die bis auf das Live-Bild der Cam alle per MQTT gesteuert werden.

    Also: Die senden zum einen ihre Daten per MQTT an einen Broker. Andererseits habe ich denen allen einen Rückkanal verpasst, worüber ich diverse Parameter (Korrekturfaktoren, Abtastzeiten usw.) per MQTT publish steuern kann. Hier kommt ein von mir aufgebautes JSON-Protokoll zum Einsatz, ist aber alles im Prinzip ganz einfach.

    MQTT ist quasi plattform-unabhängig... der Broker kann überall laufen (Raspi, NAS (sic!), Homeassistant, Windows... ), die Abfrage und Steuersoftware (MQTT-Client) ebenfalls.

    Mal so zum An-Denken :)

  • Danke, MQTT hatte ich mir auch schon angesehen.

    Ich habe nun folgende Erkenntnisse:

    Das Board, auf dem Windows 11 installiert ist, bootet weder von PXE (findet es zwar und startet den PXE Boot, lädt dann aber Windows 11), noch von USB (sobald ein bootfähiger USB Stick eingesteckt ist, bleibt der Bildschirm schwarz), eine bootfähige CD/DVD habe ich leider schon lange nicht mehr.
    Daher fällt das alles erstmal raus.

    Jetzt habe ich nochmal den originalen Intel Netzwerkreiber heruntergeladen und installiert, keinerlei Änderung, der ganze Kram funzt einige wenige mal, dann ist wieder beidseitige Stille.

    Allerdings hat sich jetzt etwas geändert:
    nun habe ich verzweifelt nochmals die Netzwerkeinstellungen resettet und im Moment läuft die UDP Übertragung recht stabil.
    Ich hoffe, das bleibt jetzt so.

    Dann mach ich mich mal an die VB.NET Implementierung.

    Beim MQTT muss ich mir das nochmal mit dem Broker anschauen, das habe ich noch nicht ganz geschnallt.

    ;) Gruß Outi :D
    Pis: 2x Pi B, 1x Pi B+, 1x Pi 2 B in Rente / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 / 2x Pi Zero 1.3 / 2x Pi Zero W 1.1 / 1x Pi Zero 2 (BW+CUPS/SANE) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Tests) / Pi 400 (BW) / 1x Pi 5 (BW) / 2x Pi Pico / 2x Pi Pico W
    HATs: Sense HAT / HM-MOD-RPI-PCB / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT / Pi 5 Kühler HAT / Pimoroni NVMe BASE
    Cams: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

  • Schade, alles schon wieder vorbei, ergo muss was anderes her.
    Ich werde mir nun mal MQTT genauer anschauen.

    ;) Gruß Outi :D
    Pis: 2x Pi B, 1x Pi B+, 1x Pi 2 B in Rente / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 / 2x Pi Zero 1.3 / 2x Pi Zero W 1.1 / 1x Pi Zero 2 (BW+CUPS/SANE) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Tests) / Pi 400 (BW) / 1x Pi 5 (BW) / 2x Pi Pico / 2x Pi Pico W
    HATs: Sense HAT / HM-MOD-RPI-PCB / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT / Pi 5 Kühler HAT / Pimoroni NVMe BASE
    Cams: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

  • Habe eben das hier gefunden: https://www.msxfaq.de/code/powershell/psudp.htm

    Da wird beschrieben, wie man per Powershell von Windows aus UDP-Pakete senden und empfangen kann. Vielleicht helfen ja die Returncodes der aufgerufenen Funktionen weiter, wenn es wieder nicht klappt. Dort wird auch ein Tool namens NetMon erwähnt, um UDP-Pakete zu analysieren.

    Zusatzfrage: Wird etwas im Eventlog (Ereignisanzeige) von Windows angezeigt, wenn die Kommunikation nicht klappt?

  • Leider nichts in den Ereignissen aber ich habe es vorerst aufgegeben mit UDP und versuche mich an MQTT.

    Der Broker läuft schon mal und der Arduino kann auch einwandfrei darauf zugreifen.

    Jetzt muss ich nur noch Visual Basic beibringen, Nachrichten an den Arduino zu senden und von ihm zu empfangen ....

    ;) Gruß Outi :D
    Pis: 2x Pi B, 1x Pi B+, 1x Pi 2 B in Rente / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 / 2x Pi Zero 1.3 / 2x Pi Zero W 1.1 / 1x Pi Zero 2 (BW+CUPS/SANE) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Tests) / Pi 400 (BW) / 1x Pi 5 (BW) / 2x Pi Pico / 2x Pi Pico W
    HATs: Sense HAT / HM-MOD-RPI-PCB / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT / Pi 5 Kühler HAT / Pimoroni NVMe BASE
    Cams: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

  • Es existiert eine umfangreiche Software, die unter Windows laufen muss, die eben unter Visual Basic .NET programmiert wurde.
    Das hat den Hintergrund, dass der Nutzer halt nix anderes kann und da selbst gerne hin und wieder Änderungen vornehmen will.
    Da der Datentransfer eben über UDP eine Katastrophe ist, sind wir nun auf MQTT umgeswitcht.
    Weitere Tests mit anderen Win10/Win11 Rechnern ergab, dass das eben mal läuft und mal nicht.

    Jetzt habe ich die MQTT Schnittstelle eingebaut und das Zeug rennt echt zuverlässig und die Broker Geschichte habe ich nun auch geschnallt.
    Den Broker haben wir übrigens vom PC auf eine dauerhaft laufende Synology DiskStation verlagert, dann können sich die Arduinos/ESP32 auch schon an ihm anmelden, wenn der PC noch nicht so weit ist.

    Das Einzige, mit dem ich noch kämpfe, ist die Multithreadverwaltung, da serielle Schnittstelle vom PC (da kommen Daten von einer Maschine an) in einem eigenen Thread arbeitet und die MQTT Schnittstelle selbst ebenfalls.
    Warum das so ist, weiß ich (noch) nicht aber im Groben läuft alles wie gewünscht.
    Nur die Datenübergabe zwischen den Threads muss ich noch genauer studieren.

    Danke nochmal an alle und hierbei handelt es sich um ein Hobby in der Verwandtschaft, daher diese "nüchterne Herangehensweise" ....

    ;) Gruß Outi :D
    Pis: 2x Pi B, 1x Pi B+, 1x Pi 2 B in Rente / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 / 2x Pi Zero 1.3 / 2x Pi Zero W 1.1 / 1x Pi Zero 2 (BW+CUPS/SANE) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Tests) / Pi 400 (BW) / 1x Pi 5 (BW) / 2x Pi Pico / 2x Pi Pico W
    HATs: Sense HAT / HM-MOD-RPI-PCB / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT / Pi 5 Kühler HAT / Pimoroni NVMe BASE
    Cams: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

  • Mal so ins unreine gedacht (Kenn mich bei Windows eher wenig aus) - aber was mir so einfällt (bzw. wie ich erstmal machen würde, ehe ich mich in die Tiefen der Therad-Synchronisierung begeben würde:

    >> Das Windows Programm schreibt seine (zu sendenden) Werte in eine Datei (Format kann ja JSON oder einfach Tag:Value sein).

    >> Ein weiteres Programm (nennen wir es "CHECKER") in (VB, Python, C#) liest zyclisch diese Datei oder wird bei Veränderung aufgerufen (In Linux kann man das machen, Win weiß ich nicht).
    Der CHECKER prüft, ob neue/geänderte Daten vorliegen und sendet diese an den MQTT Broker.

    Vorteil:

    • Gut zu testen, gut wartbar, der CHECKER macht Format- und Datenprüfung.
    • Universell verwendbar, falls mal Erweiterungen (also mehr/andere Daten geschrieben werden sollen)
    • Multi-Daten fähig (Also mehrere Programme können (unterschiedliche) Files schreiben, der CHECKER prüft die alle und sendet die Daten ggf. mit unterschiedlichem Topics / Format (Plain/JSON) in den Broker.
    • In Python ist das recht schnell geschrieben, in VB sicherlich auch

    :)

  • .... getestet und bei allen kam nix mehr durch UDP durch, ....

    BTW: Im Internet findet man C-code zum testen von UDP-Traffic (zwischen Client und Server).
    Siehe z. B. im Anhang (Quelle: Internet, aber genauer unbekannt).

    EDIT:

    Quelle gefunden: https://www.scaler.com/topics/udp-ser…mentation-in-c/


    EDIT 2:

    Display Spoiler

    $ ./udpserverm 127.0.0.1 3344

    $ Downloads/udpclientm 127.0.0.1 3344 'Nachricht vom udp-Client!'
    Message sent: Nachricht vom udp-Client!
    Server : Hello from server

    # udp-server:

    $ Client : Nachricht vom udp-Client! 1
    Hello message sent.1

  • Zentris
    Danke, das ist zwar auch ein Weg und wird in vielen Fällen sicher auch helfen aber ich werde mich da wohl auch für zukünftige eigene Projekte einarbeiten.
    Wichtig war halt erst, dass ein String einer kleinen Maschine per serieller Schnittstelle am PC empfangen, zerlegt, teilweise neu berechnet und dann irgendwie an einen entfernteren Arduino Nano ESP32 gesendet wird.
    Dieser steuert dann einen Schrittmotor.
    Zuerst hatten wir ein USB Kabel als Verbindung gewählt, was aber für die Position des Arduinos zu kurz war und ein längeres Kabel zu verlegen, war nicht drin.
    Dann hatten wir Bluetooth im Auge, was aber auch schnell aufgegeben wurde, da der Sender am PC nur BT kann aber kein BT LE.
    Und der Arduino kann nur BT LE und kein normales BT.
    Also bliebe noch WLan und da finde ich MQTT inzwischen super.

    Das funktioniert inzwischen auch tadellos über MQTT und eröffnet weitere Möglichkeiten.
    Inzwischen hängt sogar ein weiterer Arduino gleichen Bautyps für die Winkelmessung am Broker und kontrolliert den Drehwinkel des Schrittmotors.
    Auch der ist nun easy über MQTT eingebunden und für den Anfang bin ich schon mal begeistert.

    Alles Weitere ist dann nur noch Kosmetik und das bisher verwendete Threading läuft auch ohne Probleme.

    rpi444
    Danke, ich habe inzwischen UDP aufgegeben, TCP war mir zu komplex (Webserver & Co.) und da MQTT auch über TCP läuft, finde ich die Trennung der einzelnen Clients und des Brokers ganz gut.
    Bei UDP war es eh nicht zu 100% sicher, dass die Daten ankommen, da UDP halt ein Verbindungsloses Protokoll ohne (selbst konstruierte) Kontrollmöglichkeiten ist.

    Danke nochmal für die Hilfe und Tipps.

    ;) Gruß Outi :D
    Pis: 2x Pi B, 1x Pi B+, 1x Pi 2 B in Rente / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 / 2x Pi Zero 1.3 / 2x Pi Zero W 1.1 / 1x Pi Zero 2 (BW+CUPS/SANE) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Tests) / Pi 400 (BW) / 1x Pi 5 (BW) / 2x Pi Pico / 2x Pi Pico W
    HATs: Sense HAT / HM-MOD-RPI-PCB / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT / Pi 5 Kühler HAT / Pimoroni NVMe BASE
    Cams: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!