The ESP32 is a powerful microcontroller with Wi-Fi and Bluetooth capabilities, making it perfect for network-based applications. In this tutorial, you’ll learn how to use your ESP32 to act as a TCP server, listening for incoming TCP packets on a specific port.
Requirements
- An ESP32 development board
- Arduino IDE with ESP32 board support installed
- A USB cable
- A Wi-Fi network (SSID and password)
- A TCP client (can be a PC with tools like telnet, netcat, or a custom app)
Set Up the Arduino IDE for ESP32
If you haven’t already:
-
Open Arduino IDE.
-
Go to File > Preferences, and in the “Additional Board Manager URLs”, add: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
-
Go to Tools > Board > Boards Manager, search for esp32, and install the package.
-
Select your ESP32 board under Tools > Board.
The TCP Server Code
Here’s a simple sketch that creates a TCP server on port 8080:
#include <WiFi.h>
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
WiFiServer tcpServer(8080); // Listen on port 8080
void setup() {
Serial.begin(115200);
delay(1000);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" connected!");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Start the server
tcpServer.begin();
Serial.println("TCP server started on port 8080");
}
void loop() {
WiFiClient client = tcpServer.available(); // Check for incoming clients
if (client) {
Serial.println("Client connected!");
while (client.connected()) {
if (client.available()) {
String data = client.readStringUntil('\n');
Serial.print("Received: ");
Serial.println(data);
client.println("Data received."); // Echo back
}
}
client.stop();
Serial.println("Client disconnected.");
}
}
Testing the TCP Server
-
Upload the code to your ESP32.
-
Open the Serial Monitor (baud 115200) and wait for the ESP32 to connect to Wi-Fi.
-
Note the IP address shown.
From a PC:
If you’re on Windows/Linux/macOS, use telnet or netcat:
Then type a message and press Enter. You should see it printed in the Serial Monitor and echoed back.
Notes & Troubleshooting
-
Ensure your PC and ESP32 are on the same Wi-Fi network.
-
Some networks (like guest networks) may block TCP connections.
-
You can change the listening port by modifying the WiFiServer tcpServer(8080); line.
-
You can add custom logic to parse and respond to commands from the client.
Use Cases
-
Remote monitoring/control of sensors or relays
-
Data logging from a mobile app or PC
-
Creating a simple REST-like TCP interface
What’s Next?
-
Try handling multiple clients using a WiFiClient array.
-
Add encryption using SSL (with WiFiServerSecure).
-
Combine with sensors and actuators to build interactive IoT projects.
If you found this guide helpful, feel free to bookmark it or share it with fellow tinkerers! 😊 Let me know if you want a follow-up article with enhancements like handling multiple clients or sending sensor data.