#include <WiFi.h>
#include <WebServer.h>
#include <ESP32Servo.h> // ✅ use ESP32 version
// WiFi credentials (Wokwi supports WiFi simulation with "wokwi-gateway")
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Define pin numbers for LEDs and buttons
const int ledPins[] = {15, 2, 4, 16, 17}; // LEDs from left to right
const int redButtonPin = 19; // Red button (left button) pin
const int greenButtonPin = 18; // Green button (right button) pin
Servo myServo; // Servo object
WebServer server(80); // HTTP server on port 80
int servoAngle = 90; // track servo position
String lastButton = "none";
// --- Helper: Send JSON response
void sendJson() {
String json = "{\"button\":\"" + lastButton + "\",\"servo\":" + String(servoAngle) + "}";
server.send(200, "application/json", json);
}
void setup() {
// Initialize LED pins as OUTPUT
for (int i = 0; i < 5; i++) {
pinMode(ledPins[i], OUTPUT);
}
// Initialize button pins as INPUT with internal pull-up resistors
pinMode(redButtonPin, INPUT_PULLUP);
pinMode(greenButtonPin, INPUT_PULLUP);
// Attach the servo to pin 25
myServo.attach(25);
// Initialize the servo at neutral position
myServo.write(servoAngle);
// Start Serial
Serial.begin(115200);
Serial.println("Connecting to WiFi...");
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
Serial.print("ESP32 IP Address: ");
Serial.println(WiFi.localIP());
// Setup web routes
server.on("/status", sendJson);
server.begin();
}
void loop() {
server.handleClient();
// Red button → move servo left
if (digitalRead(redButtonPin) == LOW) {
blinkLedsRightToLeft();
moveServoLeft();
lastButton = "red";
sendJson(); // Update JSON
delay(500); // Debounce
}
// Green button → move servo right
if (digitalRead(greenButtonPin) == LOW) {
blinkLedsLeftToRight();
moveServoRight();
lastButton = "green";
sendJson(); // Update JSON
delay(500); // Debounce
}
}
// Blink LEDs from right to left
void blinkLedsRightToLeft() {
for (int i = 4; i >= 0; i--) {
digitalWrite(ledPins[i], HIGH);
delay(300);
digitalWrite(ledPins[i], LOW);
}
}
// Blink LEDs from left to right
void blinkLedsLeftToRight() {
for (int i = 0; i < 5; i++) {
digitalWrite(ledPins[i], HIGH);
delay(300);
digitalWrite(ledPins[i], LOW);
}
}
// Move the servo to the left (0 degrees)
void moveServoLeft() {
servoAngle = 0;
myServo.write(servoAngle);
delay(1000);
}
// Move the servo to the right (180 degrees)
void moveServoRight() {
servoAngle = 180;
myServo.write(servoAngle);
delay(1000);
}