#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include "DHTesp.h"
#include "ThingSpeak.h"
// WiFi credentials
const char* SSID = "Wokwi-GUEST";
const char* Pass = "";
// ThingSpeak credentials
const int myChannelNumber = 2546316;
const char* myApiKey = "62SEI236MWC7UKXF";
const char* server = "api.thingspeak.com";
// DHT22 sensor pin
const int DHT_PIN = 13;
// Light and ventilation pins
const int LIGHT_PIN = 14; // Change according to your wiring
const int VENT1_PIN = 15; // Ventilation 1 pin
const int VENT2_PIN = 16; // Ventilation 2 pin
// NTP Client
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 0, 60000); // Update time every 60 seconds
DHTesp dhtSensor;
WiFiClient client;
void setup() {
Serial.begin(115200);
// Initialize DHT sensor
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Initialize light and ventilation pins
pinMode(LIGHT_PIN, OUTPUT);
pinMode(VENT1_PIN, OUTPUT);
pinMode(VENT2_PIN, OUTPUT);
// Connect to WiFi
WiFi.begin(SSID, Pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("WiFi not connected");
}
Serial.println("WiFi connected!");
Serial.println("Local IP: " + String(WiFi.localIP()));
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
// Initialize NTP Client
timeClient.begin();
}
void loop() {
// Update time
timeClient.update();
// Get current hour
int currentHour = timeClient.getHours();
// Control light based on time
if (currentHour >= 23 || currentHour < 1) {
digitalWrite(LIGHT_PIN, HIGH); // Turn on light
} else {
digitalWrite(LIGHT_PIN, LOW); // Turn off light
}
// Control ventilation systems (example logic, you can adjust as needed)
digitalWrite(VENT1_PIN, HIGH); // Turn on Ventilation 1
digitalWrite(VENT2_PIN, LOW); // Turn off Ventilation 2
// Read temperature and humidity
TempAndHumidity data = dhtSensor.getTempAndHumidity();
ThingSpeak.setField(1, data.temperature);
ThingSpeak.setField(2, data.humidity);
// Write data to ThingSpeak
int status = ThingSpeak.writeFields(myChannelNumber, myApiKey);
Serial.println("Temperature: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
if (status == 200) {
Serial.println("Data pushed successfully");
} else {
Serial.println("Push error" + String(status));
}
Serial.println("---");
delay(1000); // Delay for 1 second
}