
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:
// 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.
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.
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():
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;
}
}
Verwandte Anleitungen:
Letzte Aktualisierung: