#include <DHTesp.h>
#include <WiFi.h>
#include <ThingSpeak.h>
#define LED_PIN 5
const char* ssid = "wokwi-GUEST";
const char* pass = "";
WiFiClient client;
const unsigned long MyChannelNumber = 2610006;
const char* myWriteAPIKey = "00CX68E242G06109";
DHTesp dhtSensor;
const int dhtPin = 27;
const int trig = 17;
const int echo = 16;
void setup() {
Serial.begin(115200);
pinMode(echo, INPUT);
pinMode(trig, OUTPUT);
pinMode(LED_PIN, OUTPUT);
dhtSensor.setup(dhtPin, DHTesp::DHT22);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
connectToWiFi();
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float distance = getDistance();
Serial.print("Humidity: ");
Serial.print(data.humidity);
Serial.print(" Temperature: ");
Serial.print(data.temperature);
Serial.print(" Distance = ");
Serial.println(distance);
ThingSpeak.setField(1, distance);
ThingSpeak.setField(2, data.temperature);
ThingSpeak.setField(3, data.humidity);
if(data.temperature <=20 && data.humidity<=20)
{
digitalWrite(LED_PIN, HIGH);
}
else
{
digitalWrite(LED_PIN, LOW);
}
int statusCode = ThingSpeak.writeFields(MyChannelNumber, myWriteAPIKey);
if (statusCode == 200) {
Serial.println("Channel updated successfully.");
} else {
Serial.print("Problem writing data. HTTP error code: ");
Serial.println(statusCode);
}
delay(15000);
}
float getDistance() {
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delay(10);
digitalWrite(trig, LOW);
unsigned long duration = pulseIn(echo, HIGH);
float distance = duration * 0.034 / 2;
// Optional: Add a check to ensure distance is within a reasonable range
if (distance < 0 || distance > 400) {
distance = -1; // Invalid distance
}
return distance;
}
void connectToWiFi() {
Serial.print("Attempting to connect to WiFi");
WiFi.begin(ssid, pass);
unsigned long startTime = millis();
unsigned long timeout = 300000; // 300 seconds timeout
while (WiFi.status() != WL_CONNECTED) {
if (millis() - startTime > timeout) {
Serial.println("Failed to connect to WiFi.");
return;
}
Serial.print(".");
delay(500);
}
Serial.println("\nConnected to WiFi");
}