#define BLYNK_TEMPLATE_ID "TMPL6wwVOY3xa"
#define BLYNK_TEMPLATE_NAME "Kontrol Monitoring Kelembapan"
#define BLYNK_AUTH_TOKEN "9uSU53I2hYY4Id1ccxmIvv0bWOHA-01z"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#define pompa air 26
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Konfigurasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin konfigurasi
const int soilMoisturePin = 34; // Pin sensor soil moisture
const int phSensorPin = 35; // Pin sensor pH tanah
const int relay1Pin = 26; // Relay untuk pompa air
// Variabel batasan
const int soilMoistureThreshold = 50; // Batas kelembapan (%) untuk mengaktifkan pompa air
// Variabel global
int soilMoistureValue = 0; // Nilai kelembapan tanah
void setup() {
// Inisialisasi Serial, LCD, dan WiFi
Serial.begin(115200);
lcd.init();
lcd.backlight();
// Inisialisasi relay
pinMode(26, OUTPUT);
digitalWrite(26, HIGH); // Matikan pompa air awal
// Inisialisasi Blynk
Blynk.begin(auth, ssid, pass);
// Informasi awal di LCD
lcd.setCursor(0, 0);
lcd.print("Starting System");
delay(2000);
lcd.clear();
}
void loop() {
Blynk.run();
// Membaca sensor soil moisture
soilMoistureValue = readSoilMoisture();
// Menampilkan nilai ke LCD
lcd.setCursor(0, 0);
lcd.print("Soil: ");
lcd.print(soilMoistureValue);
lcd.print("%");
// Kontrol pompa air
if (soilMoistureValue > soilMoistureThreshold) {
digitalWrite(relay1Pin, LOW); // Pompa air aktif
lcd.setCursor(10, 0);
lcd.print("Air:OFF ");
Serial.println("Pompa Air: Mati");
} else {
digitalWrite(relay1Pin, HIGH); // Pompa air mati
lcd.setCursor(10, 0);
lcd.print("Air:ON ");
Serial.println("Pompa Air: Aktif");
}
// Kirim data ke Blynk
Blynk.virtualWrite(V0, soilMoistureValue); // Kelembapan tanah
Blynk.virtualWrite(V1, digitalRead(relay1Pin) == LOW ? "OFF" : "ON"); // Status pompa air
delay(1000); // Delay 1 detik
}
// Fungsi membaca sensor soil moisture
int readSoilMoisture() {
int rawValue = analogRead(soilMoisturePin);
int moisture = map(rawValue, 0, 4095, 0, 100); // Kalibrasi nilai menjadi 0-100%
return constrain(moisture, 0, 100); // Pastikan nilai tetap di 0-100
}