#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <WiFi.h>
#include <HTTPClient.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* apiKey = "AEJTLPY3M7IBADVH";
const char* server = "http://api.thingspeak.com/update";
int doorPin = 12;
int lightPin = 13;
int doorbellPin = 14;
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
dht.begin();
pinMode(doorPin, OUTPUT);
pinMode(lightPin, OUTPUT);
pinMode(doorbellPin, INPUT_PULLUP);
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
int doorStatus = digitalRead(doorbellPin);
Serial.println(doorStatus);
if (doorStatus == LOW) {
digitalWrite(doorPin, HIGH); // Doorbell pressed, door is open
} else {
digitalWrite(doorPin, LOW); // Doorbell not pressed, door is closed
}
// Simulate lighting control
if (temperature > 25) {
digitalWrite(lightPin, HIGH); // Turn on the light if temperature > 25°C
} else {
digitalWrite(lightPin, LOW); // Turn off the light if temperature <= 25°C
}
// Print data to the serial monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C ");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String(server) + "?api_key=" + apiKey + "&field1=" + String(temperature) + "&field2=" + String(humidity) + "&field3=" + String(digitalRead(doorPin)) + "&field4=" + String(digitalRead(lightPin));
http.begin(url.c_str());
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
Serial.println(payload);
} else {
Serial.println("Error in HTTP request");
}
http.end();
} else {
Serial.println("WiFi not connected");
}
delay(20000); // Update every 20 seconds
}