#include <WiFi.h>
#include <ThingESP.h>
// --- ThingESP Setup ---
ThingESP32 thing("mohamedajas", "LEDControl", "ICT323");
// Ultrasonic sensor pins
#define TRIG 25
#define ECHO 26
// Traffic LEDs
#define RED_LED 19
#define YELLOW_LED 17
#define GREEN_LED 16
long duration;
int distance;
unsigned long previousMillis = 0;
const long INTERVAL = 6000; // Prevent sending messages too often
// --- Forward Declarations ---
void measureDistance();
void sendWhatsAppAlert();
// --- ThingESP handler function ---
String customResponse(String msg) {
if (msg == "alert") {
return "🚨 Vehicle crossed RED signal! (Simulated in Wokwi)";
}
return "Unknown command: " + msg;
}
void setup() {
Serial.begin(115200);
// --- ThingESP WiFi & Init for Wokwi ---
thing.SetWiFi("Wokwi-GUEST", "");
thing.initDevice();
// --- Pin Modes ---
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(RED_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
}
void loop() {
// Handle ThingESP communications
thing.Handle();
// --- Traffic Light Sequence ---
digitalWrite(GREEN_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(RED_LED, LOW);
delay(5000); // Green for 5s
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
delay(2000); // Yellow for 2s
digitalWrite(YELLOW_LED, LOW);
digitalWrite(RED_LED, HIGH); // Red ON
delay(500); // small delay before detection
// --- Monitor for vehicle crossing during RED ---
measureDistance();
if (distance > 0 && distance < 15) { // Threshold 15cm
sendWhatsAppAlert();
delay(2000); // Avoid multiple messages
}
delay(5000); // Red duration
digitalWrite(RED_LED, LOW); // Turn off red
}
// --- Function Definitions ---
void measureDistance() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
duration = pulseIn(ECHO, HIGH);
distance = duration * 0.034 / 2; // cm
Serial.print("Distance: ");
Serial.println(distance);
}
void sendWhatsAppAlert() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= INTERVAL) { // Throttle messages
previousMillis = currentMillis;
// Simulate sending WhatsApp by calling customResponse
String response = customResponse("alert");
Serial.println("Message sent: " + response);
}
}