#include <WiFi.h>
//#include "DHTesp.h"
#include <DHT.h>
#include "ThingSpeak.h"
// Define DHT sensor type and pins
#define DHTPIN1 32
#define DHTPIN2 33
#define DHTPIN3 26
#define DHTPIN4 25
DHT dht1(DHTPIN1, DHT22);
DHT dht2(DHTPIN2, DHT22);
DHT dht3(DHTPIN3, DHT22);
DHT dht4(DHTPIN4, DHT22);
// Define relay pins for humidity control
#define RELAY_EXHAUST_FAN_PIN 23
#define RELAY_HUMIDIFIER_PIN 23
// Define relay pins for temperature control
#define RELAY_LIGHT_BULB_HEATER_PIN 2
#define RELAY_AIR_CON_PIN 15
// Wifi Credentials
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2573552;
const char* myApiKey = "3ZLV3D6J0ELOILQ3";
const char* server = "api.thingspeak.com";
WiFiClient client;
void setup() {
Serial.begin(115200);
pinMode(DHTPIN1, INPUT);
pinMode(DHTPIN2, INPUT);
pinMode(DHTPIN3, INPUT);
pinMode(DHTPIN4, INPUT);
// Initialization of Wifi
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
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);
}
void loop() {
// Reading temperature and humidity from all sensors
float humidity1 = dht1.readHumidity();
float temperature1 = dht1.readTemperature();
float humidity2 = dht2.readHumidity();
float temperature2 = dht2.readTemperature();
float humidity3 = dht3.readHumidity();
float temperature3 = dht3.readTemperature();
float humidity4 = dht4.readHumidity();
float temperature4 = dht4.readTemperature();
// Calculate average humidity and temperature
float avgHumidity = (humidity1 + humidity2 + humidity3 + humidity4) / 4.0;
float avgTemperature = (temperature1 + temperature2 + temperature3 + temperature4) / 4.0;
// Print data to Serial Monitor
Serial.print("T1: ");
Serial.print(temperature1);
Serial.print("C H1: ");
Serial.print(humidity1);
Serial.print("%\t");
Serial.print(" | T2: ");
Serial.print(temperature2);
Serial.print("C H2: ");
Serial.print(humidity2);
Serial.println("%\t");
Serial.print("T3: ");
Serial.print(temperature3);
Serial.print("C H3: ");
Serial.print(humidity3);
Serial.print("%\t");
Serial.print(" | T4: ");
Serial.print(temperature4);
Serial.print("C H4: ");
Serial.print(humidity4);
Serial.println("%");
Serial.print("AVE_T: ");
Serial.print(avgTemperature);
Serial.print("C AVE_H: ");
Serial.print(avgHumidity);
Serial.println("%");
// Control relays based on average humidity
if (avgHumidity > 70) { // If humidity is high, turn on exhaust fan
digitalWrite(RELAY_EXHAUST_FAN_PIN, HIGH);
digitalWrite(RELAY_HUMIDIFIER_PIN, LOW);
Serial.println("Warning: High humidity detected. Exhaust fan is ON.");
} else if (avgHumidity < 50) { // If humidity is low, turn on humidifier
digitalWrite(RELAY_HUMIDIFIER_PIN, HIGH);
digitalWrite(RELAY_EXHAUST_FAN_PIN, LOW);
Serial.println("Warning: Low humidity detected. Humidifier is ON.");
} else { // Maintain current state
digitalWrite(RELAY_EXHAUST_FAN_PIN, LOW);
digitalWrite(RELAY_HUMIDIFIER_PIN, LOW);
Serial.println("Info: Humidity is within the normal range. All humidity control systems are OFF.");
}
// Control relays based on average temperature
if (avgTemperature > 32) { // If temperature is high, turn on air conditioner
digitalWrite(RELAY_AIR_CON_PIN, HIGH);
digitalWrite(RELAY_LIGHT_BULB_HEATER_PIN, LOW);
Serial.println("Warning: High temperature detected. Air conditioner is ON.");
} else if (avgTemperature < 18) { // If temperature is low, turn on light bulb heater
digitalWrite(RELAY_LIGHT_BULB_HEATER_PIN, HIGH);
digitalWrite(RELAY_AIR_CON_PIN, LOW);
Serial.println("Warning: Low temperature detected. Light bulb heater is ON.");
} else { // Maintain current state
digitalWrite(RELAY_LIGHT_BULB_HEATER_PIN, LOW);
digitalWrite(RELAY_AIR_CON_PIN, LOW);
Serial.println("Info: Temperature is within the normal range. All temperature control systems are OFF.");
}
// Pushing Data to ThingSpeak
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey);
uploadToThingSpeak(x, avgHumidity, avgTemperature);
delay(15000);
}
void uploadToThingSpeak(int x, float humidity, float temperature){
ThingSpeak.setField(1, temperature);
ThingSpeak.setField(2, humidity);
if(x == 200){
Serial.println("Data pushed successfull");
}else{
Serial.println("Push error" + String(x));
}
Serial.println("---");
}