✅ ESP32 + DHT11 + WiFi Terminal (Connect to Running WiFi)
#include <WiFi.h>
#include <DHT.h>
// -------------------- WiFi Credentials --------------------
const char* ssid = "YOUR_WIFI_NAME";
const char* password = "YOUR_WIFI_PASSWORD";
// -------------------- DHT Setup --------------------
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// -------------------- WiFi Server Setup --------------------
// Port 23 = Telnet Terminal Port
WiFiServer server(23);
WiFiClient client;
void setup() {
Serial.begin(115200);
// Start DHT Sensor
dht.begin();
// -------------------- Connect ESP32 to WiFi --------------------
Serial.print("Connecting to WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n✅ WiFi Connected Successfully!");
Serial.print("🌐 ESP32 IP Address: ");
Serial.println(WiFi.localIP());
// -------------------- Start WiFi Server --------------------
server.begin();
Serial.println("✅ WiFi Terminal Server Started on Port 23");
}
void loop() {
// -------------------- Wait for Client Connection --------------------
if (!client || !client.connected()) {
client = server.available();
return;
}
// DHT11 needs 2 seconds delay between readings
delay(2000);
// -------------------- Read DHT11 Data --------------------
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// -------------------- Check for Sensor Error --------------------
if (isnan(humidity) || isnan(temperature)) {
client.println("❌ Failed to read from DHT11 sensor!");
Serial.println("❌ Failed to read from DHT11 sensor!");
return;
}
// -------------------- Send Data to WiFi Terminal --------------------
client.print("🌡 Temperature: ");
client.print(temperature);
client.print(" °C | ");
client.print("💧 Humidity: ");
client.print(humidity);
client.println(" %");
// -------------------- Print on Serial Monitor --------------------
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C | Humidity: ");
Serial.print(humidity);
Serial.println(" %");
}
🔌 Wiring (DHT11 → ESP32)
| DHT11 Pin | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| DATA | GPIO4 |
📱 How to Use WiFi Terminal App (Step-by-Step)
✅ Step 1: Upload Code
Upload to ESP32.
✅ Step 2: Open Serial Monitor (115200)
You will see output like:
✅ Step 3: Connect Phone to SAME WiFi
Your phone must be connected to the same WiFi router.
Example:
-
ESP32 connected to: WiFi Router
-
Phone also connected to: WiFi Router
✅ Step 4: Open WiFi Terminal App
Enter:
-
Host/IP:
192.168.1.25(your ESP32 IP) -
Port:
23
Press Connect
✅ Output in Terminal App
🧠 FULL DETAILED CODE EXPLANATION (Teaching Style)
✅ 1) Libraries
🔹 WiFi.h
Used for:
-
Connecting ESP32 to WiFi
-
Creating TCP server
-
Sending data to phone app
🔹 DHT.h
Used for:
-
Reading temperature
-
Reading humidity
✅ 2) WiFi Credentials
This is your router WiFi name and password.
✅ 3) DHT Setup
-
GPIO4 is used as DHT data pin
-
DHT11 sensor type selected
✅ 4) Create WiFi Terminal Server
🔹 server(23)
Creates a TCP server on port 23.
Terminal apps connect to port 23 using Telnet style.
🔹 client
Stores the phone connection.
✅ 5) setup() Runs once
🔹 Start Serial
For debugging and IP display.
🔹 Start DHT
Initializes sensor.
🔹 Connect to WiFi
Starts WiFi connection.
🔹 Wait until connected
This loop runs until ESP32 gets WiFi connection.
🔹 Print IP Address
This is the IP you will use in terminal app.
Example:
🔹 Start Server
Starts the TCP server.
Now phone can connect.
✅ 6) loop() Runs forever
🔹 Check phone connected
Meaning:
-
If phone not connected → wait
-
If phone connects → store connection
🔹 Delay 2 seconds
Required for DHT11.
🔹 Read sensor values
Reads sensor.
🔹 Check NAN error
If sensor fails, values become NAN.
🔹 Send to terminal app
This sends output to phone WiFi terminal.
⚠ Common Issues & Fix
❌ Terminal not connecting
✅ Check:
-
Phone and ESP32 must be on SAME WiFi
-
Correct IP address
-
Correct port 23
❌ Port 23 not working
Change to 8080:
Then terminal port = 8080