- المواد المطلوبة:
- كيف تعمل الأشياء؟
- برمجة ESP8266-01:
- توصيل ESP8266-01 بـ Arduino:
- برنامج Arduino والعمل:
لقد كان ESP8266-01 وحدة رائعة لإرواء كل عطشنا لمشاريع إنترنت الأشياء. منذ إصداره ، طور مجتمعًا قويًا وتطور إلى وحدة Wi-Fi سهلة الاستخدام ورخيصة وقوية. منصة أخرى مفتوحة المصدر وأكثر شيوعًا هي Arduino ، فهي تمتلك بالفعل العديد من المشاريع المبنية حولها. سيؤدي الجمع بين هذين النظامين الأساسيين إلى فتح الأبواب للعديد من المشاريع المبتكرة ، لذلك في هذا البرنامج التعليمي سوف نتعلم كيفية ربط وحدة ESP8266-01 مع Arduino. بهذه الطريقة سنتمكن من إرسال أو استقبال البيانات بين Arduino والإنترنت.
لغرض هذا البرنامج التعليمي ، سنقرأ الوقت والتاريخ ودرجة الحرارة والرطوبة من الإنترنت باستخدام واجهة برمجة التطبيقات مع ESP8266-01. ثم أرسل هذه القيم إلى لوحة Arduino واعرضها على شاشة LCD مقاس 16 * 2. يبدو رائعًا حقًا !! اذا هيا بنا نبدأ.
المواد المطلوبة:
- لوحة اردوينو (أي إصدار)
- ESP8266-01
- لوحة مبرمج FTDI مع خيار 3.3V
- 16x2 LCD
- مقياس فرق الجهد
- اضغط الزر
- توصيل الأسلاك
- اللوح
كيف تعمل الأشياء؟
قبل أن نتعمق ، من المهم أن نعرف كيف سيعمل هذا الشيء. بشكل أساسي ، يجب أن نبدأ بوحدة ESP8266-01. وسوف يتم استخدام IDE اردوينو لبرمجة ESP8266 وسوف يتم كتابة التعليمات البرمجية لاستخدام API لقراءة ملف JSON خلال http الطلب. ثم سنقوم بصياغة ملف JSON هذا لاستخراج المعلومات المطلوبة فقط من ملف JSON الكامل.
بمجرد صياغة المعلومات ، سنطبعها باستخدام الاتصال التسلسلي. سيتم بعد ذلك توصيل هذه الخطوط التسلسلية بـ Arduino ، بحيث يتمكن Arduino من قراءة المعلومات المرسلة من ESP8266. بمجرد قراءة المعلومات ومعالجتها ، سنعرضها على شاشة LCD.
لا بأس ، إذا لم تكن قد فهمت هذا تمامًا ، فسوف نتعلم نفس الشيء في بقية هذا البرنامج التعليمي.
برمجة ESP8266-01:
يفترض هذا البرنامج التعليمي أن لديك بعض الخبرة في وحدة ESP8266. إذا لم يكن الأمر كذلك ، فمن المستحسن قراءة البرامج التعليمية الثلاثة التالية لفهمها تمامًا.
- الشروع في العمل مع ESP8266-01
- برمجة ESP8266-01 باستخدام أوامر AT
- برمجة ESP8266-01 باستخدام Arduino IDE وتفليش ذاكرته
يمكنك أيضًا التحقق من جميع مشاريع ESP8266 هنا.
سنقوم هنا ببرمجة وحدة ESP8266-01 باستخدام Arduino IDE. بالنسبة للأجهزة ، نستخدم لوحة FTDI مع 3.3 فولت لبرمجة ESP8266 ، حيث إنها ستجعل الأجهزة بسيطة للغاية. يظهر أدناه مخطط الدائرة لتوصيل ESP8266 بلوحة FTDI.
تأكد من استيفاء الشروط التالية
1. إن ESP8266-01 يتحمل 3.3 فولت فقط ، لا تستخدم 5 فولت. لذلك قم بتعيين FTDI فقط في وضع 3.3V.
2. يجب تأريض GPIO_0 لوضع البرمجة
3. يجب توصيل دبوس إعادة الضبط من خلال زر بالدبوس الأرضي. يجب الضغط على هذا الزر قبل تحميل الكود مباشرة. في كل مرة يتم فيها الضغط على الزر ، يرتفع مؤشر LED الأزرق في وحدة ESP8266-01 للإشارة إلى إعادة ضبط الوحدة.
بمجرد الانتهاء من الاتصالات ، افتح Arduino IDE وتحقق مما إذا كنت قادرًا على تحميل برنامج عينة بنجاح. إذا لم تكن متأكدًا من كيفية استخدام Arduino IDE لتحميل البرنامج إلى ESP8266 ، فاتبع Programming ESP8266 مع Arduino لتعلمه. في هذه المرحلة أفترض أنك قمت بتحميل برنامج blink بنجاح.
. يتم تقديم البرنامج الكامل في نهاية هذه الصفحة أدناه ، وأنا أشرحها على أنها مقتطفات صغيرة. يتطلب البرنامج أيضًا تجميع مكتبة Arduino JSON ، لذلك إذا لم تكن قد أضفت المكتبة إلى Arduino IDE بالفعل ، فقم بإضافتها عن طريق التنزيل من مكتبة Arduino JSON من Github.
يجب أن يتصل ESP8266 بالإنترنت للحصول على بيانات حول التاريخ والوقت ودرجة الحرارة والرطوبة. لذلك عليك السماح لها بالاتصال بشبكة Wi-Fi الخاصة بك عن طريق إثبات SSID وكلمة المرور في الأسطر أدناه
const char * ssid = "JIO-Fi" ؛ // أدخل Wi-Fi SSID const char * password = "Pas123" ؛ // أدخل كلمة مرور Wi-Fi
داخل وظيفة الإعداد () ، نتحقق مما إذا كان ESP قادرًا على الاتصال بشبكة Wi-Fi ، وإذا لم يكن الأمر كذلك ، فسوف ينتظر هناك إلى الأبد بمجرد طباعة "Connecting.." على الشاشة التسلسلية.
while (WiFi.status ()! = WL_CONNECTED) {// انتظر حتى يتم توصيل شبكة Wi-Fi تأخير (1000) ؛ Serial.print ("توصيل..") ؛ // توصيل الطباعة.. حتى يتم الاتصال }
الخطوة التالية هي الخطوة المهمة للغاية. إذا كان اتصال Wi-Fi ناجحًا ، يتعين علينا استدعاء http للحصول على طلب لقراءة ملف JSON من الإنترنت. في هذا البرنامج التعليمي ، أستخدم واجهة برمجة التطبيقات التي يوفرها موقع wunderground.com. لذلك إذا كنت تخطط لاستخدام نفس الشيء ، يمكنك الدخول إلى الرابط والاشتراك للحصول على مفتاح API المجاني أو استخدام أي واجهة برمجة تطبيقات من اختيارك. بمجرد الانتهاء من استخدام واجهة برمجة التطبيقات الخاصة بك ، سينتهي بك الأمر مع رابط مثل هذا أدناه
ملاحظة: لقد قمت بتغيير مفتاح API لهذا الرابط لذا لن يعمل هذا. احتفظ بمفتاح API مؤمنًا ولا تشاركه.
يتم استخدام API الخاص بي هنا للحصول على بيانات الطقس في تشيناي. يمكنك استخدام أي API. ولكن عند تحميل واجهة برمجة التطبيقات في أي متصفح ، يجب أن تعيد ملف JSON. على سبيل المثال ، تقوم واجهة برمجة التطبيقات الخاصة بي بإرجاع ملف JSON التالي
قد تقوم بإرجاع ملف ببيانات مختلفة. يمكننا التحقق مما إذا كان ملف JSON قد تم استلامه أيضًا بواسطة ESP8266 من خلال قراءته وطباعة JSON على الشاشة التسلسلية الخاصة بنا باستخدام الأسطر التالية
int httpCode = http.GET () ، // تمرير طلب الحصول إذا (httpCode> 0) {// تحقق من الكود المرتجع // payload = http.getString () ؛ // تخزين القيمة على varibale Payload لتصحيح الأخطاء // Serial.println (الحمولة) ؛ // طباعة الحمولة من أجل التصحيح وإلا قم بالتعليق على كلا السطرين
لقد علقت على هذه السطور ، لأنها مطلوبة فقط للاختبار. بمجرد التأكد من أن ESP8266 قادر على الحصول على بيانات JSON ، حان الوقت لصياغة البيانات. كما ترى فإن هذه البيانات ضخمة ومعظم القيم غير مجدية باستثناء القيم المطلوبة لنا مثل التاريخ والوقت ودرجة الحرارة والرطوبة.
لذلك نستخدم مكتبة JSON Arduino لفصل القيم المطلوبة لنا وتخزينها في متغير. هذا ممكن لأن القيم في ملف JSON يتم تعيينها كأزواج من قيم الاسم. إذن هذا الاسم عبارة عن سلسلة ستحتفظ بالقيمة المطلوبة لنا.
للقيام بذلك ، يتعين علينا الانتقال إلى موقع ويب يقوم بتحليل ملف JSON ويعطينا كود Arduino. نعم الأمر بهذه السهولة. انتقل إلى https://arduinojson.org/assistant/ وقم بلصق ملف JSON الذي قمنا بتحميله في متصفحنا واضغط على إدخال. عند الانتهاء بدا لي شيء مثل هذا أدناه
قم بالتمرير لأسفل قليلاً لرؤية برنامج الصياغة الذي تم إنشاؤه تلقائيًا
كل ما عليك فعله هو تحديد المتغير الذي تريده ونسخه ولصقه في Arduino IDE الخاص بك ، كما فعلت هنا
/ * صياغة البيانات باستخدام JSON librarey * / // استخدم https://arduinojson.org/assistant/ للحصول على قيم الصياغة لسلسلة JSON ، const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160 ؛ DynamicJsonBuffer jsonBuffer (حجم المخزن المؤقت) ؛ JsonObject & root = jsonBuffer.parseObject (http.getString ()) ؛ / * نهاية صياغة البيانات * / // حدد قيمة الخطيئة للمتغيرات المرغوبة JsonObject & current_observation = root؛ // تحت current_observation JsonObject & current_observation_observation_location = current_observation ؛ // قيد الملاحظة_ location const char * current_observation_station_id = current_observation ؛ // "ICHENNAI1" // احصل على تفاصيل الموقع const char * current_observation_local_time_rfc822 = current_observation ؛ // التوقيت المحلي // احصل على التوقيت المحلي const char * current_observation_temperature_string = current_observation ؛ // "90.7 F (32.6 C)" // احصل على قيمة درجة الحرارة const char * current_observation_relative_humidity = current_observation ؛ // "73٪" // احصل على قيمة الرطوبة
لقد قمت للتو بنسخ المتغيرات current_observation_station_id ، و current_observation_local_time_rfc822 ، و current_observation_temperature_string ، و current_observation_relative_humidity . نظرًا لأننا نخطط لعرض هذه البيانات الأربعة فقط على شاشة LCD الخاصة بنا.
أخيرًا ، حصلنا على البيانات التي نحتاجها من الإنترنت وحفظناها كمتغير يمكننا استخدامها بشكل مريح. لإرسال هذه البيانات إلى Arduino ، قمنا فقط بكتابتها بشكل متسلسل من خلال الشاشة التسلسلية. الأسطر التالية ستفعل الشيء نفسه بالضبط
// طباعة المتغيرات من خلال الشاشة التسلسلية Serial.print (current_observation_station_id) ؛ // إرسال تفاصيل الموقع إلى تأخير Arduino (100) ؛ // تأخير الاستقرار Serial.print (current_observation_local_time_rfc822) ؛ // إرسال تفاصيل التوقيت المحلي إلى تأخير Arduino (100) ؛ // تأخير الاستقرار Serial.print (current_observation_temperature_string) ؛ // إرسال تفاصيل درجة الحرارة إلى تأخير Arduino (100) ؛ // تأخير الاستقرار Serial.print (current_observation_relative_humidity) ؛ // إرسال تفاصيل الرطوبة إلى تأخير Arduino (100) ؛ // تأخير الاستقرار
لاحظ أنني استخدمت Serial.print () وليس Serial.println () لأن الأمر Serial.println () سيُلحق a / n و / r مع البيانات التي لا نحتاجها. لقد أضفنا أيضًا تأخيرًا قدره 10 ثوانٍ بحيث يرسل ESP هذه القيم فقط في فترة 10 ثوانٍ إلى Arduino.
توصيل ESP8266-01 بـ Arduino:
لقد قمنا حتى الآن ببرمجة ESP8266-01 الخاص بنا لقراءة البيانات المطلوبة من الإنترنت بفاصل زمني مدته 10 ثوانٍ وإرسالها بشكل متسلسل. الآن يتعين علينا ربط ESP مع Arduino حتى نتمكن من قراءة هذه البيانات التسلسلية. يتعين علينا أيضًا إضافة شاشة LCD مقاس 16 * 2 إلى Arduino حتى نتمكن من عرض البيانات الواردة من وحدة ESP8266. و مخطط الرسم البياني إلى واجهة وحدة ESP8266 مع اردوينو هو مبين أدناه
تأكد من ترك دبوس GPIO_0 مجانًا ، وقم بتشغيل الوحدة فقط باستخدام دبوس 3.3 فولت من Arduino واضغط على زر الضغط لوضع وحدة ESP في وحدة التشغيل. الآن يجب أن يبدأ البرنامج الذي قمنا بتحميله إلى ESP بالعمل ويجب أن ترسل الوحدة البيانات عبر دبوس تسلسلي إلى Arduino. هذه المسامير التسلسلية متصلة بالرقم السري 6 و 7 على Arduino. حتى نتمكن من استخدام الخيار التسلسلي للبرنامج على Arduino لقراءة هذه البيانات التسلسلية من المسامير.
برنامج Arduino والعمل:
و يعطى برنامج اردوينو الكامل أيضا جنبا إلى جنب مع رمز ESP في نهاية هذه الصفحة. يمكنك التمرير لأسفل لعرض البرنامج أو قراءة المزيد إذا كنت تريد فهم البرنامج.
برنامج الواجهة بسيط للغاية ، علينا فقط استخدام مكتبة البرامج التسلسلية لقراءة البيانات من الدبوس 6 و 7 وعرضها على شاشة LCD. نظرًا لأن البيانات التي يتم تلقيها بتنسيق سلسلة ، يتعين علينا استخدام خيار السلسلة الفرعية لكسر الحمولة إلى متطلباتنا أو حتى تحويلها إلى عدد صحيح إذا لزم الأمر. لذلك نبدأ بتحديد المسامير التي تتصل بها شاشة LCD.
const int rs = 8 ، en = 9 ، d4 = 10 ، d5 = 11 ، d6 = 12 ، d7 = 13 ؛ // الدبابيس التي تتصل بها شاشة LCD LiquidCrystal LCD (rs، en، d4، d5، d6، d7) ؛
وبما أننا قد توصيل دبابيس آر إكس وتكساس من ESP8266 مع 6 و 7 تشرين دبوس من اردوينو علينا أن التهيئة في المسلسل البرامج لتلك الدبابيس حتى نتمكن من الحصول على البيانات التسلسلية منها. لدي أسماء هذه كما ESP_Serial، يمكنك سميهم بأي شيء تتمناه
SoftwareSerial ESP_Serial (6،7) ؛ // TX، Rx
داخل وظيفة الإعداد () ، نقوم بتهيئة الاتصال التسلسلي للشاشة التسلسلية وأيضًا لمسلسل البرنامج. إذا كان بإمكانك تذكر أننا صنعنا برنامج ESP للتواصل بمعدل 9600 باود ، لذا يتعين علينا استخدام نفس معدل الباود للمنفذ التسلسلي للبرنامج. نعرض أيضًا رسالة مقدمة صغيرة على شاشة LCD لمدة ثانيتين.
إعداد باطل () {lcd.begin (16، 2) ؛ // نحن نستخدم شاشة LCD 16 * 2 LCD.print ("Arduino & ESP") ؛ // عرض رسالة تمهيدية Serial.begin (115200) ؛ ESP_Serial.begin (9600) ، تأخير (2000) ؛ lcd.clear () ؛ }
داخل وظيفة الحلقة الرئيسية () ، يتعين علينا التحقق مما إذا كان ESP8266 يرسل أي شيء. إذا كان الأمر كذلك ، فإننا نقرأ السلسلة من ESP8266 ونحفظها في متغير يسمى الحمولة. الحمولة المتغيرة هي من النوع String وستحتفظ بالمعلومات الكاملة المرسلة من وحدة ESP8266.
while (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString () ؛
الآن علينا تقسيم هذه السلسلة إلى قطع صغيرة حتى نتمكن من استخدامها لغرضنا الخاص ، في هذه الحالة علينا تقسيمها لعرضها على شاشة LCD يمكن القيام بذلك بسهولة باستخدام وظيفة السلسلة الفرعية في Arduino. يجب أن تعرف موضع كل حرف لاستخدام وظيفة السلسلة الفرعية هذه. يمكنك طباعة الحمولة على الشاشة التسلسلية لمعرفة موضع الأحرف واستخدامها لتصنيف السلاسل الفرعية كما هو موضح أدناه
local_date = payload.substring (14، 20) ، local_time = payload.substring (26، 31) ؛ درجة الحرارة = الحمولة. سلسلة فرعية (48 ، 54) ؛ الرطوبة = الحمولة.السلسلة الفرعية (55 ، 60) ؛
الآن يمكنني المضي قدمًا واستخدام هذه المتغيرات إما لطباعتها على الشاشة التسلسلية أو فقط طباعتها على شاشة LCD. ومع ذلك ، ستساعدنا طباعتها على الشاشة التسلسلية في التحقق مما إذا كانت السلاسل الفرعية مقسمة بشكل صحيح. بعد ذلك نقوم بطباعتها على شاشة LCD باستخدام الأسطر التالية
lcd.clear () ؛ lcd.setCursor (1 ، 0) ؛ lcd.print (تاريخ_المحلية) ؛ lcd.setCursor (8 ، 0) ؛ lcd.print (local_time) ؛ lcd.setCursor (1 ، 1) ؛ lcd.print (درجة الحرارة) ؛ lcd.setCursor (10 ، 1) ؛ lcd.print (الرطوبة) ؛
قم بتحميل البرنامج على Arduino ، وتأكد من أن التوصيلات كما هو موضح في مخطط الدائرة أعلاه. اضبط تباين شاشة LCD حتى ترى الأشياء بوضوح. من المفترض أن ترى رسالة المقدمة على شاشة LCD ، وبعد ثوانٍ قليلة يجب عرض التفاصيل مثل التاريخ والوقت ودرجة الحرارة والرطوبة على شاشة LCD كما هو موضح أدناه.
يمكنك أيضًا ملاحظة وميض المصباح الأزرق على ESP8266 في كل مرة تأتي فيها البيانات. إذا لم تتمكن من رؤية هذا ، فهذا يعني أن ESP ليس في وضع البرمجة ، فحاول الضغط على زر إعادة الضبط أيضًا للتحقق من الاتصالات.
على غرار ذلك ، يمكنك استخدام أي واجهة برمجة تطبيقات للحصول على أي بيانات مطلوبة من الإنترنت وإدخالها إلى Arduino وعملية عملك مع Arduino. هناك الكثير من واجهات برمجة التطبيقات المتاحة على الإنترنت ومع كل هؤلاء يمكنك إنشاء عدد غير محدود من المشاريع. أتمنى أن تكون قد فهمت المشروع واستمتعت ببنائه. إذا واجهت أي مشكلة ، فقم بنشرها في قسم التعليقات أدناه أو على منتدياتنا.
يمكنك العثور على جميع مشاريعنا المتعلقة بـ ESP8266 هنا.