Hardware Connection Diagram
| ESP32 Pin | Component | Connection |
|---|---|---|
| 3.3V | LED+ (via 220Ω) | Anode of LED |
| GPIO2 | LED- | Cathode to resistor |
| GPIO0 | Button | One side to GPIO0, other to GND |
| GND | Button | Common ground |
Arduino IDE Code
#include <WiFi.h>
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
const int ledPin = 2; // LED control pin
const int buttonPin = 0; // Button input pin
WiFiServer server(80);
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // Enable internal pull-up
// WiFi connection with status feedback
WiFi.begin(ssid, password);
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected! IP: " + WiFi.localIP().toString());
server.begin();
}
void loop() {
// Handle HTTP requests
WiFiClient client = server.available();
if (client) {
String req = client.readStringUntil('\r');
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/plain");
client.println();
// Remote control commands
if (req.indexOf("/ON") != -1) digitalWrite(ledPin, HIGH);
if (req.indexOf("/OFF") != -1) digitalWrite(ledPin, LOW);
client.print("LED status: ");
client.println(digitalRead(ledPin) == HIGH ? "ON" : "OFF");
client.stop();
}
// Local button control with debounce
if (digitalRead(buttonPin) == LOW) {
digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle LED
delay(200); // Debounce delay
while (digitalRead(buttonPin) == LOW); // Wait for release
}
}

