#include <WiFi.h>
#include "ThingSpeak.h"
// Define WiFi credentials
char ssid[] = "Wokwi-GUEST"; // network SSID (name)
char pass[] = ""; // network password
WiFiClient client;
// ThingSpeak channel details
unsigned long myChannelNumber = 2630070; //channel number taken from cloud
const char *myWriteAPIKey = "2HOUWXCGEEGEBPLA"; //WriteAPI key of cloud
// Defining Sensor Pins
const int pirPin1 = 35;
const int pirPin2 = 32;
const int pirPin3 = 33;
const int pirPin4 = 25;
const int pirPin5 = 26;
const int ldrPin = 34;
const float GAMMA = 0.7;
const float RL10 = 50;
const int ledPin1 = 2;
const int ledPin2 = 0;
const int ledPin3 = 4;
const int ledPin4 = 16;
const int ledPin5 = 17;
const int ledPin6 = 5;
const int ledPin7 = 18;
// Defining Status Variables
bool motion1 = false;
bool motion2 = false;
bool motion3 = false;
bool motion4 = false;
bool motion5 = false;
bool ledStatus1 = false;
bool ledStatus2 = false;
bool ledStatus3 = false;
bool ledStatus4 = false;
bool ledStatus5 = false;
bool ledStatus6 = false;
bool ledStatus7 = false;
void setup() {
Serial.begin(115200);
Serial.print("Smart Street Lights System\n");
// Initialize ThingSpeak
ThingSpeak.begin(client);
// Connect or reconnect to WiFi
if (WiFi.status() != WL_CONNECTED) {
Serial.print("\nAttempting to connect to SSID: ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass);
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected!");
}
pinMode(pirPin1, INPUT);
pinMode(pirPin2, INPUT);
pinMode(pirPin3, INPUT);
pinMode(pirPin4, INPUT);
pinMode(pirPin5, INPUT);
pinMode(ldrPin, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(ledPin7, OUTPUT);
}
void loop() {
int ldrStatus = analogRead(ldrPin);
ldrStatus = map(ldrStatus, 4095, 0, 1024, 0); //change the LDR sensor reading value from the Arduino ADC value to the ESP3 ADC value
float voltage = ldrStatus / 1024.*5;
float resistance = 2000 * voltage / (1-voltage/5);
float lux = pow(RL10*1e3*pow(10,GAMMA)/resistance,(1/GAMMA));
int pirStatus1 = digitalRead(pirPin1);
int pirStatus2 = digitalRead(pirPin2);
int pirStatus3 = digitalRead(pirPin3);
int pirStatus4 = digitalRead(pirPin4);
int pirStatus5 = digitalRead(pirPin5);
Serial.print("\nLDR: ");
Serial.print(ldrStatus);
Serial.print("\nPIR 1: ");
Serial.print(pirStatus1);
Serial.print(" | PIR 2: ");
Serial.print(pirStatus2);
Serial.print(" | PIR 3: ");
Serial.print(pirStatus3);
Serial.print(" | PIR 4: ");
Serial.print(pirStatus4);
Serial.print(" | PIR 5: ");
Serial.print(pirStatus5);
if (pirStatus1 == HIGH) {
motion1 = true;
} else if (pirStatus2 == HIGH) {
motion2 = true;
} else if (pirStatus3 == HIGH) {
motion3 = true;
} else if (pirStatus4 == HIGH) {
motion4 = true;
} else if (pirStatus5 == HIGH) {
motion5 = true;
} else {
motion1 = false;
motion2 = false;
motion3 = false;
motion4 = false;
motion5 = false;
}
if (lux > 300) {
if (!motion1 && !motion2 && !motion3 && !motion4 && !motion5) {
turnOffAllLEDs();
} else if (ledStatus1 || ledStatus2 || ledStatus3 || ledStatus4 || ledStatus5) {
turnOffAllLEDs();
}
} else {
if (motion1) {
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
ledStatus1 = true;
ledStatus2 = true;
ledStatus3 = true;
} if (motion2) {
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, HIGH);
ledStatus2 = true;
ledStatus3 = true;
ledStatus4 = true;
} if (motion3) {
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, HIGH);
digitalWrite(ledPin5, HIGH);
ledStatus3 = true;
ledStatus4 = true;
ledStatus5 = true;
} if (motion4) {
digitalWrite(ledPin4, HIGH);
digitalWrite(ledPin5, HIGH);
digitalWrite(ledPin6, HIGH);
ledStatus4 = true;
ledStatus5 = true;
ledStatus6 = true;
} if (motion5) {
digitalWrite(ledPin5, HIGH);
digitalWrite(ledPin6, HIGH);
digitalWrite(ledPin7, HIGH);
ledStatus5 = true;
ledStatus6 = true;
ledStatus7 = true;
} if (!motion1 && !motion2 && !motion3 && !motion4 && !motion5) {
turnOffAllLEDs();
}
}
// Set ThingSpeak fields with sensor values
ThingSpeak.setField(1, digitalRead(ledPin1));
ThingSpeak.setField(2, digitalRead(ledPin2));
ThingSpeak.setField(3, digitalRead(ledPin3));
ThingSpeak.setField(4, digitalRead(ledPin4));
ThingSpeak.setField(5, digitalRead(ledPin5));
ThingSpeak.setField(6, digitalRead(ledPin6));
ThingSpeak.setField(7, digitalRead(ledPin7));
// Write to the ThingSpeak channel
int status = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (status == 200) {
Serial.println("\nChannel update successful.");
}
delay(100);
}
void turnOffAllLEDs() {
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, LOW);
ledStatus1 = false;
ledStatus2 = false;
ledStatus3 = false;
ledStatus4 = false;
ledStatus5 = false;
ledStatus6 = false;
ledStatus7 = false;
}