#include <DHTesp.h>
#include <WiFi.h>
#include <ThingSpeak.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
WiFiClient client;
long myChannelNumber =2619197;
const char *myWriteAPIKey = "WH3GH364P1M6WOR0";
int statusCode;
DHTesp eg;
TempAndHumidity data;
int temp;
int hum;
int trigger = 23;
int echo = 22;
int green = 25;
int yellow = 26;
int red = 27;
void setup() {
Serial.begin(115200);
eg.setup(18, DHTesp::DHT22);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(green, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(red, OUTPUT);
// Connect to WiFi
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
WiFi.begin(ssid, pass);
delay(5000);
}
Serial.println("\nConnected.");
}
int Ultra_sonic() {
digitalWrite(trigger, HIGH);
delay(10); // Shorter delay for better accuracy
digitalWrite(trigger, LOW);
float received = pulseIn(echo, HIGH);
float converted = (received * 0.034 / 2) + 1;
return (int)converted;
}
void loop() {
data = eg.getTempAndHumidity();
int actual_distance = Ultra_sonic();
Serial.print("Distance: ");
Serial.println(actual_distance);
temp = data.temperature;
hum = data.humidity;
if (temp < 30 && hum > 70 && actual_distance > 300 && actual_distance < 400) {
digitalWrite(green, HIGH);
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
Serial.println("Humi: " + String(hum));
Serial.println("Temp: " + String(temp));
noTone(13);
} else if (temp > 30 && temp < 70 && hum > 30 && hum < 70 && actual_distance > 200 && actual_distance < 300) {
digitalWrite(green, LOW);
digitalWrite(yellow, HIGH);
digitalWrite(red, LOW);
Serial.println("Humi: " + String(hum));
Serial.println("Temp: " + String(temp));
noTone(13);
} else if (temp < 70 && hum < 30 && actual_distance < 200) {
digitalWrite(green, LOW);
digitalWrite(yellow, LOW);
digitalWrite(red, HIGH);
Serial.println("Humi: " + String(hum));
Serial.println("Temp: " + String(temp));
tone(13, 10000);
delay(2000);
} else {
digitalWrite(green, LOW);
digitalWrite(yellow, LOW);
digitalWrite(red, LOW);
Serial.println("The signals are Mismatch");
}
ThingSpeak.setField(1, temp);
ThingSpeak.setField(2, hum);
ThingSpeak.setField(3, actual_distance);
statusCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (statusCode == 200) {
Serial.println("Channel update successful.");
} else {
Serial.println("Problem Writing data. HTTP error code: " + String(statusCode));
}
Serial.print("Free heap: ");
Serial.println(ESP.getFreeHeap());
delay(2000); // Adjust as needed
}