#define BLYNK_TEMPLATE_ID "TMPL3hlpgNA_N"
#define BLYNK_TEMPLATE_NAME "Traffic Monitoring System"
#define BLYNK_AUTH_TOKEN "7WxX4li19oGfNeWLSqIU6pWCrsckjY-n"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <HTTPClient.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // Use the Wokwi Guest network
char pass[] = "";
const int trigPin = 5;
const int echoPin = 18;
const int redLED = 23;
const int yellowLED = 22;
const int greenLED = 21;
long duration;
int distance;
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
// Connect to Wi-Fi
WiFi.begin(ssid, pass);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print('.');
}
Serial.println("\nConnected to WiFi");
Blynk.begin(auth, ssid, pass);
}
void sendTrafficData(int distance) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("https://eovuqitnlsdyxir.m.pipedream.net"); // Replace with your Pipedream RequestBin URL
http.addHeader("Content-Type", "application/json");
String postData = "{\"distance\":" + String(distance) + "}";
int httpResponseCode = http.POST(postData);
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println(httpResponseCode);
Serial.println(response);
} else {
Serial.print("\nError on sending POST: ");
Serial.println(httpResponseCode);
}
http.end();
} else {
Serial.println("\nWiFi Disconnected");
}
}
void loop() {
Blynk.run();
// Clear the trigPin by setting it LOW
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Set the trigPin HIGH for 10 microseconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculate the distance
distance = duration * 0.034 / 2;
Serial.print("\nDistance: ");
Serial.print(distance);
// Send the distance to the Blynk app
// Traffic light logic based on distance
if (distance < 100) {
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
Serial.print("\nHeavy Traffic Detected: Red Light ON");
} else if (distance < 200) {
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
Serial.print("\nModerate Traffic Detected: Yellow Light ON");
} else {
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
Serial.print("\nLow Traffic Detected: Green Light ON");
}
// Send traffic data to the server
sendTrafficData(distance);
Blynk.virtualWrite(V3, distance);
delay(10000); // Send data every 10 seconds
}