#include <WiFi.h>
#include <WiFiClientSecure.h>
// Informasi WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "PASSWORD_WIFI_ANDA";
// Token dan chat_id bot Telegram
String botToken = "7601231842:AAEp1pIjC8apE2JlYT4f1noPYxuRUxl0b98";
String chat_id = "-4599080897";
// URL API Telegram
String telegramAPI = "https://api.telegram.org/bot" + botToken + "/sendMessage";
// Pin untuk switch
int switchPins[6] = {18, 19, 21, 22, 23, 25}; // Pin GPIO untuk switch, disesuaikan untuk ESP32
// Pesan untuk setiap switch
String switchMessages[6] = {
"Pompa 1 dihidupkan",
"Pompa 2 dihidupkan",
"Pompa 3 dihidupkan",
"Pompa 4 dihidupkan",
"Pompa 5 dihidupkan",
"Pompa 6 dihidupkan"
};
// Pin untuk sensor ultrasonik HC-SR04
const int trigPin = 26; // Disesuaikan untuk ESP32
const int echoPin = 27; // Disesuaikan untuk ESP32
// Variabel untuk menyimpan ketinggian air
long duration;
int distance;
int previousDistance = 0;
bool ultrasonicActive = false; // Status aktif sensor ultrasonik
// Fungsi untuk mengirim pesan ke grup Telegram
void sendTelegramMessage(String message) {
WiFiClientSecure client;
client.setInsecure(); // Mengabaikan sertifikat SSL
if (client.connect("api.telegram.org", 443)) {
String url = telegramAPI + "?chat_id=" + chat_id + "&text=" + message;
client.println(String("GET ") + url + " HTTP/1.1");
client.println("Host: api.telegram.org");
client.println("User-Agent: ESP32");
client.println("Connection: close");
client.println();
client.stop();
} else {
Serial.println("Gagal terhubung ke Telegram API");
}
}
// Fungsi untuk membaca ketinggian air dengan sensor ultrasonik
int readWaterLevel() {
// Kirim sinyal trigger
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Hitung waktu pantulan echo
duration = pulseIn(echoPin, HIGH);
// Konversi waktu ke jarak (dalam cm)
distance = duration * 0.034 / 2;
return distance;
}
void setup() {
Serial.begin(115200);
// Inisialisasi pin switch sebagai input
for (int i = 0; i < 6; i++) {
pinMode(switchPins[i], INPUT);
}
// Inisialisasi pin untuk sensor ultrasonik
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Terhubung ke WiFi
WiFi.begin(ssid, password);
Serial.print("Menghubungkan ke WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" Terhubung!");
}
void loop() {
// Cek status setiap switch
for (int i = 0; i < 6; i++) {
if (digitalRead(switchPins[i]) == HIGH) {
// Kirim pesan jika switch diaktifkan
sendTelegramMessage(switchMessages[i]);
delay(1000); // Debouncing sederhana
}
}
// Cek apakah switch ke-3 diaktifkan (GPIO 21) untuk mengaktifkan sensor ultrasonik
if (digitalRead(switchPins[2]) == HIGH) {
if (!ultrasonicActive) {
sendTelegramMessage("Sensor ultrasonik diaktifkan");
ultrasonicActive = true; // Tandai sensor aktif
}
// Baca ketinggian air dari sensor ultrasonik
int currentDistance = readWaterLevel();
// Kirim notifikasi jika ada perubahan ketinggian air yang signifikan
if (abs(currentDistance - previousDistance) > 2) { // Mengirim pesan jika ada perubahan lebih dari 2 cm
String waterLevelMessage = "Ketinggian air: " + String(currentDistance) + " cm";
sendTelegramMessage(waterLevelMessage);
previousDistance = currentDistance;
}
} else {
// Matikan sensor ultrasonik jika switch ke-3 dimatikan
if (ultrasonicActive) {
sendTelegramMessage("Sensor ultrasonik dimatikan");
ultrasonicActive = false;
}
}
delay(1000); // Delay untuk memeriksa status secara berkala
}