سنراقب في هذا المشروع  وضع الباب باستخدام ESP8266 NodeMCU ومفتاح قصبي مغناطيسي (magnetic reed switch) إذ سيصلك إشعار على حسابك على تلغرام يخبرك بحالة الباب مفتوحاً كان أم مغلقاً أينما كنت عندما يكون هاتفك متصلاً بالإنترنت.

سنبرمج لوح ESP8266 باستخدام أردوينو IDE.

مشروع ESP8266 على التلغرام
مشروع ESP8266 على التلغرام (مصدر الصورة موقع randomnerdtutorials)

 

نظرة عامة

سننشئ في هذا المشروع  بوت bot على تطبيق تلغرام والذي سيرسل رسائل إلى حسابك  على تلغرام عندما تتغير وضعية الباب، ولتتبُّع هذا التغيير سنستخدم مفتاحاً تلامسياً مغناطيسياً وهو عبارة عن مفتاح قصبي reed switch مغلف بالبلاستيك، مما يسهل وضعه على الباب أو النافذة أو الدرج لتتبع حالته إن كان مفتوحاً أم مغلقاً.

المفتاح القصبي
المفتاح القصبي (مصدر الصورة: موقع randomnerdtutorials)

 

تكون الدارة مغلقة عندما يكون المغناطيس قريباً من المفتاح القصبي والباب مغلقاً، أما عندما يكون المغناطيس بعيداً عن المفتاح القصبي فالباب مفتوح والدارة مفتوحة كما في الشكل أدناه.

شرح حالة فتح وإغلاق الباب
شرح حالة فتح وإغلاق الباب (مصدر الصورة: randomnerdtutorials)

يمكن وصل المفتاح المغناطيسي لـ ESP8266 GPIO لتحري تغيرات الحالة.

مقدمة  عن تطبيق تلغرام

هو تطبيق مراسلة فورية وصوتية قائم على السحابة وخدمة IP .

يمكن تثبيت التطبيق بسهولة فهو متاح للتحميل على هاتفك الذكي (سواء ذو النظام أندرويد Andoid أومن آبلApple ) أو على الحاسوب (حاسوب شخصي وماك ولينكس)، كما أنه  مجاني وخالٍ من الإعلانات، ويسمح لك بإنشاء بوت خاص والتفاعل معه.

أيقونة تطبيق تلغرام
أيقونة تطبيق تلغرام (مصدر الصورة: موقع randomnerdtutorials)

يمثل البوت تطبيق الطرف الخارجي الذي يعمل ضمن تلغرام، حيث يمكن للمستخدمين التفاعل مع البوت بإرسال الرسائل والأوامر والطلبات المنسقة، وبإمكانك التحكم بالبوت باستخدام طلبات HTTP لخدمة بوت التلغرام API.

ستتفاعل ESP8266 مع البوت عبر إرسال الرسائل لحسابك على تلغرام عندما تتغير حالة الباب فستتلقى إشعاراً على هاتفك الذكي (طالما لديك اتصال بالإنترنت).

إنشاء بوت تلغرام

اذهب إلى المتجر المتوفر لديك Google play أو App store وقم بتحميل تلغرام وتثبيته.

تثبيت تطبيق التلغرام
تثبيت تطبيق التلغرام (مصدر الصورة: موقع randomnerdtutorials)

افتح التلغرام واتبع الخطوات التالية لإنشاء البوت.

أولاً، ابحث عن كلمة botfather، واضغط عليها كما هو مبين أدناه، أو افتح هذا الرابط على هاتفك المحمول t.me/botfather

BotFather
BotFather (مصدر الصورة: موقع randomnerdtutorials)

ستُفتح النافذة التالية وستتمكن من الضغط على زر البدء.

الخطوة الأولى لإنشاء البوت
الخطوة الأولى لإنشاء البوت (مصدر الصورة: موقع randomnerdtutorials)

اكتب /newbot واتبع الخطوات لإنشاء البوت الخاص بك:

 سمِّه وأعطِه اسم مستخدم، سنسمي البوت الخاص بهذا المشروع Door sensor واسم المستخدم ESPDoorSensorBot

إعادة تسمية البوت
إعادة تسمية البوت (مصدر الصورة: موقع randomnerdtutorials)

إذا تم إنشاء البوت بنجاح ستتلقى رسالة مع رابط للدخول للبوت ورمز هذا البوت.

احفظ رمز البوت لإنك ستحتاجه ليقدر لوح ESP8266 على التفاعل مع البوت. 

واجهة البوت عند إنشاءه بنجاح
واجهة البوت عند إنشاءه بنجاح (مصدر الصورة: موقع randomnerdtutorials)

إرسال رسالة إلى البوت

هذه الخطوة مهمة للغاية، يجب ألّا نغفل عنها فبدونها لن يعمل المشروع. عليك إرسال رسالة من حسابك على تلغرام إلى البوت الذي قمت بإنشائه لتفعيل قيامه بإرسال الرسائل إليك.

  • عد مجدداً لقائمة الدردشات وفي قائمة البحث اكتب اسم مستخدم البوت الذي أنشأته
تفعيل البوت على تلغرام
تفعيل البوت على تلغرام (مصدر الصورة: موقع randomnerdtutorials)
  • قم باختيار البوت لبدء المحادثة
  • اضغط على رابط البدء
بدء المحادثة مع بوت تلغرام
بدء المحادثة مع بوت تلغرام (مصدر الصورة: موقع randomnerdtutorials)

والآن بإمكانك المتابعة في القسم التالي من المشروع

 كيف تحصل على هوية المستخدم خاصتك على تلغرام

لإرسال رسالة إلى حسابك يحتاج البوت للتعرف على هوية مستخدم حسابك، لذلك

اكتب بقائمة البحث myidbot أو افتح الرابط التالي t.me/myidbot

بوت التعرف على الهوية
بوت التعرف على الهوية (مصدر الصورة: موقع randomnerdtutorials)

ابدأ المحادثة مع البوت واكتب /getid وستحصل على رد بهوية المستخدم الخاصة بك، لا تنسى حفظها لأنك ستحتاجها لاحقاً. 

الحصول على هوية في بوت التلغرام
الحصول على هوية في بوت التلغرام (مصدر الصورة: موقع randomnerdtutorials)

تحضير أردوينو IDE

سنبرمج لوح ESP8266 باستخدام بيئية تطوير أردوينو (IDE) لذلك تحقق من إضافة اللوح في بيئة أردوينو ولتحميل لوح ESP8266 في أردوينو تصفح المقال هنا.

مكتبة بوت تلغرام

للتفاعل مع بوت تلغرام سنستخدم مكتبة بوت تلغرام والمصممة بوساطة بريان لووف Brian lough والتي توفر واجهة برمجية سهلة لبوت تلغرام API

اتبع الخطوات التالية لتثبيت أحدث إصدار مكتبة متوفر:

  • اضغط هنا لتحميل مكتبة تلغرام بوت.
  • اذهب إلى ملف>تضمين مكتبة>إضافة مكتبة.ZIP
  • أضف المكتبة التي قمت بتحميلها

ملاحظة: لا تثبّت المكتبة من مدير المكتبات في بيئة أردوينو فقد يُثبت أحد الإصدارات القديمة.

وللمزيد من التفاصيل عن المكتبة اضغط هنا.

مكتبة ArduinoJson

عليك تثبيت مكتبة ArduinoJson أيضاً لذلك اتبع الخطوات التالية:

  1. اذهب إلى ملف>تضمين مكتبة>إدارة المكتبات

 Sketch > Include Library > Manage Libraries

  1. ابحث عن “ArduinoJson”
  2. قم بتحميل المكتبة

هنا نستخدم مكتبة ArduinoJson إصدار 6.15.2

تثبيت مكتبة ArduinoJson
تثبيت مكتبة ArduinoJson (مصدر الصورة: موقع randomnerdtutorials)

 المعدات المطلوبة لإكمال المشروع:

  • لوح ESP8266
  • مفتاح مغناطيسي
  • مقاومة 10kΩ
  • لوح توصيل 
  • أسلاك 
مخطط توصيل ESP8266 مع المفتاح القصبي
مخطط توصيل ESP8266 مع المفتاح القصبي (مصدر الصورة: موقع randomnerdtutorials)

وصلنا هنا المفتاح المغناطيسي إلى GPIO 4 (D2) ولكن بإمكانك وصله لأي GPIO مناسب.

البرمجة والتعليمات البرمجية: 

انسخ  النص البرمجي التالي في بيئة أردوينو Arduino IDE واستبدل اسم شبكة الإنترنت (SSID) وكلمة المرور ورمز البوت وهوية المستخدم ببياناتك. 

لتحميل الكود البرمجي الأول: اضغط هنا.

كيفية عمل البرنامج:

واصل القراءة إذا أردت معرفة كيفية عمل الكود أو تخطى الفقرات إلى فقرة التوضيح

أولاً: ضمّن المكتبات المطلوبة

<include<ESP8266WiFi.h#
<include<WiFiClientSecure.h#
<include<UniversalTelegramBot.h#
<include<ArduinoJson.h#

اضبط GPIO للمفتاح المغناطيسي والليد (على اللوح الليد يمثل GPIO 2) حيث سيضاء الليد على اللوح عندماً يكون الباب مفتوحاً

;const int reedSwitch = 4
const int led = 2; //optional

إن المتغير المنطقيchangeState  سيتحقق من حالة تغير وضع الباب.

;bool changeState = false

المتغير state سيمثل حالة المفتاح والمتغير doorState فكما يشير اسمه سيمثل حالة الباب مفتوح أم مغلق.

;bool state
;String doorState

متغيرات المؤقت الزمني التالية تسمح لنا بتخطي المفتاح القصبي، حيث سيُأخذ بعين الاعتبار التغيرات التي حدثت خلال 1500 ميلي ثانية على الأقل

;unsigned long previousMillis = 0
;const long interval = 1500

أدخل اسم الشبكة وكلمة المرور في المتغيرات التالية ليتصل لوح ESP8266 بالإنترنت.

;"const char* ssid = "REPLACE_WITH_YOUR_SSID
;"const char* password = "REPLACE_WITH_YOUR_PASSWORD

 

أدخل رمز بوت التلغرام الخاص. 

"define BOTtoken "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#

ادخل معرف (ID) المحادثة. 

"define CHAT_ID "XXXXXXXXXX#

 أنشئ عميل Wi-Fi جديد مع WiFiClientSecure

;X509List cert(TELEGRAM_CERTIFICATE_ROOT)

;WiFiClientSecure client

أنشأ بوت مع رمز وعميل معرف سابقاً. 

;UniversalTelegramBot bot (BOTtoken, client)

 سيعمل تابع changeDoorStatus()  عندما يطرأ أي تغيير على حالة الباب وهذا التابع سيحول المتغير changeState إلى true، ثم في  loop()سنعالج ما يحدث عندما تتغير الحالة (عكس حالة الباب السابقة وإرسال رسالة لحسابك على تلغرام).

} ()ICACHE_RAM_ATTR void changeDoorStatus

  ;Serial.println("State changed")

  ;changeState = true

{

تابع setup()

سوف يهيئ هذا التابع الشاشة التسلسلية بهدف كشف الأخطاء:

;Serial.begin(115200)

أضف شهادة الأصل (root certificate) إلى api.telegram.org

client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org

 

حدد المفتاح المغناطيسي كدخل واحفظ الحالة الحالية عندما يبدأ ESP8266 بالعمل

;pinMode(reedSwitch, INPUT_PULLUP)
;state = digitalRead(reedSwitch)

حدد الليد كخرج وحدد حالته لتطابق حالة المفتاح المغناطيسي (الدارة مغلقة فالليد عات، والدارة مفتوحة فالليد مضيء)

;pinMode(led, OUTPUT)

;digitalWrite(led, state)

– الباب مغلق ← يقرأ ESP8266 إشارة HIGH ←إطفاء الليد على اللوح (إرسال إشارة HIGH)

– الباب مفتوح ← يقرأ ESP8266 إشارة LOW ←تشغيل الليد على اللوح (إرسال إشارة LOW)

يعمل الليد المدرج على لوح ESP8266 بمنطق معكوس (إرسال إشارة HIGH لإطفاء الليد وإشارة LOW لتشغيله)

تعيين المقاطعة: 

 سنعيّن المفتاح المغناطيسي كمقاطعة. 

;attachInterrupt(digitalPinToInterrupt(reedSwitch), changeDoorStatus, CHANGE)

لتعيين مقاطعة في بيئة أردوينو نستخدم التابع () attachInterrupt والذي يقبل الحالات التالية كمعاملات: رقم الطرف الذي سيتسبب بالمقاطعة، واسم التابع الذي يجب أن يُفعّل، والوضع. 

المعامل الأول والتي تمثل طرف المقاطهعة فعليك استخدام    digitalPinToInterrupt (GPIO)  لتعيين الطرف المستخدم كطرف مسبب للمقاطعة.

المعامل الثاني لتابع () attachInterrupt هو اسم التابع الذي سيُستدعى كل مرة تُشغَّل بها المقاطعة  – تابع  خدمة المقاطعة ISR وفي هذه الحالة يكون هو التابع changeDoorStatus

يجب أن يكون تابع ISR بسيطاً قدر الإمكان لكي يعود المعالج لتنفيذ البرنامج الرئيسي بسرعة. 

ويتمثل المعامل الثالث بالوضع حيث نختار القيمة CHANGE لتشغيل المقاطعة عندما تتغير القيمة على الرجل مثل من HIGH إلى LOW أو من LOW إلى HIGH.

تهيئة شبكة الانترنت Wi-Fi

تمثل السطور التالية ربط ESP8266 ب Wi-Fi

;WiFi.mode(WIFI_STA)

;WiFi.begin(ssid, password)

 } while (WiFi.status() != WL_CONNECTED)

  ;delay(500)

  ;(".")Serial.print

{
;("")Serial.println
;Serial.println("WiFi connected")

أرسل رسالة لحسابك على تلغرام لإعلامه أن البوت بدأ بالعمل

;bot.sendMessage(CHAT_ID, "Bot started up", "")

تابع loop()

وهنا سنقرأ المتغير changeState وإذا حصل تغيير ستصل رسالة لحسابك التلغرام

أولاً: تحقق إذا طرأ تغيير

} if (changeState)

ثم تحقق إذا مرت 1500 ميلي ثانية على الأقل منذ آخر حالة تغيير حصلت

} if(currentMillis - previousMillis >= interval)

إذا كان true أعد ضبط المؤقت وأعكس حالة المفتاح الحالية

;state = !state

إذا كان المفتاح في الوضع 1 (true) فالباب مغلق، بذلك يمكننا تعديل المتغير doorState إلى  closed.

} if(state)

  ;"doorState = "closed

}

وإذا كان 0 (false) فالباب مفتوح

} else

  ;"doorState = "open

{

عيّن حالة الليد وفقاً لذلك واطبع حالة الباب في شاشة العرض التسلسلية. 

;digitalWrite(led, state)

;changeState = false

;Serial.println(state)

;Serial.println(doorState)

وأخيراً سيرسل السطر التالي إشعاراً لحسابك على تلغرام بوضع الباب الحالي.

;bot.sendMessage(CHAT_ID, "The door is " + doorState, "")

التوضيح 

بعد تعديل تلك التعليمات لتضمين بيانات شبكتك ورمز البوت وهوية المستخدم، حملها إلى ESP8266 عبر الذهاب إلى أدوات > اللوحة  واختر ESP8266 ثم اذهب إلى أدوات>المنفذ واختر منفذ COM المناسب. 

افتح شاشة العرض التسلسلية على معدل بود 115200 للتحقق من حدوث أي تغيير.

التحقق من حدوث التغييرات
التحقق من حدوث التغييرات (مصدر الصورة: موقع randomnerdtutorials)

من أجل النموذج الأولي والاختبار بإمكانك تعليق المفتاح مغناطيسي على الباب باستخدام شريط لاصق. 

تطبيق المشروع على الباب
تطبيق المشروع على الباب (مصدر الصورة: موقعrandomnerdtutorials)

والآن عندما يُفتح أو يُغلق الباب ستتلقى رسالة على حسابك على تلغرام.

وصول رسالة على التلغرام تنبه بتغير وضع الباب
وصول رسالة على التلغرام تنبه بتغير وضع الباب (مصدر الصورة: موقع randomnerdtutorials)

تعلمنا في هذا المقال كيفية إرسال إشعار على حساب تلغرام عندما تتغير حالة المفتاح القصبي والذي يكون مفيداً لتعقب حالة الباب والنوافذ والدرج إذا كانت مفتوحة أم مغلقة.


المصدر: هنا

ترجمة: سها اديب، مراجعة: رولا دنوره، تدقيق لغوي:  حنين الغاليه، تصميم: علي العلي، تحرير: حسين هجران.