#include <WiFi.h>
#include <ThingSpeak.h>
#include "DHTesp.h"
// Object for DHT22
DHTesp dhtSensor;
TempAndHumidity data;
// Pin Configuration
const int DHT_PIN = 33; // Pin for DHT22
const int TRIG_PIN = 5; // Pin for ultrasonic sensor
const int ECHO_PIN = 18; // Pin for ultrasonic sensor
const int LED_PIN = 15; // Pin for LED
// WiFi Credentials
char ssid[] = "Wokwi-GUEST"; // Replace with your WiFi SSID
char pass[] = ""; // Replace with your WiFi Password
// ThingSpeak
WiFiClient client;
unsigned long myChannelNumber = 2768904; // Replace with your ThingSpeak channel number
const char * myWriteAPIKey = "4XP6TZG247TY6OFQ"; // Replace with your ThingSpeak Write API Key
long duration;
float distance;
void setup() {
Serial.begin(115200);
// Initialize DHT22
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Initialize pins
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
// Initialize WiFi and ThingSpeak
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
Serial.println("Setup Complete.");
}
void loop() {
connectToCloud(); // Ensure WiFi is connected
// Read temperature and humidity from DHT22
data = dhtSensor.getTempAndHumidity();
if (isnan(data.temperature) || isnan(data.humidity)) {
Serial.println("Failed to read from DHT sensor!");
} else {
Serial.print("Temperature: ");
Serial.print(data.temperature);
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(data.humidity);
Serial.println(" %");
}
// Read distance from ultrasonic sensor
distance = getDistanceInCentimeters();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Control LED based on distance
if (distance >= 350) {
digitalWrite(LED_PIN, HIGH); // Turn ON LED
} else {
digitalWrite(LED_PIN, LOW); // Turn OFF LED
}
// Upload valid data to ThingSpeak
if (!isnan(data.temperature) && !isnan(data.humidity) && distance > 0 && distance < 400) {
ThingSpeak.setField(1, data.temperature);
ThingSpeak.setField(2, data.humidity);
ThingSpeak.setField(3, distance);
int statusCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (statusCode == 200) {
Serial.println("Channel update successful.");
}
}
delay(2000); // Delay between sensor reads to allow DHT22 to stabilize
}
void connectToCloud() {
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect to WiFi");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println("\nConnected to WiFi.");
}
}
long getDistanceInCentimeters() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
long cm = duration * 0.034 / 2;
if (cm <= 0 || cm > 400) {
cm = -1; // Invalid reading
}
return cm;
}