#include <Wire.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
// Inisialisasi LCD dengan alamat I2C 0x27 dan ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definisikan pin LED dan pin sensor DHT
#define led_merah 14
#define led_kuning 12
#define led_hijau 13
const int DHT_PIN = 15;
DHTesp dhtSensor;
void setup() {
// Inisialisasi I2C pada pin D23 (SDA) dan D22 (SCL)
Wire.begin(23, 22);
Serial.begin(9600);
// Inisialisasi pin LED sebagai output
pinMode(led_merah, OUTPUT);
pinMode(led_kuning, OUTPUT);
pinMode(led_hijau, OUTPUT);
// Setup sensor DHT
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
}
void loop() {
// Membaca nilai dari sensor tanah pada pin A0 (34)
int16_t i = analogRead(34);
String msg;
// Logika untuk menentukan kondisi tanah
if (i < 2165) {
msg = "WET";
digitalWrite(led_merah, HIGH);
digitalWrite(led_kuning, LOW);
digitalWrite(led_hijau, LOW);
// Blynk.logEvent("kasih_air", "Air nya kurang nih bray"); // Pastikan Blynk terhubung jika menggunakan ini
} else if (i > 3135) {
msg = "DRY";
digitalWrite(led_merah, LOW);
digitalWrite(led_kuning, HIGH);
digitalWrite(led_hijau, LOW);
} else {
msg = "OK";
digitalWrite(led_merah, LOW);
digitalWrite(led_kuning, LOW);
digitalWrite(led_hijau, HIGH);
}
// Menampilkan kondisi tanah ke LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Soil: ");
lcd.print(msg);
// Membaca data suhu dan kelembaban dari sensor DHT22
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// Menampilkan suhu dan kelembaban ke Serial Monitor
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
// Menampilkan suhu dan kelembaban ke LCD di baris kedua
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(data.temperature, 2);
lcd.print("C H:");
lcd.print(data.humidity, 1);
lcd.print("%");
// Delay untuk pembacaan berikutnya dari sensor (DHT22 memiliki rate ~0.5Hz)
delay(2000);
}