#define BLYNK_TEMPLATE_ID "TMPL6NmoVQy8_"
#define BLYNK_TEMPLATE_NAME "FINAL TEST 999"
#define BLYNK_AUTH_TOKEN "u5tmcJSgmOc7CJ1zQXrHhuI1JnEWzzX-"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <HTTPClient.h>
// --- ตั้งค่า WiFi ---
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// --- ตั้งค่า Telegram (ใส่ค่าของคุณที่นี่) ---
String token = "8670496816:AAHNwSFQ5U9wSaRoHFKXGafDxxqb0QUIvS8";
String chat_id = "8003700453";
// ตัวแปรควบคุมการแจ้งเตือน
bool isAlerted = false;
long pre = 0;
// พินอุปกรณ์
#define t 5
#define e 18
#define b 2
#define LEDR 17
#define LEDG 5
long echo;
float distance;
// --- ฟังก์ชันส่งข้อความเข้า Telegram ---
void sendTelegram(String message) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
// ปรับปรุง URL ให้รองรับการส่งภาษาไทย (URL Encoding)
String url = "https://api.telegram.org/bot" + token + "/sendMessage?chat_id=" + chat_id + "&text=" + message;
// หมายเหตุ: หากส่งภาษาไทยแล้วไม่ออก ให้ใช้ HTTP POST หรือจัดการ String ให้เป็น URL Friendly
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
Serial.println("Telegram Alert Sent!");
} else {
Serial.println("Error sending Telegram");
}
http.end();
}
}
void setup() {
Serial.begin(115200);
pinMode(t, OUTPUT);
pinMode(e, INPUT);
pinMode(b, OUTPUT);
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
// เริ่มต้น Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// แจ้งเตือนเมื่อเครื่องเริ่มทำงาน
sendTelegram("🚀 ระบบแจ้งเตือนน้ำท่วม เริ่มต้นทำงานแล้ว!");
}
void loop() {
Blynk.run();
readSensor();
}
void readSensor() {
// อ่านค่าทุกๆ 2 วินาที
if (millis() - pre > 2000) {
pre = millis();
// ส่งสัญญาณ Ultrasonic
digitalWrite(t, LOW);
delayMicroseconds(2);
digitalWrite(t, HIGH);
delayMicroseconds(10);
digitalWrite(t, LOW);
echo = pulseIn(e, HIGH);
distance = (echo / 2.0) / 29.41;
// ส่งค่าไปแสดงที่ Blynk (V0)
Blynk.virtualWrite(V0, distance);
// --- เงื่อนไขแจ้งเตือนระดับน้ำ ---
// (น้ำยิ่งสูง ระยะห่างจากเซนเซอร์จะยิ่งน้อย)
if (distance < 10) {
// ระดับอันตราย
Blynk.virtualWrite(V1, 1);
Blynk.virtualWrite(V2, 0);
digitalWrite(b, HIGH);
digitalWrite(LEDR, HIGH);
digitalWrite(LEDG, LOW);
if (!isAlerted) {
String msg = "🚨 [แจ้งเตือน!] ระดับน้ำเข้าสู่ระยะวิกฤตร้ายเเรง!!! ภัยพิบัติระดับพระเจ้า🦸♂️🚑 ระยะห่างเซนเซอร์: " + String(distance) + " ซม.";
sendTelegram(msg);
isAlerted = true; // ล็อคไว้ไม่ให้ส่งซ้ำ
}
}
else {
// ระดับปกติ
Blynk.virtualWrite(V1, 0);
Blynk.virtualWrite(V2, 1);
digitalWrite(b, LOW);
digitalWrite(LEDR, LOW);
digitalWrite(LEDG, HIGH);
// ถ้าน้ำลดลงเกิน 10 ซม. ให้รีเซ็ตสถานะแจ้งเตือน (กันค่าสวิง)
if (isAlerted) {
sendTelegram("✅ ระดับน้ำลดลงสู่สภาวะปกติแล้ว (ระยะห่าง: " + String(distance) + " ซม.)");
isAlerted = false; // ปลดล็อคเพื่อให้พร้อมแจ้งเตือนครั้งต่อไป
}
}
// แสดงผลที่ Serial Monitor
Serial.print("Current Distance: ");
Serial.print(distance);
Serial.println(" cm");
}
}