ابدأ في تطوير إنترنت الأشياء: برنامج تعليمي لـ ESP8266 Arduino
نشرت: 2022-03-11الهدف من هذا البرنامج التعليمي ESP8266 Arduino هو التعرف على البرمجة المضمنة باستخدام Arduino على شريحة أصبحت شائعة جدًا بين مجتمع المصنّعين (والمطورين بشكل عام) لإمكانية الوصول إليها وسهولة استخدامها في مساحة إنترنت الأشياء. يؤدي البرنامج التعليمي أيضًا إلى جعل أيدينا قذرة باستخدام Alexa باستخدام "اختراق" غير رسمي لجعل Alexa يقوم بالمزايدة في المنزل (هذه التقنية غير مخصصة للاستخدام في الإنتاج ، فقط للشرح في المنزل). جرب هذا في المنزل ، ولكن ليس في العمل.
يكمن جمال هذه التقنية في أنه يمكننا استخدامها في منازلنا لجعل Alexa تقوم بأتمتة أي شيء يعمل بالكهرباء تقريبًا. كمكافأة إضافية ، حصلنا على نظرة ثاقبة حول البرمجة المضمنة باستخدام Arduino ، وهي مهارة ربما لا تكون شائعة جدًا بين المبرمجين العاديين هذه الأيام. أخيرًا ، وصلنا إلى العمل باستخدام شريحة ESP8266 الشهيرة ، وهي شريحة مفضلة لدى أصحاب العمل ؛ إنها شريحة صغيرة مذهلة لها القدرة على تشغيل جميع أنواع الأشياء ، مع شريحة Wifi مدمجة سنحتاجها لهذا المشروع. هذا ما سيمكن جهاز Alexa والشريحة من التواصل مع بعضهما البعض بشكل مباشر.
فقط بعض المعلومات الأساسية عن برمجة Alexa: يعمل نموذج برمجة "مهارات" Alexa على النحو التالي:
- أنت تتحدث إلى Alexa الخاص بك.
- يقوم Alexa بتوجيه خطابك طوال الطريق إلى سحابة Amazon.
- يتم توجيه أمر الكلام إلى "مهارة" Alexa (برنامج يعمل في سحابة Amazon).
تتولى "مهارة" اليكسا التعامل مع الأمر ؛ عادةً ما ينتج عنه رد يتم إرساله مرة أخرى إلى جهاز Alexa ، مما يجعله يقول شيئًا للمستخدم ردًا على ذلك. في حالة Alexa IoT ، يتم توجيه الأمر إلى "ظل الجهاز" على سحابة Amazon ، والذي ينتج عنه في النهاية استجابة يتم إرسالها إلى جهاز آخر في منزلك. نحن نتجاوز كل ذلك باختراقنا. نريد أن نجعل جهاز Alexa يتحدث مباشرة إلى شريحة ESP8266 الخاصة بنا ، داخل منزلنا ، دون إرسال أي شيء إلى السحابة والعودة. نريد أن يرسل Alexa طلبًا مباشرةً إلى ESP8266 ، عبر شبكة wifi المنزلية الخاصة بنا وداخلها فقط.
اختراقنا ليس سرا حقا. سنقوم بجعل ESP8266 "يحاكي" جهاز Wemo Belkin ، وهو جهاز له ترخيص خاص مع Amazon يسمح له بالاتصال مباشرة بجهاز Alexa ، متجاوزًا جميع اتصالات Amazon السحابية الموضحة أعلاه.
يتظاهر بأنه Wemo ، يتمتع ESP8266 بامتياز القدرة على تلقي الأوامر مباشرة من Alexa.
الخطة الأساسية لبرنامج ESP8266 الخاص بنا في Arduino
- استمع إلى ESP8266 لجهاز Alexa الذي يرسل مجسات على شبكة wifi المحلية للأجهزة المتوافقة ، واستجب لهذه التحقيقات بقول "أنا Wemo".
- بمجرد أن يثق جهاز Alexa ، استمع لمزيد من الأوامر من الجهاز المذكور. تعامل معهم عن طريق إرسال رموز الأشعة تحت الحمراء من خلال جهاز إرسال الأشعة تحت الحمراء ، وتشغيل / إيقاف تشغيل تلفزيوننا.
متطلبات الأجهزة
لإكمال هذا البرنامج التعليمي ، ستحتاج إلى الحصول على بعض العناصر بنفسك ، والتي يسهل الحصول عليها جميعًا.
- أي جهاز Alexa. لقد قمت بتطوير هذا البرنامج التعليمي باستخدام Alexa Dot. هل سيعمل البرنامج التعليمي مع محاكي Echo؟ قد يكون! (لكنني لم أختبره). جربها إذا كنت تشعر بالمغامرة (أو الاقتصاد المقتصد). يكلف جهاز Alexa مصروف جيب ، لكن استخدام جهاز Echosim مجاني.
- شريحة ESP8266. كانت تكلفتها حوالي بضعة دولارات أمريكية في وقت كتابة هذا التقرير. يمكنك الحصول عليها من موقع Ebay ، أو عن أي متجر أجهزة جيد التجهيز عبر الإنترنت.
- الصمام الثنائي IR (الأشعة تحت الحمراء). ستحتاج إلى توصيل هذا بشريحة ESP8266 ، وهذا ما عليك القيام به بنفسك. بالنسبة لهذا المشروع ، نحتاج فقط إلى إمكانيات الإرسال ؛ نحن لا نهتم بتلقي IR. تأكد من توصيل الصمام الثنائي بـ GND وإخراج 0 لكي يعمل هذا البرنامج التعليمي. (إذا كنت تفعل ذلك بأي طريقة أخرى ، فلا بأس ، ولكن سيتعين عليك أيضًا أن تكون مسؤولاً عن تعديل كود البرنامج التعليمي وفقًا لذلك. قد يساعدك هذا الرابط. كن على علم أنه نظرًا لنظام الترقيم المستخدم في ESP8266 ، دبوس 0 يمكن تسميته "D3".
- محول تسلسلي يوجد على جانب واحد USB (لتوصيله بجهاز الكمبيوتر الخاص بك) ، والجانب الآخر يناسب شريحة ESP8266.
- شبكة wifi محلية تعرف اسم المستخدم وكلمة المرور لها.
أدوات برمجيات اردوينو
- اردوينو IDE. هناك إصدارات لجميع أنظمة التشغيل الرئيسية ، بما في ذلك Windows. تم تطوير هذا البرنامج التعليمي على إصدار Ubuntu ، لكنني قمت بتثبيت واستخدام Arduino على Windows أيضًا ، ولا توجد مشاكل.
- مكتبة تطوير ESP8266 لاردوينو.
- السائقين. لحسن الحظ ، يجب أن تكون برامج التشغيل الخاصة بالمحول على الأرجح هي التوصيل والتشغيل ، لذلك لا يلزم وجود برامج تشغيل إضافية.
إعداد كل شيء
- قم بتثبيت Arduino IDE.
- قم بتثبيت مكتبة ESP8266 باستخدام Boards Manager.
لتثبيت مكتبة ESP8266 باستخدام Boards Manager:
- في Arduino IDE ، افتح ملف -> تفضيلات .
- أدخل عنوان URL هذا في "عنوان URL لمدير اللوحات الإضافية": http://arduino.esp8266.com/stable/package_esp8266com_index.json
- انقر فوق موافق
انتقل إلى Boards Manager ( Tools -> Board: [اللوحة الحالية] -> Boards Manager ).
- في مربع نص "عامل التصفية" ، اكتب "ESP8266".
- يجب أن تحصل على إدخال لـ "esp8266" الآن بعد أن تمت إضافة مدير مجالس إضافي. اختره ، وانقر على "تثبيت".
- انتظر قليلاً - يستغرق تنزيل كل شيء بعض الوقت.
- أعد تشغيل Arduino IDE.
- افتح Tools -> Board: وهذه المرة ، قم بالتمرير لأسفل إلى "Generic ESP8266 Module" وحدده.
إضافة مكتبات الطرف الثالث
يقدم Arduino العديد من الطرق المختلفة لإضافة مكتبات خارجية إلى مشروعك ، أو "Sketch" كما يسمونه. لتبسيط الأمور قدر الإمكان ، في هذا البرنامج التعليمي ، سنأخذ أسرع شرح ممكن ، وهو ببساطة نسخ المجلدات. سنحتاج إلى إضافة مكتبتين خارجيتين بالضبط للدرس التعليمي للعمل: IRemoteESP8266 و https://github.com/me-no-dev/ESPAsyncTCP.
- في الكود التعليمي في GitHub ، ابحث عن دليل "المكتبات".
- في دليل التثبيت الجذر لـ Arduino (على سبيل المثال ، C: \ Program Files \ Arduino) ، ابحث عن الدليل الفرعي "المكتبات".
- انسخ دليل IRemoteESP8266 من دليل "مكتبات" البرنامج التعليمي إلى دليل "مكتبات" في Arduino.
- انسخ دليل ESPAsyncTCP من دليل "مكتبات" البرنامج التعليمي إلى دليل "مكتبات" في Arduino.
- أعد تشغيل Arduino IDE.
يتم الآن تضمين مكتبات إرسال IR و TCP غير المتزامن في المشروع.
إعدادات
تُظهر الصورة أدناه الإعدادات النموذجية ، والتي تعمل معي ومع أجهزتي ولكنها قد تختلف من مستخدم إلى آخر. يمكنك تجربة الإعدادات أدناه ، ولكن هناك احتمال أن تضطر إلى تعديلها بناءً على الشريحة والمحول الخاصين بك. Mine هو nodemcu ، على سبيل المثال ، لذلك اضطررت إلى تغيير طريقة إعادة التعيين من "ck" (الافتراضي) إلى "nodemcu". أيضًا ، قم بتعيين "منفذ التصحيح" على "تسلسلي" حتى تتمكن من استخدام مصحح الأخطاء التسلسلي. يعد الإعداد الخاص بي إعدادًا نموذجيًا للغاية ، لذا يمكنك استخدام الإعدادات الخاصة بي كقاعدة ؛ أنا أقول فقط لا تتفاجأ إذا كان عليك العبث معهم حتى تعمل عملية الترجمة والفلاش.
أثبت إعدادك باستخدام ESP8266 Hello World
تبدأ مشاريع Arduino بملف .ino. يحدد ملف .ino نقطتي إدخال: الإعداد والحلقة. بالنسبة إلى "عالم الترحيب" الخاص بنا ، سنقوم بإضاءة بعض الضوء على ESP8266 فقط للتحقق من أن الكود الخاص بنا يعمل.
//SET TO MATCH YOUR HARDWARE #define SERIAL_BAUD_RATE 9600 #define LED_PIN 2 /*---------------------------------------*/ //Runs once, when device is powered on or code has just been flashed void setup() { //if set wrong, your serial debugger will not be readable Serial.begin(SERIAL_BAUD_RATE); pinMode(LED_PIN, OUTPUT); } /*---------------------------------------*/ //Runs constantly void loop() { digitalWrite(LED_PIN, LOW); delay(1000); digitalWrite(LED_PIN, HIGH); delay(1000); }
تجميع وفلاش الكود
تعتبر عملية التجميع والفلاش خطوات سهلة ، إذا كان الإعداد الخاص بك صحيحًا حتى الآن. للترجمة بدون وميض ، ما عليك سوى الانتقال إلى Sketch -> Verify / Compile من قائمة Arduino.
وميض الكود إلى الشريحة وكذلك التحويل البرمجي ، حدد Sketch -> Upload من قائمة Arduino.
إذا نجح الفلاش ، فسترى عرض تقدم ينتقل من 0٪ إلى 100٪ ، وخلال هذه الفترة من المرجح أن يومض أو يومض مؤشر LED الموجود على الشريحة الخاصة بك.
لاختبار نجاح التصحيح التسلسلي:
- تأكد أولاً من ضبط منفذ التصحيح على Serial ( Tools -> Debug port ).
- بعد انتهاء الرمز الخاص بك من الوميض إلى الشريحة ، حدد أدوات -> جهاز مراقبة تسلسلي .
إخراج مصحح الأخطاء التسلسلي بعد بداية ناجحة:
عظيم ، لذلك هذا يعمل ؛ بعد ذلك ، نريد التحقق من إخراج IR الخاص بنا. دعنا نرسل إشارة عبر جهاز إرسال الأشعة تحت الحمراء الخاص بنا ونتحقق من وصول الإشارة.
سنستفيد من مكتبة Arduino IR الموجودة لمساعدتنا. أحد الأشياء الرائعة في Arduino هو مدى سهولة إدخال المكتبات والوحدات النمطية وإخراجها. منعش جدًا لإطار عمل C ++!
ما عليك سوى اتباع التعليمات الموجودة في ملف README الخاص بـ Git repo للتثبيت في Arduino.
هذا الرمز يومض فقط جهاز إرسال الأشعة تحت الحمراء بشكل متكرر. الأشعة تحت الحمراء غير مرئية للعين البشرية ، ولكن هناك نصيحة مفيدة لاختبارها ؛ قم بتشغيل هذا الرمز ، وتحقق (عبر مصحح الأخطاء) من أنه يعمل على الشريحة الخاصة بك ، ثم افتح كاميرا جهازك المحمول. انظر مباشرة إلى لمبة IR من خلال الكاميرا . إذا كان يعمل ، يجب أن ترى المصباح يعمل وينطفئ بشكل واضح. يمكنك تجربة ذلك مع أي جهاز تحكم عن بعد يعمل أيضًا (على سبيل المثال ، جهاز تحكم عن بعد قياسي في التلفزيون). يجب أن يتسبب الكود التالي في بدء وميض لمبة الأشعة تحت الحمراء كل 0.5 ثانية. في الواقع ، يرسل أمر تشغيل / إيقاف LG ، لذلك قد يقوم بالفعل بإيقاف تشغيل تلفزيون LG وتشغيله إذا كان قريبًا.
#include <IRremoteESP8266.h> // IR Library IRsend* irSend; // infrared sender //SET TO MATCH YOUR HARDWARE #define SERIAL_BAUD_RATE 9600 //PIN 0 is D3 ON THE CHIP #define IR_PIN 0 /*---------------------------------------*/ //Runs once, when device is powered on or code has just been flashed void setup() { //if set wrong, your serial debugger will not be readable Serial.begin(SERIAL_BAUD_RATE); //initialize the IR irSend = new IRsend(IR_PIN, true); irSend->begin(); } /*---------------------------------------*/ //Runs constantly void loop() { irSend->sendNEC(0x20DF10EF, 32, 3); delay(1000); }
ابدأ البرنامج التعليمي ESP8266
إذا نجح كل شيء حتى الآن ، أعتقد أنه يمكننا أن نشعر بالرضا عن عمل المعدات الأساسية والإعداد لدينا ، ونحن مستعدون لبدء الجزء الأساسي من البرنامج التعليمي.
الاتصال بشبكة Wifi
أولاً ، سنحتاج إلى الاتصال بشبكة wifi المحلية. سيحاول الرمز أدناه الاتصال بشبكة Wifi ، ويبلغ عن نجاح الاتصال (من خلال مصحح الأخطاء التسلسلي). في نموذج الكود ، لا تنس استبدال قيمة myWifiSsid باسم مستخدم شبكة wifi الخاصة بك ، واستبدال قيمة myWifiPassword بكلمة المرور الصحيحة.
#include "debug.h" // Serial debugger printing #include "WifiConnection.h" // Wifi connection // this file is part of my tutorial code #include <IRremoteESP8266.h> // IR library WifiConnection* wifi; // wifi connection IRsend* irSend; // infrared sender //SET YOUR WIFI CREDS const char* myWifiSs; const char* myWifiPassword = "*******"; //SET TO MATCH YOUR HARDWARE #define SERIAL_BAUD_RATE 9600 //PIN 0 is D3 ON THE CHIP #define IR_PIN 0 /*---------------------------------------*/ //Runs once, when device is powered on or code has just been flashed void setup() { //if set wrong, your serial debugger will not be readable Serial.begin(SERIAL_BAUD_RATE); //initialize wifi connection wifi = new WifiConnection(myWifiSsid, myWifiPassword); wifi->begin(); //connect to wifi if (wifi->connect()) { debugPrint("Wifi Connected"); } } /*---------------------------------------*/ //Runs constantly void loop() { }
قم بتشغيل خادم Wemo
متصل؟ جيد. نصل الآن إلى جوهر المشروع: خادم Wemo.

تم تضمين Wemo Emulator الخاص بي في الملفات المصدر لهذا البرنامج التعليمي. الآن ، يمكنك البحث في Google والعثور على محاكي Wemo أبسط. يمكنك العثور على واحدة تمت كتابتها باستخدام كود أقل ، وهي سهلة الفهم. بكل الوسائل ، لا تتردد في الفحص والتجربة وكتابة ما تريده ، وما إلى ذلك. هذا كله جزء من جعل هذا البرنامج التعليمي خاصًا بك.
السبب وراء ذلك هو أنه يستخدم ESPAsyncTCP. لماذا هذا جيد؟ حسنًا ، لا يوجد سوى العديد من الخوادم (أو الأجهزة) التي يمكنك تشغيلها على ESP8266 باستخدام هذه الطريقة قبل أن تبدأ في أن تصبح غير موثوقة ، بمعنى أن أليكسا ستبدأ في فقدان الأجهزة (عدم العثور عليها) ، وسيتم إسقاط الأوامر ، والأداء يصبح بطيئا. أجد أنه تم تكبير هذا الرقم باستخدام مكتبة ESPAsyncTCP.
بدونها ، وجدت عدم موثوقية في التسلل إلى حوالي 10-12 جهازًا ؛ باستخدامه ، أجد أن هذا العدد يصل إلى حوالي 16. في حالة رغبتك في توسيع هذا البرنامج التعليمي واستكشاف حدود ما يمكن أن تفعله الشريحة ، فإنني أوصي باستخدام الإصدار الخاص بي. إذا كنت تريد أن ترى إصدارًا أبسط فقط لفهمك ، فلا تتردد في البحث عن "wemo emulator Arduino" على Google ؛ يجب أن تجد مجموعة من الأمثلة.
الآن ، يتعين علينا تثبيت مكتبة ESPAsyncTCP. قم بتثبيته تمامًا كما فعلنا في مكتبة IR ؛ انتقل إلى صفحة Git واتبع التعليمات.
هذه المكتبة مضمنة في كود مثال esp8266 اردوينو الخاص بي أيضًا. هذا هو الكود فقط لفتح اتصال wifi ، والاستماع إلى طلب اكتشاف Alexa ، والتعامل معه من خلال إرجاع استجابة "أنا Wemo".
#include "debug.h" // Serial debugger printing #include "WifiConnection.h" // Wifi connection #include "Wemulator.h" // Our Wemo emulator #include <IRremoteESP8266.h> // IR library WifiConnection* wifi; // wifi connection Wemulator* wemulator; // wemo emulator IRsend* irSend; // infrared sender //SET YOUR WIFI CREDS const char* myWifiSs; const char* myWifiPassword = "*******"; //SET TO MATCH YOUR HARDWARE #define SERIAL_BAUD_RATE 9600 //PIN 0 is D3 ON THE CHIP #define IR_PIN 0 /*---------------------------------------*/ //Runs once, when device is powered on or code has just been flashed void setup() { //if set wrong, your serial debugger will not be readable Serial.begin(SERIAL_BAUD_RATE); //initialize wifi connection wifi = new WifiConnection(myWifiSsid, myWifiPassword); wifi->begin(); //initialize the IR irSend = new IRsend(IR_PIN, false); irSend->begin(); //initialize wemo emulator wemulator = new Wemulator(); //connect to wifi if (wifi->connect()) { wemulator->begin(); //start the wemo emulator (it runs as a series of webservers) wemulator->addDevice("tv", new WemoCallbackHandler(&commandReceived)); wemulator->addDevice("television", new WemoCallbackHandler(&commandReceived)); wemulator->addDevice("my tv", new WemoCallbackHandler(&commandReceived)); wemulator->addDevice("my television", new WemoCallbackHandler(&commandReceived)); } } /*---------------------------------------*/ //Runs constantly void loop() { //let the wemulator listen for voice commands if (wifi->isConnected) { wemulator->listen(); } }
الاختبار المسبق
اختبر ما لدينا حتى الآن (wifi والمحاكي) ، من خلال تشغيله مع Alexa. يفترض هذا البرنامج التعليمي أن جهاز Alexa الخاص بك قد تم إعداده وتثبيته في منزلك.
اكتشاف الاختبار:
قل لـ Alexa ، "Alexa ، اكتشف الأجهزة."
سيؤدي ذلك إلى قيام Alexa ببث طلب UDP على شبكة wifi المحلية الخاصة بك ، والبحث عن Wemos والأجهزة الأخرى المتوافقة. يجب استلام هذا الطلب في المكالمة إلى wemulator->listen();
في وظيفة الحلقة (). هذا بدوره يوجهه إلى طريقة Wemulator's handleUDPPacket(*)
. يتم إرسال استجابة في طريقة nextUDPResponse()
. لاحظ محتوى هذا الرد:
const char UDP_TEMPLATE[] PROGMEM = "HTTP/1.1 200 OK\r\n" "CACHE-CONTROL: max-age=86400\r\n" "DATE: Sun, 20 Nov 2016 00:00:00 GMT\r\n" "EXT:\r\n" "LOCATION: http://%s:%d/setup.xml\r\n" "OPT: \"http://schemas.upnp.org/upnp/1/0/\"; ns=01\r\n" "01-NLS: %s\r\n" "SERVER: Unspecified, UPnP/1.0, Unspecified\r\n" "ST: urn:Belkin:device:**\r\n" "USN: uuid:Socket-1_0-%s::urn:Belkin:device:**\r\n\r\n";
هذا هو الرمز الذي يخبر Alexa "أنا Wemo (Belkin) ، كيف يمكنني مساعدتك؟" بمجرد تلقي Alexa لهذه الاستجابة ، فإنها تعرف وتتذكر أنه قد يتم توجيه أوامر المنزل الذكي المستقبلية إلى هذا الجهاز.
يجب أن يبدو إخراج مصحح الأخطاء التسلسلي في هذه المرحلة مثل الصورة أدناه. عند الانتهاء من الاكتشاف ، ستخبرك Alexa شفهيًا بأنها "اكتشفت [N] من الأجهزة" على شبكتك.
في وظيفة setup()
، لاحظ المقتطف التالي:
new WemoCallbackHandler(&commandReceived)
هذا هو رد الاتصال حيث سنلتقط الأوامر من Alexa. يتم تعريف جسمه في WemoCallbackHandler.h (WemoCallbackHandler :: handleCallback). بمجرد أن نحصل على أمر من Alexa ، يمكننا أن نفعل ما نحب به. في الأسطر التي سبقت ذلك ، قمنا بإعداد أوامر محتملة يمكن استخدامها ، مع هذه الأسطر من التعليمات البرمجية:
wemulator->addDevice("tv"); wemulator->addDevice("television"); wemulator->addDevice("my tv"); wemulator->addDevice("my television");
هذه 4 "خوادم" منفصلة أو مستمعين نقوم بتشغيلها على الشريحة. يقوم هذا بإعداد القدرة على قول أي من الأوامر التالية لـ Alexa:
Alexa ، قم بتشغيل تلفزيون Alexa ، قم بإيقاف تشغيل تلفزيون Alexa ، قم بتشغيل تلفزيون Alexa ، قم بإيقاف تشغيل تلفاز Alexa ، قم بتشغيل تلفاز Alexa الخاص بي ، قم بإيقاف تشغيل تلفاز Alexa الخاص بي ، قم بتشغيل تلفاز Alexa الخاص بي ، قم بإيقاف تشغيل التلفزيون الخاص بي
وهذه هي الطريقة التي سنختبر بها. نتوقع أن يؤدي قول أي من هذه الأوامر إلى تنشيط الكود وإدخال رد الاتصال ، حيث يمكننا فعل ما نحب به.
أضف أمر الأشعة تحت الحمراء
الآن بعد أن تلقينا الأمر ، حان الوقت للتعامل معه عن طريق… تشغيل / إيقاف تشغيل تلفزيوننا. لذلك سيكون هذا كل شيء — wifi ، ومحاكي wemo ، و IR — معًا. جهاز التلفزيون الخاص بي هو LG ، لذلك بحثت عن التسلسل المناسب لتشغيل / إيقاف التشغيل ، وأرسلته من خلال وظيفة sendNEC بمكتبة IR (تستخدم LG بروتوكول NEC). يعتبر تشفير / فك تشفير الأشعة تحت الحمراء موضوعًا منفصلاً في حد ذاته ، حيث يتم تشفير الرسالة في تشكيل الإشارة ؛ إنها مواصفات دقيقة للغاية للتوقيتات والعلامات والمسافات. يميل كل مصنع إلى استخدام بروتوكول الملكية الخاص به للأوامر ، وبتوقيتات مختلفة ؛ إنه ممتع للغاية ، ويمكنك التعمق أكثر من خلال النظر في الكود المصدري لمكتبة IR تلك ، googling ، إلخ. ولكن لراحتنا ، تفاصيل كل ما تعتني به مكتبة IR الخاصة بنا.
التلفزيون الخاص بك ليس LG؟ فقط جوجل الرمز الصحيح. هذا هو الأمر الخاص بأجهزة تلفزيون Sony (تحذير: لم يتم اختباره):
irSend.sendSony(0xa90, 12);
إذا كنت تريد فعل ذلك بنفسك ، فيمكنك إعداد مستقبل الأشعة تحت الحمراء ، وتوجيه جهاز التحكم عن بُعد (أو أي جهاز إرسال IR) إليه ، وفك تشفير الرموز التي يرسلها ؛ هذا برنامج تعليمي مختلف ، رغم ذلك.
نهاية إلى نهاية الاختبار
- ضع اليكسا الخاص بك في أي مكان يمكن أن يسمعك.
- ضع ESP8266 مع الصمام الثنائي IR المرفق ، ضمن نطاق التحكم عن بعد في التلفزيون.
- قل "Alexa ، اكتشف الأجهزة." انتظر حتى يبلغ عن النجاح (يجب أن يكون قد اكتشف جهازًا واحدًا على الأقل).
- قل "Alexa ، قم بتشغيل التلفزيون الخاص بي" أو "Alexa ، أوقف تشغيل التلفزيون".
يجب أن يفهم Alexa الأمر الخاص بك (كأمر smarthome ، وليس موجهًا إلى مهارة معينة) ، والبحث عن جهاز محلي للتعامل معه ، وإرسال الأمر إلى الجهاز (ESP8266 الخاص بك). يجب أن يستقبله جهازك ويرسل أمر التحكم عن بعد إلى التلفزيون. يمكنك عرض الصمام الثنائي من خلال كاميرا الهاتف المحمول للتأكد من انبعاثه.
نظرًا لأن رمز IR لإيقاف تشغيل التلفزيون هو نفس رمز تشغيله ، فلا يهم ما إذا كنت تعطي الأمر "للتشغيل" أو "إيقاف التشغيل". إنه نفس الرمز ، وهو يبدل الحالة. إذا كان التلفزيون مغلقًا ، فيجب أن يتم تشغيله ، وإذا كان قيد التشغيل ، فيجب إيقاف تشغيله.
استكشاف الأخطاء وإصلاحها
هل أنت متصل بشبكة Wifi؟
هل أدخلت اسم المستخدم / كلمة المرور الصحيحة في قيم المتغير الصحيحة؟
//SET YOUR WIFI CREDS const char* myWifiSs; const char* myWifiPassword = "*******";
هل تتلقى رسالة فشل ، أو أي خطأ من خلال منفذ التصحيح التسلسلي ، عند الاتصال بشبكة Wifi؟
هل Wifi الخاص بك قيد التشغيل ، وهل يمكنك الاتصال به عبر أي وسيلة عادية أخرى؟
هل تم اكتشاف جهازك بواسطة Alexa؟
سترسل Alexa طلبات لاكتشاف الأجهزة عندما تقول "Alexa ، اكتشف الأجهزة".
يجب تكوين Alexa وإعداده بشكل صحيح ومتصل بنفس شبكة Wifi مثل ESP8266.
ابحث في Fauxmo.h. انظر وظيفة Fauxmo :: handle (). هذا هو الكود الأول الذي سيتم تشغيله بمجرد سماع ESP8266 المكالمة. ضع رسائل التصحيح لمعرفة ما إذا كان هناك أي رمز بعد ذلك
if (len > 0) {
يجري. إذا لم يكن الأمر كذلك ، فلن يتم استلام الأمر. إذا كان الأمر كذلك ، فيظهر أنه تم استلام الأمر ، ولكن لم يتم التعامل معه بشكل صحيح. اتبع الكود من هناك لمعرفة المشكلة.
هل لديك العديد من الأجهزة الأخرى القابلة للاكتشاف على شبكتك؟ يمكن أن يتسبب الكثير جدًا في تشغيل الاكتشاف بشكل أبطأ ، أو حتى الفشل في بعض الأحيان.
هل جهازك يتلقى الأمر؟
عند إصدار الأمر "Alexa ، قم بتشغيل التلفزيون الخاص بي ،" يجب أن يكون التنفيذ هو إدخال WemoCallbackHandler::handleCallback handler
(في ملف WemoCallbackHandler.h). إذا لم تكن قد فعلت ذلك ، فحاول إخراج بعض رسائل تصحيح الأخطاء هناك للتأكد من إطلاقها عند إصدار الأمر الخاص بك. حاول أيضًا التأكد من معرفة Alexa بجهازك بقول "Alexa ، اكتشف الأجهزة" قبل إصدار الأمر الخاص بك. تفترض هذه الخطوة نجاح اكتشاف الجهاز.
هل يصدر الصمام الثنائي IR؟
كما هو موضح من قبل ، عندما تعتقد أن جهازك يجب أن يصدر انبعاثات ، وجه كاميرا هاتفك المحمول إليه وانظر إلى الصمام الثنائي من خلال الكاميرا. على الرغم من أنه لا يمكنك رؤية أي شيء في الحياة الواقعية ، إلا أنه من خلال الكاميرا يجب أن يظهر كضوء عادي يضيء ويومض. إذا رأيت هذا ، فهذا يعني أنه ينبعث… شيء ما.
هل إشارة الأشعة تحت الحمراء معكوسة؟
قد يتم توصيل الصمام الثنائي IR الخاص بك بطريقة يتم فيها عكس الإشارة بشكل أساسي. يرجى أن تتحمل معي في توضيحي ، لأنني لست رجل إلكترونيات أو أسلاك ، ولكن نتيجة الأسلاك الخاطئة في الصمام الثنائي ستكون أن ضوء الأشعة تحت الحمراء سيتم تشغيله افتراضيًا ، ولكن يتم إيقاف تشغيله عندما تنوي مكتبة IRSend الانعطاف عليه. إذا كانت هذه هي الحالة ، فيجب أن يكون ضوء الأشعة تحت الحمراء قيد التشغيل (مرئيًا من خلال الكاميرا) افتراضيًا ، بعد تشغيل كود setup()
، ولكن قبل حدوث أي شيء آخر. إذا كنت تريد التعليق على كل التعليمات البرمجية الموجودة داخل loop()
، فيجب أن تراها تظل قيد التشغيل باستمرار.
لمعرفة كيفية إصلاح ذلك بشكل أكثر وضوحًا ، انتقل إلى مجلد المكتبات / IRemoteESP8266 / src الخاص بكود البرنامج التعليمي. انظر المنشئ:
IRsend::IRsend(uint16_t IRsendPin, bool inverted) : IRpin(IRsendPin), periodOffset(PERIOD_OFFSET) { if (inverted) { outputOn = LOW; outputOff = HIGH; } else { outputOn = HIGH; outputOff = LOW; } }
الحجة "المقلوبة" والمنطق الذي يتعامل معها هو ما نتحدث عنه. إذا تم عكس الأسلاك الخاصة بك ، فإن الحل الأسهل هو إجراء تغيير بسيط في الكود للسماح بذلك (بدلاً من إعادة الأسلاك ... ولكن إذا كنت بالطبع يمكنك القيام بذلك إذا كنت تفضل ذلك). فقط قم بتغيير هذا الخط في AlexaTvRemote.ino:
//initialize the IR irSend = new IRsend(IR_PIN, false);
ل
//initialize the IR irSend = new IRsend(IR_PIN, true);
هل لديك رمز وأمر التحكم عن بعد الصحيح؟
إذا بدا أن كل شيء آخر يسير على ما يرام ، لكن التلفزيون لا يطيع ، فمن المحتمل جدًا أن هناك خطأ ما في رمز الأشعة تحت الحمراء. جرب مكالمات وظائف مختلفة على واجهة مكتبة الأشعة تحت الحمراء (على سبيل المثال ، sendLG
، و sendPanasonic
، و sendSharp
، وما إلى ذلك) ، أو تأكد من أن الذي تستخدمه يطابق أجهزتك. من غير المحتمل جدًا أن أجهزة التلفزيون لديك غير مدعومة من قبل تلك المكتبة ، لكنني أعتقد أن ذلك ممكن تقنيًا.
تأكد من أن الرمز الذي ترسله هو الرمز الصحيح لجهازك. قد تضطر إلى القيام ببعض البحث على google للعثور على الشيء الصحيح. إذا فشل كل شيء آخر ، فهناك دائمًا خيار اكتشاف الكود الذي ينبعث من جهاز التحكم عن بُعد الخاص بك ، عندما تضغط على زر الطاقة - ولكن هذا برنامج تعليمي مختلف ويتطلب أجهزة مختلفة.
تغليف
نأمل أن يكون كل شيء على ما يرام بالنسبة لك. إذا كان الأمر كذلك (وربما حتى لو لم يكن كذلك) ، فهذه طريقة جيدة لقص أسنانك في عدة مواضيع في وقت واحد:
- أليكسا
- البرمجة المدمجة
- شريحة ESP8266
- اردوينو IDE
بالطبع أيضًا ، لديك راحة طفيفة ، تتمثل في القدرة على تشغيل / إيقاف تشغيل التلفزيون عن طريق الأوامر الصوتية.
لماذا هاك؟
لماذا يعد هذا اختراقًا وليس جزءًا من واجهة برمجة التطبيقات الأساسية لـ Alexa؟ بعد تعلم كيفية تطوير مهارتي الأولى في Alexa ، كل ما أردت معرفته حقًا هو "كيف يمكنني إرسال أمر مباشرة من Alexa إلى جهاز آخر على الشبكة؟" إنه لأمر مخز أن Amazon لم تكشف عن واجهة برمجة تطبيقات كاملة للاتصال بين جهاز Alexa والكائنات الأخرى على الشبكة المحلية ، دون المرور بنموذج "المهارة" أو "المنزل الذكي" (حيث يجب إرسال كل شيء إلى AWS قبل فعل أي شيء) ، لكنهم لم يفعلوا ذلك.
حاول أن تأخذها إلى أبعد من ذلك
جرب مجموعة من أوامر التحكم عن بعد للتحكم الكامل في التلفزيون ، مثل تغيير القناة والتحكم في مستوى الصوت. اختبر حدود الشريحة من خلال معرفة عدد الأوامر المختلفة التي يمكنك الاستماع إليها على ESP8266 واحد (تلميح: الرقم بالكاد يكسر رقمين ، بدون بعض البرمجة الذكية جدًا). إذا كنت جيدًا مع الأجهزة ، فحاول التحكم في الأجهزة الأخرى ليس من خلال الأشعة تحت الحمراء ، عن طريق توصيلها مباشرة بشرائح ESP8266 ؛ مثل الإضاءة وما إلى ذلك. إعادة اختراع wemo!
- كيف صنعت محطة طقس اردوينو كاملة الوظائف
- العمل مع عينات الصوت ESP32