#include <DHTesp.h>
#include <ThingSpeak.h>
#include <WiFi.h>
// Define the WiFi credentials and ThingSpeak channel details
WiFiClient client;
const long myChannelNumber = 2616905;
const char* myWriteAPIKey = "YYDYO0MKVBBYBUDR";
int statusCode;
// DHT sensor setup
DHTesp dht;
TempAndHumidity th;
// Pin definitions
const int trg = 14;
const int echo = 13;
const int grn = 25;
const int org = 21;
const int red = 19;
const int buzzer = 2;
// Distance variable
float dis = 0;
void setup() {
Serial.begin(115200);
ThingSpeak.begin(client);
Serial.println("Hello, ESP32!");
pinMode(trg, OUTPUT);
pinMode(echo, INPUT);
pinMode(grn, OUTPUT);
pinMode(org, OUTPUT);
pinMode(red, OUTPUT);
pinMode(buzzer, OUTPUT);
dht.setup(18, DHTesp::DHT22);
}
float ultra() {
digitalWrite(trg, HIGH);
delay(10); // Short pulse duration
digitalWrite(trg, LOW);
// Wait for the pulse to start and measure the duration
float duration = pulseIn(echo, HIGH);
dis = duration * 0.034 / 2;
return dis;
}
void loop() {
// Measure distance
dis = ultra();
// Get temperature and humidity data from DHT sensor
th = dht.getTempAndHumidity();
// Handle DHT sensor read errors
if (isnan(th.temperature) || isnan(th.humidity)) {
Serial.println("Failed to read from DHT sensor!");
return; // Exit loop to avoid using invalid data
}
// Set ThingSpeak fields
ThingSpeak.setField(1, th.temperature); // Field 1: Temperature
ThingSpeak.setField(2, th.humidity); // Field 2: Humidity
ThingSpeak.setField(3, dis); // Field 3: Distance
// Send data to ThingSpeak
statusCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (statusCode == 200) {
Serial.println("Channel update successful.");
} else {
Serial.println("Problem Writing data. HTTP error code: " + String(statusCode));
}
// Determine safety status and take action
if (th.temperature <= 30 && th.humidity >= 70 && dis >= 300) {
digitalWrite(grn, HIGH);
digitalWrite(org, LOW);
digitalWrite(red, LOW);
Serial.println("You are safe!!");
noTone(buzzer);
} else if ((th.temperature > 30 && th.temperature < 70) &&
(th.humidity > 30 && th.humidity < 70) &&
(dis > 200 && dis < 300)) {
digitalWrite(org, HIGH);
digitalWrite(grn, LOW);
digitalWrite(red, LOW);
Serial.println("You are unsafe!!");
noTone(buzzer);
} else {
digitalWrite(red, HIGH);
digitalWrite(org, LOW);
digitalWrite(grn, LOW);
Serial.println("You are in danger!!!!!!");
tone(buzzer, 10000);
}
delay(10000); // Delay between readings
}