// Smart Street Lighting with ESP32
// 6 Zones:
// Zones 1-3: Each has 1 IR sensor + 1 LED
// Zones 4-6: Each has 1 Ultrasonic sensor + 1 LED
// Common LDR, connected to WiFi (Wokwi-GUEST)
#include <WiFi.h>
// === WiFi Configuration ===
const char* ssid = "Wokwi-GUEST";
const char* password = ""; // Open network
// === Pins ===
// LDR
const int LDR_PIN = 32; // Analog only
// Zone 1 (IR)
const int LED1 = 2;
const int IR1 = 15;
// Zone 2 (IR)
const int LED2 = 4;
const int IR2 = 18;
// Zone 3 (IR)
const int LED3 = 5;
const int IR3 = 19;
// Zone 4 (Ultrason)
const int LED4 = 12;
const int TRIG4 = 21;
const int ECHO4 = 25;
// Zone 5 (Ultrason)
const int LED5 = 13;
const int TRIG5 = 22;
const int ECHO5 = 26;
// Zone 6 (Ultrason)
const int LED6 = 14;
const int TRIG6 = 23;
const int ECHO6 = 27;
// Thresholds
const int LDR_THRESHOLD = 2000; // lower = darker
const int DIST_THRESHOLD = 5; // cm
void setup() {
Serial.begin(115200);
// Setup WiFi
WiFi.begin(ssid, password);
Serial.print("Connexion au WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n✅ Connecté au WiFi !");
Serial.print("Adresse IP : ");
Serial.println(WiFi.localIP());
// LED Outputs
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
// IR Inputs
pinMode(IR1, INPUT);
pinMode(IR2, INPUT);
pinMode(IR3, INPUT);
// Ultrasonic Pins
pinMode(TRIG4, OUTPUT);
pinMode(ECHO4, INPUT);
pinMode(TRIG5, OUTPUT);
pinMode(ECHO5, INPUT);
pinMode(TRIG6, OUTPUT);
pinMode(ECHO6, INPUT);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
}
float readDistanceCM(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH, 30000); // 30ms timeout
float distance = duration * 0.034 / 2;
return distance;
}
void controlIRZone(int ledPin, int irPin, int ldrValue) {
int irValue = digitalRead(irPin);
Serial.print("IR Zone - IR: ");
Serial.print(irValue);
Serial.print(" | LDR: ");
Serial.println(ldrValue);
if (ldrValue < LDR_THRESHOLD && irValue == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
void controlUltraZone(int ledPin, int trigPin, int echoPin, int ldrValue) {
float distance = readDistanceCM(trigPin, echoPin);
Serial.print("Ultrason Zone - Distance: ");
Serial.print(distance);
Serial.print(" cm | LDR: ");
Serial.println(ldrValue);
if (ldrValue < LDR_THRESHOLD && distance > 0 && distance < DIST_THRESHOLD) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
void loop() {
int ldrValue = analogRead(LDR_PIN);
// Zones with IR
controlIRZone(LED1, IR1, ldrValue);
controlIRZone(LED2, IR2, ldrValue);
controlIRZone(LED3, IR3, ldrValue);
// Zones with Ultrason
controlUltraZone(LED4, TRIG4, ECHO4, ldrValue);
controlUltraZone(LED5, TRIG5, ECHO5, ldrValue);
controlUltraZone(LED6, TRIG6, ECHO6, ldrValue);
delay(500);
}