#include <DHT.h>
#include <LiquidCrystal.h>
#include <WiFi.h>
#include <ThingSpeak.h>
#define TRIG_PIN 2
#define ECHO_PIN 4
#define DHTPIN 14
#define DHTTYPE DHT22
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
WiFiClient client;
DHT dht(DHTPIN, DHTTYPE);
const int rs = 21, en = 22, d4 = 19, d5 = 18, d6 = 5, d7 = 23;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int ledPin = 15;
unsigned long myChannelNumber = 2610899;
const char * myWriteAPIKey = "3GJIPRBBQZIVORJN";
void setup() {
Serial.begin(115200);
lcd.begin(16, 2);
lcd.print("Initializing...");
pinMode(ledPin, OUTPUT);
dht.begin();
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
lcd.clear();
lcd.print("Setup Complete");
ThingSpeak.begin(client);
delay(2000);
}
long readUltrasonicDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
long distance = duration * 0.034 / 2;
return distance;
}
void loop() {
lcd.clear();
long distance = readUltrasonicDistance();
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
String ledStatus = "OFF";
if (distance > 200 & temperature > 39) {
digitalWrite(ledPin, HIGH);
ledStatus = "ON";
} else {
digitalWrite(ledPin, LOW);
ledStatus = "OFF";
}
lcd.setCursor(0, 0);
lcd.print("D:");
lcd.print(distance);
lcd.print("cm T:");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("H:");
lcd.print(humidity);
lcd.print("% W:");
lcd.print(ledStatus);
Serial.print("Distance: ");
Serial.print(distance);
Serial.print(" cm, Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.print(" %, Water Status: ");
Serial.println(ledStatus);
ThingSpeak.setField(1, temperature);
ThingSpeak.setField(2, distance);
ThingSpeak.setField(3, humidity);
ThingSpeak.setField(4, ledStatus);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) {
Serial.println("Data sent successfully.");
} else {
Serial.println("Failed to send data.");
}
// Wait before the next loop
delay(2000);
}