#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <WiFi.h>
#include <WebServer.h>
#define DHTPIN 4
#define DHTTYPE DHT22
#define RAINPIN 5
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
WebServer server(80);
void handleRoot() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
int rain = digitalRead(RAINPIN);
String webpage = "<!DOCTYPE html><html><head>";
webpage += "<meta http-equiv='refresh' content='5'>";
webpage += "<title>Sensor Data</title></head><body>";
webpage += "<h1>Sensor Readings</h1>";
webpage += "<p>Temperature: " + String(temperature, 1) + " C</p>";
webpage += "<p>Humidity: " + String(humidity, 0) + "%</p>";
webpage += "<p>Rain: " + String(rain == HIGH ? "No" : "Yes") + "</p>";
webpage += "</body></html>";
server.send(200, "text/html", webpage);
}
void setup() {
Wire.begin(8, 9);
lcd.init();
lcd.backlight();
dht.begin();
pinMode(RAINPIN, INPUT);
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.begin();
lcd.setCursor(0, 0);
lcd.print("Starting...");
delay(2000);
lcd.clear();
}
void loop() {
server.handleClient();
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
int rain = digitalRead(RAINPIN);
if (isnan(humidity) || isnan(temperature)) {
lcd.setCursor(0, 0);
lcd.print("DHT Error! ");
lcd.setCursor(0, 1);
lcd.print("Rain: ");
lcd.print(rain == HIGH ? "No" : "Yes");
delay(2000);
lcd.clear();
return;
}
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature, 1);
lcd.print("C H:");
lcd.print(humidity, 0);
lcd.print("% ");
lcd.setCursor(0, 1);
lcd.print("Rain: ");
lcd.print(rain == HIGH ? "No" : "Yes");
lcd.print(" ");
delay(2000);
}