#include <DHTesp.h>
#include <ThingSpeak.h>
#include <WiFi.h>
// WiFi and ThingSpeak credentials
WiFiClient client;
const long myChannelNumber = 2629584;
const char* myWriteAPIKey = "5ZNFTPSKNSMDPNL1";
const char* ssid = "Abc";
const char* pass = "123456789";
// DHT22 and ultrasonic sensor setup
DHTesp dht;
TempAndHumidity data;
const int r = 25;
const int o = 26;
const int g = 27;
const int trig = 17;
const int echo = 16;
const int buzzer = 4;
void setup() {
Serial.begin(115200);
// Initialize ThingSpeak
ThingSpeak.begin(client);
// Setup pin modes
pinMode(r, OUTPUT);
pinMode(o, OUTPUT);
pinMode(g, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(buzzer, OUTPUT);
// Initialize DHT sensor
dht.setup(18, DHTesp::DHT22);
// Connect to WiFi
connectToWiFi();
}
void loop() {
// Check WiFi connection and reconnect if necessary
if (WiFi.status() != WL_CONNECTED) {
connectToWiFi();
}
// Read temperature, humidity, and distance
data = dht.getTempAndHumidity();
float distanceValue = distance();
// Send data to ThingSpeak
ThingSpeak.setField(1, data.temperature);
ThingSpeak.setField(2, data.humidity);
ThingSpeak.setField(3, distanceValue);
int statusCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (statusCode == 200) {
Serial.println("Channel update successful.");
} else {
Serial.print("Problem Writing data. HTTP error code: ");
Serial.println(statusCode);
}
// Print sensor values to the Serial Monitor
Serial.print("Temperature: ");
Serial.println(data.temperature);
Serial.print("Humidity: ");
Serial.println(data.humidity);
Serial.print("Distance: ");
Serial.println(distanceValue);
// Delay between updates
delay(10000); // Adjust as needed
}
void connectToWiFi() {
Serial.println("Attempting to connect to WiFi...");
WiFi.begin(ssid, pass);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 30) {
delay(500);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Connected to WiFi!");
} else {
Serial.println("Failed to connect to WiFi.");
}
}
float distance() {
// Trigger the ultrasonic sensor
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
// Measure the pulse duration
float duration = pulseIn(echo, HIGH);
// Calculate distance in cm
float distanceCm = (duration * 0.0344) / 2;
// Debugging output
Serial.print("Ultrasonic duration: ");
Serial.println(duration);
Serial.print("Calculated distance: ");
Serial.println(distanceCm);
return distanceCm;
}