#include <WiFi.h>
#include <MFRC522.h>
#include <HTTPClient.h>
#include <DHT.h>
// Define pins for RFID
#define SS_PIN 21
#define RST_PIN 22
// Define pins for sensors and actuators
#define QR_BUTTON_PIN 32
#define QR_LED_PIN 33
#define TRIG_PIN 5
#define ECHO_PIN 18
#define TRAFFIC_DENSITY_PIN 34
#define CROWDING_ALERT_PIN 35
#define RED_LED_PIN 25
#define YELLOW_LED_PIN 26
#define GREEN_LED_PIN 27
// RFID module
MFRC522 rfid(SS_PIN, RST_PIN);
// DHT sensor
DHT dht(CROWDING_ALERT_PIN, DHT22);
// Wi-Fi credentials
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
// Server endpoint
const char* serverName = "http://your_server.com/api/traffic-data";
void setup() {
Serial.begin(115200);
// Initialize RFID
SPI.begin();
rfid.PCD_Init();
// Initialize DHT sensor
dht.begin();
// Initialize Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Initialize pins
pinMode(QR_BUTTON_PIN, INPUT_PULLUP);
pinMode(QR_LED_PIN, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(YELLOW_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
// Set initial LED states
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, HIGH); // Start with green
}
void loop() {
// RFID Reading
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
Serial.println("RFID Tag Detected");
// Send data to server
sendData("rfid", rfid.uid.uidByte, rfid.uid.size);
delay(1000);
rfid.PICC_HaltA();
}
// QR Code Simulation
if (digitalRead(QR_BUTTON_PIN) == LOW) {
Serial.println("QR Code Scanned");
digitalWrite(QR_LED_PIN, HIGH);
delay(1000);
digitalWrite(QR_LED_PIN, LOW);
// Send data to server
sendData("qr", "QR Code Scanned", 0);
}
// Parking Space Tracking
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = (duration / 2) * 0.0343;
if (distance < 100) { // Example threshold
Serial.println("Parking Spot Occupied");
// Send data to server
sendData("parking", "Occupied", distance);
} else {
Serial.println("Parking Spot Available");
// Send data to server
sendData("parking", "Available", distance);
}
// Traffic Jam Monitoring
int trafficDensity = analogRead(TRAFFIC_DENSITY_PIN);
Serial.print("Traffic Density: ");
Serial.println(trafficDensity);
// Crowding Alerts
int crowdDensity = analogRead(CROWDING_ALERT_PIN);
Serial.print("Crowd Density: ");
Serial.println(crowdDensity);
if (trafficDensity > 2000 || crowdDensity > 2000) { // Example thresholds
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
Serial.println("Traffic Jam Detected! Signal Red.");
sendData("traffic", "Jam Detected", trafficDensity);
} else {
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, HIGH);
Serial.println("Traffic Flowing. Signal Green.");
sendData("traffic", "Flowing", trafficDensity);
}
delay(2000); // Delay between cycles
}
void sendData(const char* sensorType, const char* data, int value) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(serverName);
http.addHeader("Content-Type", "application/json");
String jsonData = "{\"sensor\":\"" + String(sensorType) + "\",\"data\":\"" + String(data) + "\",\"value\":" + String(value) + "}";
int httpResponseCode = http.POST(jsonData);
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println(httpResponseCode);
Serial.println(response);
} else {
Serial.print("Error on sending POST: ");
Serial.println(httpResponseCode);
}
http.end();
} else {
Serial.println("Error in WiFi connection");
}
}