#include <WiFi.h>
#include <HTTPClient.h>
// WiFi
const char* ssid = "kuning";
const char* pass = "12345678";
// Telegram
const char* botToken = "7601703465:AAFur6914B3rZksA8XT2O1I9RzH_BXUbux0";
const char* chatId = "6223783685";
// Pin
const int pinLEDmerah = 4;
const int pinSoil = 34;
const int pinRelay = 5;
const int pinTandon = 2;
// Ambang batas kelembapan
const float ambangKelembapan = 50.0;
bool sudahKirimPeringatan = false;
void kirimTelegram(String pesan) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "https://api.telegram.org/bot" + String(botToken) + "/sendMessage?chat_id=" + String(chatId) + "&text=" + pesan;
http.begin(url);
int code = http.GET();
http.end();
if (code > 0) {
Serial.println("Notifikasi Telegram terkirim.");
} else {
Serial.println("Gagal kirim notifikasi.");
}
}
}
void setup() {
Serial.begin(115200);
pinMode(pinLEDmerah, OUTPUT);
pinMode(pinRelay, OUTPUT);
digitalWrite(pinRelay, LOW);
pinMode(pinTandon, INPUT_PULLUP); // sensor tandon (LOW = air ada)
WiFi.begin(ssid, pass);
Serial.print("Menghubungkan WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi terhubung.");
}
void loop() {
int nilaiDigital = analogRead(pinSoil);
float kelembapanTanah = (nilaiDigital / 4095.0) * 100.0;
bool airTandonAda = digitalRead(pinTandon) == LOW;
Serial.print("Nilai ADC: ");
Serial.print(nilaiDigital);
Serial.print(" | Kelembapan Tanah: ");
Serial.print(kelembapanTanah);
Serial.println(" %");
if (kelembapanTanah <= ambangKelembapan) {
digitalWrite(pinLEDmerah, HIGH);
if (airTandonAda) {
// Siram tanaman
digitalWrite(pinRelay, HIGH);
Serial.println("Tanah kering! Menyiram tanaman...");
kirimTelegram("🚿 Tanah kering! Menyiram tanaman otomatis.");
delay(10000); // siram 10 detik
digitalWrite(pinRelay, LOW);
Serial.println("Penyiraman selesai.");
} else {
Serial.println("⚠️ Air tandon habis!");
if (!sudahKirimPeringatan) {
kirimTelegram("⚠️ PERINGATAN: Air tandon habis! Segera isi ulang.");
sudahKirimPeringatan = true;
}
}
} else {
digitalWrite(pinLEDmerah, LOW);
}
if (airTandonAda && sudahKirimPeringatan) {
kirimTelegram("✅ Air tandon sudah tersedia kembali.");
sudahKirimPeringatan = false;
}
delay(2000);
}