//Welcome in the project Moch Rijki Supriyatna:("MRS_Iky")
//Sistem Pemantauan dan Kontrol Lingkungan Otomatis dengan web
#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <WebServer.h>
#define DHTPIN 15
#define DHTTYPE DHT22
#define LDR_PIN 34
#define SOIL_PIN 35
#define FAN_RELAY 12
#define PUMP_RELAY 14
#define LIGHT_RELAY 27
#define BUZZER 26
const char* ssid = "Wokwi-GUEST";
const char* password = "";
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
WebServer server(80);
// Global sensor values
float temperature;
float humidity;
int soil;
int lightLevel;
// Flags
bool autoMode = true;
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
lcd.init();
lcd.backlight();
dht.begin();
pinMode(LDR_PIN, INPUT);
pinMode(SOIL_PIN, INPUT);
pinMode(FAN_RELAY, OUTPUT);
pinMode(PUMP_RELAY, OUTPUT);
pinMode(LIGHT_RELAY, OUTPUT);
pinMode(BUZZER, OUTPUT);
digitalWrite(FAN_RELAY, HIGH);
digitalWrite(PUMP_RELAY, HIGH);
digitalWrite(LIGHT_RELAY, HIGH);
digitalWrite(BUZZER, LOW);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected!");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.on("/toggle", handleToggle);
server.begin();
}
void loop() {
server.handleClient();
readSensors();
displayLCD();
if (autoMode) {
controlRelays();
}
}
void readSensors() {
temperature = dht.readTemperature();
humidity = dht.readHumidity();
soil = analogRead(SOIL_PIN);
lightLevel = analogRead(LDR_PIN);
}
void controlRelays() {
digitalWrite(FAN_RELAY, temperature > 30 ? LOW : HIGH);
digitalWrite(PUMP_RELAY, soil < 1500 ? LOW : HIGH);
digitalWrite(LIGHT_RELAY, lightLevel < 1000 ? LOW : HIGH);
if (temperature > 40 || soil < 800) {
digitalWrite(BUZZER, HIGH);
} else {
digitalWrite(BUZZER, LOW);
}
}
void displayLCD() {
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature, 1);
lcd.print(" H:");
lcd.print(humidity, 0);
lcd.setCursor(0, 1);
lcd.print("S:");
lcd.print(soil);
lcd.print(" L:");
lcd.print(lightLevel);
}
void handleRoot() {
String html = "<h1>Greenhouse Control</h1>";
html += "Temperature: " + String(temperature) + "C<br>";
html += "Humidity: " + String(humidity) + "%<br>";
html += "Soil Moisture: " + String(soil) + "<br>";
html += "Light: " + String(lightLevel) + "<br><br>";
html += "Auto Mode: " + String(autoMode ? "ON" : "OFF") + "<br>";
html += "<a href='/toggle'>Toggle Auto/Manual</a><br>";
server.send(200, "text/html", html);
}
void handleToggle() {
autoMode = !autoMode;
server.sendHeader("Location", "/");
server.send(303);
}