جدول المحتويات:

جهاز التحكم عن بعد ESP32 Bluetooth BLE: 8 خطوات
جهاز التحكم عن بعد ESP32 Bluetooth BLE: 8 خطوات

فيديو: جهاز التحكم عن بعد ESP32 Bluetooth BLE: 8 خطوات

فيديو: جهاز التحكم عن بعد ESP32 Bluetooth BLE: 8 خطوات
فيديو: Home Automation using ESP32 Blynk Bluetooth IR Remote | IoT Projects 2023 2024, شهر نوفمبر
Anonim
جهاز التحكم عن بعد ESP32 Bluetooth BLE
جهاز التحكم عن بعد ESP32 Bluetooth BLE
جهاز التحكم عن بعد ESP32 Bluetooth BLE
جهاز التحكم عن بعد ESP32 Bluetooth BLE
جهاز التحكم عن بعد ESP32 Bluetooth BLE
جهاز التحكم عن بعد ESP32 Bluetooth BLE
جهاز التحكم عن بعد ESP32 Bluetooth BLE
جهاز التحكم عن بعد ESP32 Bluetooth BLE

هذا المشروع هو مثال على كيفية توصيل عصا تحكم Bluetooth BLE غير مكلفة بـ ESP32. تمت كتابة الكود باستخدام Arduino IDE الإصدار 1.8.5 مع الملحق ESP32. عصا التحكم BLE المستخدمة هي جهاز تجاري يمكنك شراؤه على الإنترنت بأقل من 20.00 دولارًا أو من متجر BELoW المحلي الخاص بك مقابل 5.00 دولارات.

إن عصا التحكم التي استخدمتها لهذا المشروع هي وحدة التحكم عن بعد Spektrum VR Control Bluetooth. يتم تسويقه على أنه يعمل مع أجهزة Android و IOS اللوحية كعصا تحكم / ماوس للاستخدام مع سماعات رأس VR.

تحتوي وحدة التحكم عن بعد VR Control Bluetooth على عصا تحكم واحدة بمحور X و Y ، وزرين تحريك في الأمام وستة أزرار على المقبض. اثنان من الأزرار لتشغيل / إيقاف التشغيل والتحكم في الوضع. يمكن استخدام الأزرار الأربعة الأخرى لأي شيء تريده. هذا المشروع عبارة عن هيكل عظمي أو إطار عمل يتعامل مع جميع واجهات Bluetooth وفك تشفير الأزرار وعصا التحكم. كل ما عليك فعله هو إضافة استدعاءات وظيفية للتعامل مع ما تريد أن تفعله الأزرار وعصا التحكم. لا تحتاج إلى معرفة أي شيء عن Bluetooth لاستخدام هذا الإطار.

هناك العديد من مواقع الويب التي تحتوي على إرشادات مفصلة لتثبيت Arduino IDE و ESP32 الملحق. لن أحاول تكرار هذه المعلومات هنا. جوجل واتبع التعليمات.

إطار العمل هو تعديل لنموذج عميل BLE الذي نشرته IoT Sharing. يمكنك العثور عليها هنا. يمكنك دراسة هذا الرمز للحصول على فكرة عن كيفية عمل BLE. يحتوي Expressif على مثال كامل لعميل GATT BLE ويشرح العملية بالتفصيل (غير مكتوب لـ Arduino IDE). يمكنك الحصول عليه هنا.

هذا ليس برنامج تعليمي BLE. لن أشرح كيفية عمل الكود بالتفصيل. سأستخدم مصطلحات BLE لوصف بعض ميزات عصا التحكم. سيتم شرح جزء الكود الذي تحتاج إلى تعديله لمشروعك بالتفصيل لمساعدتك على تعديله. يقتصر النطاق على إبقاء هذا Instructable قصيرًا ومركّزًا على استخدام عصا التحكم.

الخطوة 1: القليل عن تقنية Bluetooth منخفضة الطاقة (BLE)

لا يُقصد بهذا أن يكون برنامجًا تعليميًا عن BLE. عندما بدأت هذا المشروع ، لم أكن أعرف الفرق بين BLE و Classic Bluetooth. أردت فقط معرفة ما إذا كان بإمكاني الحصول على عصا التحكم التي اشتريتها للعمل مع ESP32. في النص التالي ، أستخدم مصطلحات BLE لإعطاء نظرة عامة مبسطة عن كيفية عمل BLE.

يستخدم BLE بنية العميل / الخادم. جهاز واحد هو خادم يوفر الخدمات. الجهاز الآخر هو عميل يستهلك الخدمات. من أجل الحفاظ على متطلبات الطاقة منخفضة ، لا يرسل BLE سوى حزم صغيرة من المعلومات عند حدوث تغيير. في حالة عصا التحكم ، يكون جهاز جويستيك هو خادم. كخادم ، يعلن عن نفسه ويرسل قائمة بالخدمات التي يقدمها عند الطلب. جهاز جويستيك يعلن عن خمس خدمات. الخدمة الوحيدة التي نهتم بها هي خدمة BLE HID (جهاز الواجهة البشرية). تحتوي خدمة BLE على ما يعرف بالخصائص المرتبطة بها. عادة ما تكون الخاصية مصدر بيانات. تحتوي خدمة HID لعصا التحكم على عشر خصائص. بعض الخصائص مكررة ويتم تجاهلها. نحن مهتمون فقط بخصائص تقرير BLE التي تحتوي على إمكانيات القراءة والإخطار. تفي ثلاث من الخصائص بهذه المتطلبات وتوفر بيانات حول موضع عصا التحكم وحالة الأزرار. عند تمكين الإخطار ، سيرسل الخادم حزم البيانات عند اكتشاف تغيير في الخاصية المرتبطة.

يتحقق إطار العمل من أن الخادم الذي يعثر عليه يحتوي على خدمة BLE HID ، ثم يقوم بتمكين الإشعارات على خصائص التقرير الثلاثة التي توفر عصا التحكم ومعلومات حالة الزر. بعد ذلك ، عند الضغط على زر أو تحريره أو تحريك عصا التحكم ، يتلقى ESP32 حزمة من البيانات تخبره عن موضع عصا التحكم الجديد و / أو حالة بعض الأزرار.

الخطوة 2: مؤشرات المسح والاتصال

يحدد إطار العمل اثنين من مؤشرات LED ، وهما GREENLED و BLUELED ويخصصهما لاثنين من دبابيس GPIO الخاصة بـ ESP32. يضيء GREENLED عندما يبحث ESP32 عن عصا التحكم BLE. عند العثور على عصا التحكم ، يتم إيقاف تشغيل GREENLED وإضاءة BLUELED للإشارة إلى أن الاتصال قد تم إنشاؤه وأنك جاهز للانطلاق. في حالة فقد الاتصال ، يتم إيقاف تشغيل BLUELED ، وإعادة تعيين ESP32 ، ويضيء GREENLED ويبدأ المسح مرة أخرى. إذا لم يتم العثور على عصا التحكم في غضون ثلاثين ثانية ، فسيتوقف المسح ويتوقف GREENLED. بعد خمس ثوانٍ ، يبدأ المسح مرة أخرى ويتم تشغيل GREENLED.

والنتيجة النهائية هي أن ESP32 سيستمر في البحث عن عصا التحكم حتى يعثر عليها. بمجرد إجراء الاتصال ، إذا فُقد بعد ذلك ، فإن ESP32 سيعيد ضبط نفسه ويبدأ في المسح مرة أخرى. تتم إعادة تعيين ESP32 نظرًا لعدم وجود وظائف ESP32 SDK لإعادة تعيين مكدس Bluetooth لإعادة المسح الضوئي.

الخطوة 3: فك رموز جويستيك وأحداث الأزرار

يستقبل حدث رد اتصال واحد على ESP32 ثلاث حزم بيانات مختلفة من الخادم للخصائص الثلاث التي تم إعدادها لتوفير الإخطارات. حزمة واحدة طولها أربعة بايت. تحتوي ثلاثة من البايتات على موضع المحور X وموضع المحور Y وأزرار التشغيل التي تم تعيينها قليلاً في البايت. الحزمتان الأخريان عبارة عن وحدتي بايت لكل منهما بايت واحد يحتوي على حالة زر تعيين البت. يتم فك تشفير الحزم المتلقاة ونسخها في صفيف بايت في الذاكرة. تنتقل بيانات محور عصا التحكم إلى بايتات البيانات X و Y ويتم توجيه كل بايت من بايت الزر المعين بثلاث بتات إلى البايت المناسب لتلك الأزرار.

يتم إنشاء مهمة FreeRTOS للتعامل مع البيانات التي تتلقاها الإخطارات. مهمة واحدة لعصا التحكم وأزرار التشغيل ، ومهمة واحدة للأزرار A & B ومهمة واحدة لأزرار C & D. تحتوي كل مهمة من هذه المهام على مناطق محددة بوضوح حيث يجب عليك إضافة التعليمات البرمجية للقيام بما تريده مع الحدث. ابحث عن "// ===== أضف الكود الخاص بك هنا =====" التعليق في نص المهمة وأضف الكود الخاص بك بعده. تحتوي كل مهمة على تعليق يشير إلى الغرض الذي يتم استخدامه من أجله ويستخدم Serial.println () لطباعة رسالة حول الحدث الذي وقع.

هنا مثال من مهمة زر A / B ؛

TaskButtonAB باطلة (معلمة باطلة *) {uint8_t أزرار ؛

// ===== إذا كانت المهمة تتطلب أي تهيئة لمرة واحدة ، ضعها هنا =====

بينما (صحيح) {// التخلي عن وحدة المعالجة المركزية ، انتظر البيانات الجديدة vTaskSuspend (NULL) ؛ // لقد استيقظنا للتو ، تتوفر بيانات جديدة أزرار = VrBoxData [VB_BTNAB] ؛ Serial.printf ("أزرار A / B:٪ 02X / n" ، أزرار) ؛ إذا (أزرار & VB_BUTTON_A) {// زر A مضغوط أو مضغوطًا Serial.println ("الزر A") ؛ // ===== أضف الكود الخاص بك هنا =====}

إذا (الأزرار & VB_BUTTON_B)

تم الضغط على {// الزر B أو الضغط باستمرار على Serial.println ("الزر B") ؛

// ===== أضف الكود الخاص بك هنا =====

}} // لـ} // taskButtonAB

الخطوة 4: تشغيل VR Box: عصا التحكم

إذا تُركت عصا التحكم في الموضع الأوسط ، فلن يتم إرسال إعلامات عصا التحكم. بمجرد نقل عصا التحكم عن المركز ، يتم إرسال رسالة إعلام بها بيانات عصا التحكم وبيانات زر التشغيل كل 15 مللي ثانية. عندما يتم إرجاع عصا التحكم إلى المركز ، لا يتم إرسال إشعار بأنه قد تم نقله إلى المركز. بمعنى آخر ، يخبرك أن عصا التحكم قد تحركت بعيدًا عن المركز ، ولكن لا تخبرك أنها انتقلت إلى المركز. والنتيجة النهائية هي أنك تتلقى رسائل تشير إلى أن عصا التحكم تتحرك باتجاه المركز ، ولكن لا تشير إلى أنها وصلت إلى المركز. مزعج جدا. يتم تضمين زري التشغيل مع بيانات عصا التحكم. سيؤدي الضغط على أحد أزرار التشغيل بعد إعادة عصا التحكم إلى المركز إلى تحديث موضع عصا التحكم إلى الصفر. يحتوي Framework على مؤقت مهلة مدمج فيه والذي يحاكي تلقائيًا رسالة إعلام عصا التحكم لفترة قصيرة بعد توقف وصول جميع رسائل إعلام ذراع التحكم / زر التشغيل. يضبط المؤقت عصا التحكم على الصفر. يحتوي ذراع التحكم على نطاق يبلغ حوالي +/- 25 على كل محور.

الخطوة 5: تشغيل صندوق VR: أزرار التشغيل

سترسل أزرار التشغيل رسالة إعلام مرة واحدة عند الضغط عليها ومرة أخرى عند تحريرها. ستشير رسالة الإعلام التي تم الضغط عليها إلى الزر الذي تم الضغط عليه. تشير رسالة إعلام التحرير إلى تحرير كلا الزرين.

سيؤدي الضغط على زر التشغيل السفلي إلى منع الخادم من اكتشاف الضغط على زر التشغيل العلوي. يؤدي الضغط على زر الزناد العلوي والضغط على زر الزناد السفلي إلى إرسال الخادم رسالة إعلام مفادها الضغط على زر الزناد السفلي (سيكون زر المشغل العلوي صفراً!). سيؤدي تحرير زر المشغل السفلي إلى قيام الخادم بإرسال إشعار بأنه تم الضغط على زر المشغل العلوي وتحرير المشغل السفلي.

بمعنى آخر ، يكون زر الزناد السفلي هو المسيطر على زر الزناد العلوي وسيتجاوزه عند الضغط عليهما. يجب عليك تحديد كيفية التعامل مع حالة الضغط على كلا الزرين.

الخطوة السادسة: تشغيل صندوق الواقع الافتراضي: أزرار أ / ب

يعمل الزران A و B مثل عصا التحكم ويرسلان رسائل إعلام باستمرار عند الضغط عليهما مع الاستمرار. تتوقف الرسائل عند تحرير الزر. يعمل الزران A و B بشكل مشابه لأزرار Trigger حيث يسيطر الزر A على الزر B تمامًا مثل زر الزناد السفلي الذي يسيطر على زر الزناد العلوي.

الخطوة 7: تشغيل صندوق VR: أزرار C / D

يرسل الزران C و D رسالة إعلام مرة واحدة عند الضغط عليهما ومرة أخرى عند تحريرهما. إذا تم الضغط باستمرار ، فلن يتم إرسال رسائل أخرى حتى يتم تحريرها. سيؤدي الضغط باستمرار على أحد الأزرار C أو D إلى منع الخادم من اكتشاف النشاط على الزر الآخر.

الخطوة 8: الخاتمة

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

الأمر متروك لك تمامًا لتحديد ما تريد أن يفعله كل زر وما يجب أن يفعله ذراع التحكم. إن كيفية التعامل مع الاختلافات في المشغل وأزرار A & B و C & D أمر متروك لك.

ابحث في الكود الخاص بـ ؛ وظائف taskJoyStick () و taskButtonAB () و taskButtonCD () وإضافة التعليمات البرمجية الخاصة بك بعد "// ===== أضف الكود الخاص بك هنا =====" التعليق.

ستحتاج إلى ما يصل إلى أربع وظائف للتعامل مع عصا التحكم (للأمام والخلف واليمين واليسار) وما يصل إلى ست وظائف للتعامل مع الأزرار المختلفة. نفذهم جميعًا أو ما تحتاجه فقط. الخيار لك.

إذا كنت تستخدم هذا الإطار. أود أن أصرخ حول الغرض الذي استخدمته من أجله وإذا وجدت أنه سهل الاستخدام.

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

الكود متاح على GitHub هنا.

يتمتع.

موصى به: