- للتعرف على تجهيز لوحة أردوينو للبرمجة قم بزيارة الرابط التالي.
- خطوات انشاء التلغرام البوت وربطه مع الويموس:
المرحلة 1: إنشاء بوت Telegram
- افتح تطبيق Telegram
- في البحث اكتب:
BotFather
- ستجده بحساب موثق ✔️
- اضغط Open
- اضغط Create a New Bot
- سيطلب منك كتابة:
- ✔️ اسم البوت (Bot Name)
- مثال: Smart Alert System
- ✔️ اسم المستخدم في الخانة الثالثة (username_bot)
- ⚠️ مهم: يجب أن ينتهي بـ bot وبدون مسافات
- مثال: smart_1950_bot (يجب الا يكون مستعمل مسبقا)
- بعدها اضغط Create Bot
- بعدها سيعطيك التوكن (TOKEN)، ستظهر لك رسالة مثل:
123456789:AAAbbbCCCxxxYYYzzz
- 📌 هذا التوكن مهم جدا
- 👉 اضغط Copy احتفظ به جيدًا
المرحلة 2: إنشاء مجموعة Telegram بالتفصيل
- لإنشاء المجموعة، اضغط:
- اختر أي شخص (يمكن حذفه لاحقًا)
- اكتب اسم المجموعة:
- مثال:
Home Alerts
- اضغط على OK
- لاضافة البوت للمجموعة، اولا عد الى الصفحة الرئيسية للتلغرام
- اكتب اسم المستخدم username_bot في خانة البحث
- اضغط على Start
- اضغط على اسمها من الأعلى
- اختر: Add to Group or Channel
- ابحث عن اسم المجموعة وأضفه اليها
- ✔️ فعّل خاصية Manage Group وكل الخاصيات التي تحتها
- اضغط Add bot as Admin
المرحلة 3: الحصول على CHAT ID (أهم خطوة)
- في المجموعة اكتب رسالة: hello ثم ارسلها
- افتح المتصفح واكتب:
- https://api.telegram.org/botTOKEN/getUpdates
- 📌 استبدل:
- كلمة TOKEN ← بالتوكن الخاص بك الذي نسخته مسبقا واحتفظت به
- ستظهر لك بيانات JSON مثل:
{"ok": true,"result": [{"message": {"chat": {"id": -1001234567890,"title": "Home Alerts"}}}]}
- 📌 انسخ رقم id الفريد الذي سيظهر لك: مثلا هنا 1001234567890-
- 👉 هذا هو: CHAT_ID
المرحلة 4: إعداد Arduino IDE + Wemos
- افتح Arduino IDE
- File → Preferences
- أضف هذا الرابط: http://arduino.esp8266.com/stable/package_esp8266com_index.json
- لتثبيت البورد، اختر: Tools → Board → Boards Manager
- ابحث: ESP8266
- اضغط Install
- لاختيار البورد، اختر:Tools → Board → LOLIN (Wemos) D1 R1
المرحلة 5: ما يجب اضافته في الكود
- قبل رفع الكود الى اللوحة، يجب عدم تركيب الاسلاك مع لوحة الويموس حتى اكتمال عملية الرفع.
- كما يجب تنزيل المكتبات التالية:
- مكتبة ESP8266WiFi.h.
- مكتبة WiFiClientSecure.h.
- مكتبة UniversalTelegramBot.h.
- للإطلاع على كيفية تحميل وتنصيب المكتبات قم بزيارة الرابط التالي.
- في حال لم يعمل هذا الكود البرمجي، قم بتحميل ملف الكود بالضغط على زر التحميل الموجود في الأسفل.
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
// — بيانات الشبكة وتلجرام —
const char* ssid = “Redmi A1”;
const char* pass = “19041904”;
const char* BOT_TOKEN = “8767103482:AAH6Zn4FRJ-NQ9RwCrnt3OTDLqPZK-L7Fbg”;
const char* CHAT_ID = “-1003617183721”;
// — تعريف الدبابيس (Pins) —
// ملاحظة: في Wemos D1، يفضل استخدام D5, D6 لتفادي مشاكل الإقلاع
const int WATER_SENSOR = D4;
const int BUZZER = D2;
const int LED = D1;
bool floodDetected = false;
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);
void setup() {
Serial.begin(115200);
pinMode(WATER_SENSOR, INPUT);
pinMode(BUZZER, OUTPUT);
pinMode(LED, OUTPUT);
digitalWrite(BUZZER, LOW);
digitalWrite(LED, LOW);
WiFi.begin(ssid, pass);
client.setInsecure();
Serial.print(“Connecting to WiFi…”);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println(“\n✅ WiFi Connected!”);
// إرسال تقرير حالة عند التشغيل
String startupMsg = “⚡ **نظام مراقبة تسرب الماء في غرفة محولات الطاقة** ⚡\n”; startupMsg += “————————–\n”;
startupMsg += “وضع النظام: متصل وجاهز للمراقبة\n”;
startupMsg += “الحالة: آمن ✅”;
bot.sendMessage(CHAT_ID, startupMsg, “Markdown”);
}
void loop() {
// قراءة حالة الحساس (مع التأكد لثانية واحدة لتجنب الإنذارات الكاذبة)
int sensorRead = digitalRead(WATER_SENSOR);
if (sensorRead == HIGH) {
if (!floodDetected) {
digitalWrite(LED, HIGH);
digitalWrite(BUZZER, HIGH);
// إرسال تنبيه عاجل لمرة واحدة
Serial.println(“🚨 CRITICAL: WATER LEAK IN TRANSFORMER ROOM!”);
String alertMsg = “⚠️ **تنبيه حرج: تسرب مياه!** ⚠️\n”;
alertMsg += “————————–\n”;
alertMsg += “📍 الموقع: غرفة المحولات الكهربائية\n”;
alertMsg += “🆘 الخطر: احتمالية حدوث تماس كهربائي\n”;
alertMsg += “📢 **يرجى التدخل فوراً وفصل الطاقة إذا لزم الأمر!**”;
bot.sendMessage(CHAT_ID, alertMsg, “Markdown”);
floodDetected = true;
}
// تنبيه صوتي وضوئي مستمر (نمط طوارئ)
digitalWrite(LED, HIGH);
digitalWrite(BUZZER, HIGH);
delay(200);
digitalWrite(LED, LOW);
digitalWrite(BUZZER, LOW);
delay(100);
} else {
// حالة العودة للأمان
if (floodDetected) {
Serial.println(“✅ Area Secured.”);
String safeMsg = “✅ **تحديث الحالة:** تم احتواء التسرب في غرفة المحولات. النظام عاد لوضع الاستقرار.”;
bot.sendMessage(CHAT_ID, safeMsg, “Markdown”);
digitalWrite(LED, LOW);
digitalWrite(BUZZER, LOW);
floodDetected = false;
}
}
delay(500);
}