#include <WiFi.h>
#include <ThingSpeak.h>
#include <DHTesp.h>
#include <IRremote.h>
#include <LiquidCrystal_I2C.h>
// Define LED pins
const int ledPin1 = 2;
const int ledPin2 = 4;
const int ledPin3 = 5;
const int ledPin4 = 19;
// Define PIR motion sensor pins
const int pirPin1 = 13;
const int pirPin2 = 12;
const int pirPin3 = 14;
const int pirPin4 = 26;
// Define DHT22 pin
const int DHT_PIN = 33;
// Define IR receiver pin
const int irPin = 27;
// Define buzzer pin
const int buzzerPin = 25;
// Initialize DHT sensor
DHTesp dhtSensor;
// Initialize IR receiver
IRrecv irrecv(irPin);
decode_results results;
// Initialize LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16-column, 2-row display
// WiFi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = " ";
// ThingSpeak settings
const unsigned long myChannelNumber = 2451496;
const char * myWriteAPIKey = "96ISK7GELICIPP6H";
// Initialize WiFi client
WiFiClient client;
void setup() {
Serial.begin(9600);
// Initialize LED pins
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
// Initialize PIR motion sensor pins
pinMode(pirPin1, INPUT);
pinMode(pirPin2, INPUT);
pinMode(pirPin3, INPUT);
pinMode(pirPin4, INPUT);
// Initialize IR receiver
irrecv.enableIRIn();
// Initialize buzzer
pinMode(buzzerPin, OUTPUT);
// Initialize DHT sensor
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Initialize LCD
lcd.init();
lcd.backlight();
// Connect to WiFi
connectToWiFi();
// Initialize ThingSpeak
ThingSpeak.begin(client);
}
void loop() {
// Read PIR sensor states
int pirState1 = digitalRead(pirPin1);
int pirState2 = digitalRead(pirPin2);
int pirState3 = digitalRead(pirPin3);
int pirState4 = digitalRead(pirPin4);
// Update LED states based on PIR sensor states
digitalWrite(ledPin1, pirState1);
digitalWrite(ledPin2, pirState2);
digitalWrite(ledPin3, pirState3);
digitalWrite(ledPin4, pirState4);
// Read temperature and humidity from DHT sensor
float temperature = dhtSensor.getTemperature();
float humidity = dhtSensor.getHumidity();
// Read IR receiver input
if (irrecv.decode(&results)) {
// Print the received IR code to Serial Monitor
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
// Sound the buzzer if any PIR sensor is triggered
if (pirState1 || pirState2 || pirState3 || pirState4) {
tone(buzzerPin, 1000); // Sound the buzzer at 1000Hz frequency
} else {
noTone(buzzerPin); // Stop the buzzer
}
// Display temperature and humidity on LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print(" %");
// Send data to ThingSpeak
ThingSpeak.writeField(myChannelNumber, 1, pirState1, myWriteAPIKey);
ThingSpeak.writeField(myChannelNumber, 2, pirState2, myWriteAPIKey);
ThingSpeak.writeField(myChannelNumber, 3, pirState3, myWriteAPIKey);
ThingSpeak.writeField(myChannelNumber, 4, pirState4, myWriteAPIKey);
ThingSpeak.writeField(myChannelNumber, 5, temperature, myWriteAPIKey);
ThingSpeak.writeField(myChannelNumber, 6, humidity, myWriteAPIKey);
delay(1000); // Wait for 1 second before sending next update
}
void connectToWiFi() {
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting...");
}
Serial.println("Connected to WiFi");
}