-
Notifications
You must be signed in to change notification settings - Fork 1
/
ESP32_UDP_Server.ino
111 lines (92 loc) · 2.53 KB
/
ESP32_UDP_Server.ino
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
106
107
108
109
110
111
#include <WiFi.h>
#include <WiFiUdp.h>
/**
Diese #defines ggf ändern.
*/
#define MAX_GROESSE_UDP 255
#define UDP_Empfangsport 1234
#define UDP_Sendeport 6565
#define ssid "UDP-ESP32"
#define password "12345678"
#define BROADCAST "192.168.4.255"
String recev;
WiFiUDP Udp;
TaskHandle_t udpTaskHandle;
void setup() {
Serial.begin(115200);
Serial.println();
WiFi.disconnect();
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password, 8);
Udp.begin(UDP_Empfangsport);
xTaskCreatePinnedToCore(&udpTask, "udpTask", 4096, NULL, 1, &udpTaskHandle, 0);
}
/**
Sendet Datenpaket an alle verbundenen Clients an port UDP_Sendeport des AP (Broadcast)
*/
void send(String pNachricht) {
Udp.beginPacket(BROADCAST, UDP_Sendeport);
Udp.println(pNachricht);
Udp.endPacket();
}
/**
Sendet Datenpaket an alle verbundenen Clients an port pPort des AP (Broadcast)
*/
void send(String pNachricht, uint16_t pPort) {
Udp.beginPacket(BROADCAST, pPort);
Udp.println(pNachricht);
Udp.endPacket();
}
/**
Sendet Datenpaket an Client der IP pZielAdresse und Port UDP_Sendeport
*/
void send(String pNachricht, IPAddress pZielAdresse) {
Udp.beginPacket(pZielAdresse, UDP_Sendeport);
Udp.println(pNachricht);
Udp.endPacket();
}
/**
Sendet Datenpaket an Client der IP pZielAdresse und Port pZielPort
*/
void send(String pNachricht, IPAddress pZielAdresse, uint16_t pZielPort) {
Udp.beginPacket(pZielAdresse, pZielPort);
Udp.println(pNachricht);
Udp.endPacket();
}
/**
Antwortet auf ein empfangenes Datenpaket von einem Client an dessen IP sowie Port.
*/
void antworten(String pNachricht) {
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.println(pNachricht);
Udp.endPacket();
}
/*
udpTask lauscht auf zweitem Prozessorkern.
Reagiert auf eingehenden Datenverkehr.
*/
void udpTask(void *pvParameters) {
while (1) {
char incomingPacket[MAX_GROESSE_UDP];
int packetSize = Udp.parsePacket();
if (packetSize) {
int len = Udp.read(incomingPacket, 255);
if (len > 0)
incomingPacket[len] = 0;
recev = String(incomingPacket);
recev.trim();
//Ab hier steht recev zur freien Verfügung um analysiert zu werden o.ä..
//Hier werdne die empfangenen Daten an die Serielle Schnitstelle gesendet.
Serial.println("Empfang: " + recev);
//Antworten mit Echo als Präfix
antworten("Echo " + recev);
}
delay(20);
}
}
void loop() {
/*
Wird für UDP nicht benötigt, steht frei zu Verfügung für Sensoren etc.
*/
delay(1000);
}