

Verschiedenfarbige LEDs sollen mit Hilfe des UDP-Protokolls im lokalen Netzwerk geschaltet werden. Das User Datagramm Protokoll (UDP) dient dazu, Nachrichten in einem Netzwerk zu verschicken.
Hierzu muss die IP-Adresse des Empfängers und der verwendete Anschluss bekannt sein.
Die Daten werden mit einem entsprechendem Programm oder über eine App übertragen.
Software und Apps für UDP
| Apps | UDP/TCP/Rest Network Utility (iOS) TCP-UDP Client (iOS) UDP-Terminal (iOS Kostenpflichtig) UDP-Sender (Android) |
| Software | Packet Sender (Windows, Linux, Mac) 🔗 Packetsender |
Das Programm Packet Sender:

Die App TCP-UDP Client:
![]() | ![]() |
| Art der Verbindung wählen | Befehl senden |
Benötigte Bauteile:
- 5 LEDs
- 3 Widerstände 220 Ω (gelbe, rote und grüne LED)
- 2 Widerstände 100 Ω (blaue und weiße LED)
- Leitungsdrähte

Beachte die ⇒Vorwiderstände verschiedener LEDs
Vorbereitungen:

Installiere mit dem Boardverwalter das passende Board:
Benötigte Bibliothek:

oder: Sketch -> Bibliothek einbinden -> Bibliotheken verwalten
Für das Programm brauchst du eine freie IP-Adresse in deinem lokalen Netzwerk.
Im Regelfall befindet sich in einem lokalen Netzwerk ein DHCP-Server, der jedem Gerät im Netzwerk automatisch eine IP-Adresse zuteilt. Im Programm wird eine über DHCP vergebene Adresse verwendet.

Im Seriellen Monitor werden die Schaltbefehle angezeigt:

Binde die benötigten Bibliotheken ein und definiere die Variablen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | // UNO R4 WiFi // #include “WiFiS3.h” // Nano IoT33, MKR WiFi 1010 #include “WiFiNINA.h” #include “WiFiUdp.h” // Status bestimmt, ob die jeweilige LED an oder aus ist // alle LEDS beim Start aus bool Status[5] = { 0, 0, 0, 0, 0 }; // die LEDs Startwert gelbe LED an Pin 6 enum Farben { GELB = 6, BLAU, ROT, WEISS, GRUEN }; // festeIP = false -> IP-Adresse über DHCP vergeben // festeIP = true -> IP festlegen bool festeIP = false; // feste IP IPAddress ip(192, 168, 1, 200); // Netzwerkstatus int status = WL_IDLE_STATUS; // Router: Name des Routers // Passwort: WLAN-Passwort char Router[] = “RouterSSID”; char Passwort[] = “xxxxxxx”; // lokaler Port #define Port 9000 // char-Array für die empfangenen Paket char Pakete[255]; // Variable für den Befehl des Schaltvorgangs byte Schalten; WiFiUDP Udp; |
Der setup-Teil. Beachte die Kommentare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | void setup() { Serial.begin(9600); // auf serielle Verbindung warten while (!Serial); delay(1000); if (festeIP) WiFi.config(ip); // Verbindung aufbauen if (WiFi.status() == WL_NO_MODULE) { Serial.println(F(“Verbindungsaufbau gescheitert!”)); } Serial.print(“Verbindung aufbauen mit ”); Serial.println(Router); while (status != WL_CONNECTED) { status = WiFi.begin(Router, Passwort); // Zeit für den Verbindungsaufbau // wenn die Verbindung nicht zustandekommt -> Zeit vergrößern delay(500); } // pinMode: Startwert ⇒ GELB, Endwert ⇒ GRUEN for (int i = GELB; i <= GRUEN; i++) { pinMode(i, OUTPUT); } // IP des Servers/des verbunden Computers anzeigen Serial.print(“Server: ”); Serial.println(WiFi.SSID()); // IP des Arduinos anzeigen if (festeIP) Serial.print(“Statische IP Adresse Arduino: ”); else Serial.print(“IP Adresse Arduino DHCP: ”); Serial.println(WiFi.localIP()); Udp.begin(Port); } |
Der loop-Teil. Beachte die Kommentare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | void loop() { // gesendete Pakete abfragen UDPAbfragen(); // Schalten enthält die Anweisung welche LEDs geschaltet werden sollen switch (Schalten) { // Lauflicht case 10: Serial.print(“gesendeter Befehl: ”); Serial.print(Schalten); Serial.println(“ -> Lauflicht”); Lauflicht(); break; case 11: // gelbe LED Status[0] = !Status[0]; Serial.print(“gesendeter Befehl: ”); Serial.print(Schalten); if (!Status[0]) { Serial.println(“ -> gr\u00fcne LED ausschalten”); } else Serial.println(“ -> gr\u00fcne LED einschalten”); digitalWrite(GRUEN, Status[0]); break; case 12: // blaue LED Status[1] = !Status[1]; Serial.print(“gesendeter Befehl: ”); Serial.print(Schalten); if (!Status[1]) { Serial.println(“ -> wei\u00dfe LED ausschalten”); } else Serial.println(“ -> wei\u00dfe LED einschalten”); digitalWrite(WEISS, Status[1]); break; case 13: // rote LED Status[2] = !Status[2]; Serial.print(“gesendeter Befehl: ”); Serial.print(Schalten); if (!Status[2]) { Serial.println(“ -> rote LED ausschalten”); } else Serial.println(“ -> rote LED einschalten”); digitalWrite(ROT, Status[2]); break; case 14: // weiße LED Status[3] = !Status[3]; Serial.print(“gesendeter Befehl: ”); Serial.print(Schalten); if (!Status[3]) { Serial.println(“ -> blaue LED ausschalten”); } else Serial.println(“ -> blaue LED einschalten”); digitalWrite(BLAU, Status[3]); break; case 15: // grüne LED Status[4] = !Status[4]; Serial.print(“gesendeter Befehl: ”); Serial.print(Schalten); if (!Status[4]) { Serial.println(“ -> gelbe LED ausschalten”); } else Serial.println(“ -> gelbe LED einschalten”); digitalWrite(GELB, Status[4]); break; case 16: // alle einschalten Serial.print(“gesendeter Befehl: ”); Serial.print(Schalten); Serial.println(“ -> alle einschalten”); AlleAn(); break; // alle ausschalten case 17: Serial.print(“gesendeter Befehl: ”); Serial.print(Schalten); Serial.println(“-> alle ausschalten”); AlleAus(); break; default: break; } // Schaltbefehl löschen Schalten = 0; } |
Jetzt fehlen noch die Funktionen UDPAbfragen(), Lauflicht(), AlleAn() und AlleAus():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | void Lauflicht() { AlleAus(); for (int i = GELB; i <= GRUEN; i++) { // aktuelle LED i einschalten digitalWrite(i, HIGH); delay(200); // aktuelle LED i ausschalten digitalWrite(i, LOW); } for (int i = GRUEN; i >= GELB; i–) { // aktuelle LED i einschalten digitalWrite(i, HIGH); delay(200); // aktuelle LED i ausschalten digitalWrite(i, LOW); } } void AlleAn() { for (int i = GELB; i <= GRUEN; i++) { // aktuelle LED i ausschalten digitalWrite(i, HIGH); } // Status für alle LEDs auf 1 setzen for (int i = 0; i < sizeof(Status); i++) { Status[i] = 1; } } void AlleAus() { for (int i = GRUEN; i <= GELB; i++) { // aktuelle LED i ausschalten digitalWrite(i, LOW); } // Status für alle LEDs auf 0 setzen for (int i = 0; i < sizeof(Status); i++) { Status[i] = 0; } } |
Letzte Aktualisierung:







