#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHTesp.h>
// Bagian Blynk
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6UtyBiGYw"
#define BLYNK_TEMPLATE_NAME "kelembaban tanah"
#define BLYNK_AUTH_TOKEN "_GhnaQXqMdoKoRZpFR7P8ukH9bc8ORMM"
// Bagian BLYNK
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// Variable di Blynk
#define kondisitanah V0
#define basah V1
#define kering V2
#define suhu V3
#define kelembaban V4
// WIFI
char ssid[] = "kelembaban";
char pass[] = "sembarang";
DHTesp dhtsensor;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD
const int dhtpin = 15;
const int soilMoisture = 12; // Soil Moisture sensor
const int alkon = 13; // Relay Alkon
int kondisibasah = 50; // Kondisi basahnya 50%
//Blynk State
BLYNK_CONNECTED(){
Blynk.syncAll();
}
// Kondisi dari blynk
BLYNK_WRITE(basah){
int value = param.asInt();
kondisibasah = value;
}
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(2,0); //Menggeser Letak Teks (x,y)
lcd.print("Alat Penyiraman"); //Menampilkan Teks
lcd.setCursor(2,1);
lcd.print("Tanaman");
delay(4000); //Jeda Waktu
lcd.clear(); //Membersihkan Tampilan Teks pada LCD
// DHT
dhtsensor.setup(dhtpin, DHTesp::DHT11);
pinMode(alkon, OUTPUT);
pinMode(soilMoisture, INPUT);
// BLYNK Connection
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop() {
// Jalankan Blynk diawal
delay(50);
float sensorValue = analogRead(soilMoisture);
Serial.print("Sensor Value");
Serial.println(sensorValue);
float dividevalue = sensorValue/4095;
float waterLevel = dividevalue*100;
TempAndHumidity data = dhtsensor.getTempAndHumidity();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Water Level: ");
lcd.print(waterLevel);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(data.temperature);
lcd.setCursor(8,1);
lcd.print("H:");
lcd.print(data.humidity);
// Serial.println("%");
Serial.println(waterLevel);
// Kirim ke Blynk
Blynk.virtualWrite(suhu, data.temperature);
Blynk.virtualWrite(kelembaban, data.humidity);
// Cek Dan jalankan Alkon sesuai kondisi
if (waterLevel < 75) {
Serial.println("Basah");
delay(100);
digitalWrite(alkon, HIGH);
} else {
Serial.print("Kering");
delay(100);
digitalWrite(alkon, LOW);
}
delay(250); // Delay untuk menghindari fluktuasi cepat pada pembacaan
}