#include <DHT.h>
#include <WiFi.h>
#include "ThingSpeak.h"
#include <ESP32Servo.h>
#define SERVO_PIN 13
// Set up the DHT sensor
DHT dht1(4, DHT22);
DHT dht2(2, DHT22);
Servo Servo;
float temperature1;
float humidity1;
float temperature2;
float humidity2;
int counter1 = 0;
int counter2 = 0;
// WiFi credentials for Wokwi simulation (Wokwi automatically connects)
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
// ThingSpeak settings
const int myChannelNumber = 2762793;
const char* myApiKey = "URRY52PF73SJRD9K";
WiFiClient client;
void setup() {
pinMode(14,OUTPUT);
pinMode(26,OUTPUT);
pinMode(27,OUTPUT);
Servo.attach(SERVO_PIN);
// Start Serial communication
Serial.begin(9600);
Serial.println("Hello, ESP32!");
// Initialize DHT sensor
dht1.begin();
// Connect to Wi-Fi (this connects to Wokwi's mock Wi-Fi)
Serial.print("Connecting to WiFi...");
WiFi.begin(WIFI_NAME, WIFI_PASSWORD); // Use the mock Wi-Fi network provided by Wokwi
// Simulate the Wi-Fi connection process
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
Serial.println(String(WiFi.localIP())); // Print the mock local IP address of the ESP32
// Initialize ThingSpeak
ThingSpeak.begin(client); // Initialize ThingSpeak client
}
void loop() {
delay(100);
//*-***********************Field1*********************/
// Read temperature and humidity from DHT sensor
temperature1 = dht1.readTemperature();
humidity1 = dht1.readHumidity();
temperature2 = dht2.readTemperature();
humidity2 = dht2.readHumidity();
// Check if reading failed
if (isnan(temperature1) || isnan(humidity1)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Print sensor data to Serial Monitor
Serial.println("Data: " + String(counter1));
// Print temperature in Celsius
Serial.print("Temperature1 (C): ");
Serial.println(dht1.readTemperature(false));
// Print temperature in Fahrenheit
Serial.print("Temperature1 (F): ");
Serial.println(dht1.readTemperature(true));
// Print humidity in percentage
Serial.print("Humidity1: ");
Serial.println(humidity1);
// Print heat index in Celsius
Serial.print("Heat Index (C): ");
Serial.println(dht1.computeHeatIndex(temperature1, humidity1, false));
// Print heat index in Fahrenheit
Serial.print("Heat Index (F): ");
Serial.println(dht1.computeHeatIndex(temperature1, humidity1, true));
//**********Field 2*******************************************
if (isnan(temperature2) || isnan(humidity2)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Print sensor data to Serial Monitor
Serial.println("Data: " + String(counter2));
// Print temperature in Celsius
Serial.print("Temperature2 (C): ");
Serial.println(dht2.readTemperature(false));
// Print temperature in Fahrenheit
Serial.print("Temperature2 (F): ");
Serial.println(dht2.readTemperature(true));
// Print humidity in percentage
Serial.print("Humidity2: ");
Serial.println(humidity2);
// Print heat index in Celsius
Serial.print("Heat Index (C): ");
Serial.println(dht2.computeHeatIndex(temperature2, humidity2, false));
// Print heat index in Fahrenheit
Serial.print("Heat Index (F): ");
Serial.println(dht2.computeHeatIndex(temperature2, humidity2, true));
//*********************Field1**************************************/
// Push data to ThingSpeak
ThingSpeak.setField(1, temperature1);
ThingSpeak.setField(2, humidity1);
//*********************Field2**************************************/
ThingSpeak.setField(3, temperature2);
ThingSpeak.setField(4, humidity2);
//**************************************doors ********************
//**************************door1***********************************//
if ((temperature2 > 39 )&&(temperature1 > 39 ))
//************ Green
{digitalWrite(27, HIGH);
digitalWrite(26, LOW);
digitalWrite(14, LOW);
Servo.write(0);}
//************ Red
else if ((temperature2 < 20 )&&(temperature1 < 20 ))
{digitalWrite(27, LOW);
digitalWrite(26, HIGH);
digitalWrite(14, LOW);
Servo.write(90);}
//************ Yellow
else
{digitalWrite(27, LOW);
digitalWrite(26, LOW);
digitalWrite(14, HIGH);
Servo.write(180);}
//**************************door2***********************************//
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey);
if (x == 200) {
Serial.println("Data pushed successfully");
} else {
Serial.println("Push error: " + String(x));
}
Serial.println(" ");
// Delay before next loop iteration
delay(1000); // Delay 1 second
// Increment the counter
counter1++;
counter2++;
}