// Library yang dibutuhkan
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Konfigurasi pin
#define WATER_LEVEL_SENSOR 34 // Pin sensor water level
#define PUMP_RELAY 26 // Pin relay pompa
#define LED_INDICATOR 2 // Pin LED indikator
// Konfigurasi Blynk
char auth[] = "YourAuthToken"; // Ganti dengan token Blynk Anda
char ssid[] = "YourWiFiSSID"; // Ganti dengan SSID WiFi Anda
char pass[] = "YourWiFiPass"; // Ganti dengan password WiFi Anda
// Variabel global
int waterLevel = 0;
bool pumpState = false;
bool autoMode = true;
int lowerThreshold = 20; // Batas bawah level air (%)
int upperThreshold = 80; // Batas atas level air (%)
// Timer Blynk untuk update pembacaan sensor
BlynkTimer timer;
// Fungsi untuk membaca sensor level air
int readWaterLevel() {
int sensorValue = analogRead(WATER_LEVEL_SENSOR);
// Konversi nilai analog (0-4095) ke persentase (0-100)
return map(sensorValue, 0, 4095, 0, 100);
}
// Fungsi untuk mengontrol pompa
void controlPump() {
waterLevel = readWaterLevel();
if (autoMode) {
if (waterLevel <= lowerThreshold && !pumpState) {
// Nyalakan pompa jika level air di bawah batas bawah
digitalWrite(PUMP_RELAY, HIGH);
digitalWrite(LED_INDICATOR, HIGH);
pumpState = true;
}
else if (waterLevel >= upperThreshold && pumpState) {
// Matikan pompa jika level air di atas batas atas
digitalWrite(PUMP_RELAY, LOW);
digitalWrite(LED_INDICATOR, LOW);
pumpState = false;
}
}
// Kirim data ke Blynk
Blynk.virtualWrite(V0, waterLevel); // Level air
Blynk.virtualWrite(V1, pumpState); // Status pompa
}
// Fungsi untuk menerima perintah mode otomatis dari Blynk
BLYNK_WRITE(V2) {
autoMode = param.asInt();
}
// Fungsi untuk kontrol manual pompa dari Blynk
BLYNK_WRITE(V3) {
if (!autoMode) {
pumpState = param.asInt();
digitalWrite(PUMP_RELAY, pumpState);
digitalWrite(LED_INDICATOR, pumpState);
}
}
// Fungsi untuk mengatur threshold bawah
BLYNK_WRITE(V4) {
lowerThreshold = param.asInt();
}
// Fungsi untuk mengatur threshold atas
BLYNK_WRITE(V5) {
upperThreshold = param.asInt();
}
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
// Setup pin mode
pinMode(WATER_LEVEL_SENSOR, INPUT);
pinMode(PUMP_RELAY, OUTPUT);
pinMode(LED_INDICATOR, OUTPUT);
// Matikan pompa saat startup
digitalWrite(PUMP_RELAY, LOW);
digitalWrite(LED_INDICATOR, LOW);
// Koneksi ke Blynk
Blynk.begin(auth, ssid, pass);
// Setup timer untuk update sensor setiap 1 detik
timer.setInterval(1000L, controlPump);
}
void loop() {
Blynk.run();
timer.run();
// Debug di Serial Monitor
Serial.print("Water Level: ");
Serial.print(waterLevel);
Serial.print("% | Pump: ");
Serial.println(pumpState ? "ON" : "OFF");
}