#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <WiFi.h>
#include <ThingSpeak.h>
#define DHTPIN 4
#define DHTTYPE DHT11
#define TRIG_PIN 5
#define ECHO_PIN 18
#define LIGHT_PIN 23
#define PIR_PIN 19
LiquidCrystal_I2C lcd (0x27, 16, 2);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
unsigned long myChannelNumber = 2597177;
const char* myWriteAPIKey = "RTMWEN8VLSD9R8T0";
WiFiClient client;
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LIGHT_PIN, OUTPUT);
pinMode(PIR_PIN, INPUT);
Wire.begin(21, 22);
lcd.init();
lcd.backlight();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
ThingSpeak.begin(client);
Serial.println("Setup complete");
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
int pirState = digitalRead(PIR_PIN);
if (t > 25) { // Fan ON if temperature > 25 degrees Celsius
fanStatus = "ON";
} else {
fanStatus = "OFF";
}
String doorStatus;
if (distance > 20 && distance < 40) {
doorStatus = "DOOR OPEN";
} else {
doorStatus = "DOOR CLOSE";
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Fan:");
lcd.print(fanStatus);
if (pirState == HIGH) {
lcd.setCursor(8, 1);
lcd.print("MOTION:D"); // D for Detected
digitalWrite(LIGHT_PIN, HIGH);
Serial.println("People found in room, lights on");
} else {
lcd.setCursor(8, 1);
lcd.print("MOTION:N"); // N for Not detected
digitalWrite(LIGHT_PIN, LOW);
}
// Display door status on LCD
lcd.setCursor(0, 2);
lcd.print(doorStatus);
// Print details to Serial Monitor
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" C");
Serial.print("Humidity: ");
Serial.print(h);
Serial.println(" %");
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
if (pirState == HIGH) {
Serial.println("Motion Detected: YES");
} else {
Serial.println("Motion Detected: NO");
}
Serial.print("Fan: ");
Serial.println(fanStatus);
Serial.print("Door: ");
Serial.println(doorStatus);
// Upload data to ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
ThingSpeak.setField(1, t);
ThingSpeak.setField(2, pirState);
ThingSpeak.setField(3, doorStatus == "DOOR OPEN" ? 1 : 0);
ThingSpeak.setField(4, distance);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) {
Serial.println("Channel Update Successful");
} else {
Serial.println("Problem Updating channel. HTTP error code " + String(x));
}
} else {
Serial.println("WiFi not connected");
}
delay(2000); // Wait for 2 seconds before next loop
}