1. Introduction
- I made a TCP/IP demo in Demo 8: How to use TCP/IP with Arduino ESP32 so in this tutorial I will make a demo with UDP and apply tutorial How to make IoT testing/debugging application (TCP, UDP, HTTP, MQTT) using Python for testing.
- Create a UDP server using Python and Arduino ESP32 UDP client. Client will send the data to server, server convert to upper case and respond to client.
2. Hardware
You do not need any extra hardware.
3. Software
- In order to make a UDp client in Arduino ESP32, we will use class WiFiUDP. It has some interfaces:
+ begin(port): initialize UDP protocol and transfer buffer.
+ beginPacket(udpAddress, udpPort): prepare sending data to server at IP and port.
+ write(buffer, size of buffer): send data buffer with size of it.
+ endPacket(): end of sending.
+ parsePacket(): processing incoming packet, must be called before reading the buffer.
+ read(buffer, size of buffer): read incoming data into buffer.
3.1 Python server
3.2 Arduino ESP32 UDP client
4. Result
- I made a TCP/IP demo in Demo 8: How to use TCP/IP with Arduino ESP32 so in this tutorial I will make a demo with UDP and apply tutorial How to make IoT testing/debugging application (TCP, UDP, HTTP, MQTT) using Python for testing.
- Create a UDP server using Python and Arduino ESP32 UDP client. Client will send the data to server, server convert to upper case and respond to client.
2. Hardware
You do not need any extra hardware.
3. Software
- In order to make a UDp client in Arduino ESP32, we will use class WiFiUDP. It has some interfaces:
+ begin(port): initialize UDP protocol and transfer buffer.
+ beginPacket(udpAddress, udpPort): prepare sending data to server at IP and port.
+ write(buffer, size of buffer): send data buffer with size of it.
+ endPacket(): end of sending.
+ parsePacket(): processing incoming packet, must be called before reading the buffer.
+ read(buffer, size of buffer): read incoming data into buffer.
3.1 Python server
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 | import socket # bind all IP HOST = '0.0.0.0' # Listen on Port PORT = 44444 #Size of receive buffer BUFFER_SIZE = 1024 # Create a TCP/IP socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Bind the socket to the host and port s.bind((HOST, PORT)) while True: # Receive BUFFER_SIZE bytes data # data is a list with 2 elements # first is data #second is client address data = s.recvfrom(BUFFER_SIZE) if data: #print received data print('Client to Server: ' , data) # Convert to upper case and send back to Client s.sendto(data[0].upper(), data[1]) # Close connection s.close() |
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 | #include <WiFi.h> #include <WiFiUdp.h> /* WiFi network name and password */ const char * ssid = "dd-wrt"; const char * pwd = "0000000000"; // IP address to send UDP data to. // it can be ip address of the server or // a network broadcast address // here is broadcast address const char * udpAddress = "192.168.1.100"; const int udpPort = 44444; //create UDP instance WiFiUDP udp; void setup(){ Serial.begin(115200); //Connect to the WiFi network WiFi.begin(ssid, pwd); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } void loop(){ //data will be sent to server uint8_t buffer[50] = "hello world"; //This initializes udp and transfer buffer udp.beginPacket(udpAddress, udpPort); udp.write(buffer, 11); udp.endPacket(); memset(buffer, 0, 50); //processing incoming packet, must be called before reading the buffer udp.parsePacket(); //receive response from server, it will be HELLO WORLD if(udp.read(buffer, 50) > 0){ Serial.print("Server to client: "); Serial.println((char *)buffer); } //Wait for 1 second delay(1000); } |
Figure: UDP/IP with Arduino ESP32
5 Comments
If the ESP32 only needs the udpAddress "udp.beginPacket(udpAddress, udpPort)", when do we need the localIP 192.168.1.108?
Thanks