- المتطلبات:
- برمجة متحكم PIC لاتصالات البلوتوث:
- مخطط الدائرة وإعداد الأجهزة:
- التحكم في LED باستخدام تطبيق Bluetooth Mobile:
في هذا البرنامج التعليمي سوف نتعلم كيفية جعل مشاريع الموافقة المسبقة عن علم لاسلكية من خلال ربط وحدة بلوتوث (HC-06). في البرنامج التعليمي السابق ، تعلمنا بالفعل كيفية استخدام وحدة USART في متحكم PIC الخاص بنا وإنشاء اتصال بين PIC والكمبيوتر. إذا كنت مبتدئًا تمامًا ، فتحقق هنا من جميع دروس PIC التعليمية ، حيث بدأنا من الصفر ، مثل تعلم MPLAB و XC8 ، وتفاعل LED ، و LCD ، واستخدام Timers ، و ADC ، و PWM ، إلخ.
هنا ، استخدمنا وحدة البلوتوث الشهيرة HC-06. باستخدام هذه الوحدة ، يمكننا تلقي المعلومات وإرسالها لاسلكيًا من PIC MCU إلى تطبيق الهاتف المحمول أو الكمبيوتر. تم إنشاء الاتصال بين PIC و HC-06 باستخدام وحدة USART الموجودة في PIC Microcontroller. يمكنك أيضًا استخدام HC-05. نعمل مرة أخرى على نفس الوضع 8 بت غير متزامن ، ولكن هذه المرة سنقوم بتعديل الكود الخاص بنا قليلاً بحيث يعمل مع وحدة Bluetooth. ومن ثم فإن تعلم برنامج UART التعليمي مسبقًا يعد ميزة إضافية لهذا المشروع.
في هذا البرنامج التعليمي ، سنقوم بتبديل مؤشر LED عن طريق إرسال أمر تشغيل أو إيقاف من هاتفنا الذكي. سنستخدم تطبيق Android يسمى Bluetooth Terminal والذي يمكنه إرسال واستقبال البيانات عبر البلوتوث. إذا أرسلنا حرف "1" من التطبيق ، فسيتم تشغيل الضوء في لوحة الموافقة المسبقة عن علم وسنحصل على إقرار بالهاتف بأن الضوء قد تم تشغيله. وبالمثل يمكننا إرسال "0" من الهاتف لإيقاف تشغيله. بهذه الطريقة يمكننا التحكم في ضوء LED على لوحة PIC الخاصة بنا ، على غرار البرنامج التعليمي UART ولكن الآن لاسلكيًا. يتم تقديم البرنامج الكامل والفيديو التفصيلي في نهاية هذا البرنامج التعليمي.
يظهر الرسم التخطيطي الأساسي للإعداد أدناه.
المتطلبات:
المعدات:
- لوح أداء PIC16F877A
- وحدة بلوتوث HC-05 أو HC-06
- الحاسوب (للبرمجة)
- جوال
- مبرمج PICkit 3
البرمجيات:
- MPLABX
- محطة بلوتوث (تطبيق جوال)
وحدة بلوتوث HC-06:
يمكن أن تعمل البلوتوث في الوضعين التاليين:
- وضع القيادة
- وضع التشغيل
في وضع الأوامر ، سنكون قادرين على تكوين خصائص Bluetooth مثل اسم إشارة Bluetooth ، وكلمة المرور الخاصة بها ، ومعدل تشغيل الباود وما إلى ذلك. وضع التشغيل هو الذي يمكننا من خلاله إرسال واستقبال البيانات بين متحكم PIC ووحدة البلوتوث. ومن ثم في هذا البرنامج التعليمي ، سنلعب فقط مع وضع التشغيل. سيتم ترك وضع الأمر على الإعدادات الافتراضية. سيكون اسم الجهاز HC-05 (أنا أستخدم HC-06) وستكون كلمة المرور 0000 أو 1234 والأهم من ذلك أن معدل البث بالباود الافتراضي لجميع وحدات Bluetooth سيكون 9600.
تعمل الوحدة على إمداد 5 فولت وتعمل دبابيس الإشارة على 3.3 فولت ، وبالتالي يوجد منظم 3.3 فولت في الوحدة نفسها. ومن ثم لا داعي للقلق بشأن ذلك. من أصل ستة دبابيس سيتم استخدام أربعة فقط في وضع التشغيل. يظهر جدول توصيل الدبوس أدناه
لا |
دبوس على HC-05 / HC-06 |
اسم التثبيت على MCU |
الرقم السري في الموافقة المسبقة عن علم |
1 |
Vcc |
Vdd |
31 دبوس st |
2 |
Vcc |
Gnd |
32 دبوس الثاني |
3 |
TX |
RC6 / Tx / CK |
25 ال دبوس |
4 |
آر إكس |
RC7 / Rx / DT |
26 ال دبوس |
5 |
حالة |
NC |
NC |
6 |
EN (تمكين) |
NC |
NC |
تحقق من مشاريعنا الأخرى لمعرفة المزيد عن وحدة Bluetooth HC-05 مع وحدات التحكم الدقيقة الأخرى:
- لعبة سيارة تعمل بالتحكم عن طريق البلوتوث باستخدام اردوينو
- نظام أتمتة المنزل المتحكم فيه عبر البلوتوث باستخدام 8051
- أضواء التحكم الصوتي باستخدام Raspberry Pi
- راديو FM يتم التحكم به بواسطة الهاتف الذكي باستخدام Arduino والمعالجة
- سيارة روبوت يتم التحكم فيها بواسطة الهاتف المحمول باستخدام G-Sensor و Arduino
برمجة متحكم PIC لاتصالات البلوتوث:
مثل جميع الوحدات (ADC ، Timer ، PWM) يجب علينا أيضًا تهيئة وحدة Bluetooth الخاصة بنا. ستكون التهيئة مشابهة لتهيئة UART لكننا نحتاج إلى إجراء بعض التغييرات حتى تعمل البلوتوث بشكل لا تشوبه شائبة مع PIC16F877A MCU. دعنا نحدد بتات التكوين ونبدأ بوظيفة تهيئة Bluetooth.
جارٍ تهيئة البلوتوث:
تعمل جميع وحدات البلوتوث في السوق تقريبًا بمعدل باود 9600 ، ومن المهم جدًا ضبط معدل الباود الخاص بك مثل معدل وحدات البلوتوث التي تعمل بمعدل الباود ، وهنا قمنا بتعيين SPBRG = 129 نظرًا لأننا نعمل بتردد ساعة 20 ميجا هرتز مع 9600 كمعدل الباود. ومن ثم فإن التهيئة المذكورة أعلاه ستعمل فقط مع وحدات Bluetooth التي تعمل بمعدل 9600 باود. من الضروري أيضًا تمكين بت معدل سرعة البث بالباود عالي السرعة BRGH. سيساعد هذا في تحديد معدل بود دقيق.
// ****** تهيئة Bluetooth باستخدام USART ******** // void Initialize_Bluetooth () {// تعيين دبابيس RX و TX // TRISC6 = 1 ؛ TRISC7 = 1 ؛ // اضبط معدل الباود باستخدام جدول البحث في ورقة البيانات (pg114) // BRGH = 1 ؛ // استخدم دائمًا معدل الباود عالي السرعة مع البلوتوث وإلا فلن يعمل SPBRG = 129 ؛ // قم بتشغيل Asyc. المنفذ التسلسلي // SYNC = 0 ؛ SPEN = 1 ؛ // ضبط استقبال وإرسال 8 بت RX9 = 0 ؛ TX9 = 0 ؛ // تمكين الإرسال والاستقبال // TXEN = 1 ؛ CREN = 1 ؛ // تمكين العمومية و ph. المقاطعات // GIE = 1 ؛ PEIE = 1 ؛ // تمكين المقاطعات لـ Tx. و Rx.// RCIE = 1 ؛ TXIE = 1 ؛ } // ___________ BT مهيأة _____________ //
إذا كانت لديك وحدة BT تعمل بمعدل باود مختلف ، فيمكنك الرجوع إلى جدول البحث أدناه لمعرفة القيمة الخاصة بك لـ SPBRG.
تحميل البيانات في البلوتوث:
بمجرد تهيئة الوظيفة ، لدينا ثلاث وظائف في برنامجنا لإرسال واستقبال البيانات من البلوتوث. على عكس UART ، لدينا بعض الأشياء التي يجب مراعاتها هنا قبل أن نتمكن من إرسال البيانات أو استقبالها. تحتوي وحدة Bluetooth على مخزن مؤقت للإرسال والاستلام بداخلها ، وسيتم تخزين البيانات المرسلة إليها في المخزن المؤقت Tx. لن يتم بث هذه البيانات (إرسالها على الهواء) ما لم يتم إرسال حرف إرجاع إلى الوحدة النمطية. ومن ثم ، من أجل نقل البيانات ، يتعين علينا تحميل المخزن المؤقت Rx الخاص بـ BT ثم بثه باستخدام إرجاع السطر.
يمكن تحقيق العمل أعلاه بسهولة باستخدام الوظائف التالية. يمكن استخدام الوظيفة أدناه عندما يتعين علينا تحميل حرف واحد فقط في المخزن المؤقت Rx. نقوم بتحميل البيانات في سجل TXREG وننتظر حتى تتم معالجتها عن طريق التحقق من علامة TXIF و TRMT باستخدام حلقات while.
// وظيفة لتحميل Bluetooth Rx. مخزن مؤقت مع حرف واحد.// void BT_load_char (char byte) {TXREG = byte؛ بينما (! TXIF) ؛ بينما (! TRMT) ؛ } // نهاية الوظيفة //
تُستخدم الوظيفة أدناه لتحميل سلسلة في المخزن المؤقت Rx لوحدة Bluetooth. يتم تقسيم السلسلة إلى أحرف ويتم إرسال كل حرف إلى دالة BT_load_char () .
// وظيفة لتحميل Bluetooth Rx. مخزن مؤقت بسلسلة // void BT_load_string (char * string) {while (* string) BT_load_char (* string ++) ؛ } // نهاية الوظيفة /
بث البيانات عبر البلوتوث:
حتى الآن قمنا للتو بإرسال المعلومات إلى المخزن المؤقت Rx للوحدة HC-05. الآن يجب أن نوجهه إلى بث البيانات عبر الهواء باستخدام هذه الوظيفة.
// وظيفة لبث البيانات من RX. المخزن المؤقت // voidcast_BT () {TXREG = 13 ؛ __delay_ms (500) ؛ } // نهاية الوظيفة //
في هذه الوظيفة ، نرسل قيمة 13 في سجل TXREG. هذه القيمة 13 ليست سوى المكافئ العشري للحرف (راجع مخطط ASCII). ثم يتم إنشاء تأخير بسيط لبدء المذيع.
قراءة البيانات من البلوتوث:
على غرار UART ، تُستخدم الوظيفة أدناه لقراءة البيانات من Bluetooth
// وظيفة للحصول على حرف من Rx.buffer لـ BT // char BT_get_char (باطل) {if (OERR) // تحقق من خطأ التشغيل الزائد {CREN = 0 ؛ CREN = 1 ؛ // إعادة تعيين CREN} إذا (RCIF == 1) // إذا أرسل المستخدم حرفًا يُرجع الحرف (قيمة ASCII) {while (! RCIF)؛ عودة RCREG ؛ } else // إذا لم يرسل المستخدم أي رسالة ، فارجع 0 إرجاع 0 ؛ } // نهاية الوظيفة /
إذا أرسل المستخدم بيانات ، فستعيد هذه الوظيفة تلك البيانات المعينة التي يمكن حفظها في متغير ومعالجتها. إذا لم يرسل المستخدم أي شيء ، فسترجع الدالة صفرًا.
الوظيفة الأساسية:
لقد استخدمنا جميع الوظائف الموضحة أعلاه داخل أو الوظيفة الرئيسية. نرسل بعض الرسائل التمهيدية ثم ننتظر حتى يرسل المستخدم بعض القيم بناءً على ذلك نقوم بتبديل مصباح LED الأحمر المتصل بدبوس RB3 على لوحة الأداء الخاصة بنا.
باطل main (باطل) {// تعريفات متغيرة النطاق // int get_value؛ // نهاية إعلان المتغير // // I / O Declarations // TRISB3 = 0 ؛ // نهاية إعلان الإدخال / الإخراج // Initialize_Bluetooth () ؛ // يتيح إعداد البلوتوث الخاص بنا للعمل // عرض بعض الرسائل التمهيدية بمجرد تشغيلها // BT_load_string ("Bluetooth مُهيأ وجاهز") ؛ البث_BT () ، BT_load_string ("اضغط 1 لتشغيل LED") ؛ البث_BT () ، BT_load_string ("اضغط على 0 لإيقاف تشغيل LED") ؛ البث_BT () ، // End of message // while (1) // اللانهائي lop {get_value = BT_get_char () ؛ // اقرأ الحرف. تم الاستلام عبر BT // إذا تلقينا '0' // if (get_value == '0') {RB3 = 0 ؛ BT_load_string ("LED مطفأ") ؛ البث_BT () ، } // إذا تلقينا '1' // if (get_value == '1') {RB3 = 1 ؛ BT_load_string ("LED قيد التشغيل") ؛ البث_BT () ،}}}
تحقق من البرنامج الكامل في قسم التعليمات البرمجية أدناه.
مخطط الدائرة وإعداد الأجهزة:
اتصالات الدائرة لهذا المشروع بسيطة جدا، ونحن ببساطة أن السلطة حتى وحدة بلوتوث والاتصال في تكساس إلى 26 تشرين دبوس من PIC و RX إلى 25 تشرين دبوس الموافقة المسبقة عن علم كما هو موضح في الرسم البياني أدناه الدائرة:
الآن دعونا ننتقل إلى الأجهزة. بمجرد الانتهاء من الاتصال ، يجب أن يبدو مثل هذا.
التحكم في LED باستخدام تطبيق Bluetooth Mobile:
الآن دعنا نجهز تطبيق Android الخاص بنا. قم بتنزيل التطبيق المسمى Bluetooth Terminal من متجر التطبيقات أو استخدم هذا الرابط. بمجرد تنزيل التطبيق وتثبيته ، قم بتشغيل لوحة أداء PIC التي نستخدمها منذ البداية. يجب أن يومض ضوء LED الصغير في وحدة Bluetooth الخاصة بك للإشارة إلى أنه قيد التشغيل ويبحث بنشاط عن هاتف لإنشاء اتصال.
ادخل الآن إلى إعدادات Bluetooth بهاتفك وابحث عن جهاز Bluetooth جديد ، يجب أن تكون قادرًا على رؤية الاسم HC-05 أو HC-06 بناءً على الوحدة الخاصة بك. أنا أستخدم HC-06 ومن ثم يظهر هاتفي الشاشة التالية. ثم حاول الاقتران به وسيطلب كلمة مرور. أدخل كلمة المرور كـ 1234 (بالنسبة للبعض قد تكون 0000) وانقر فوق موافق كما هو موضح أدناه.
بعد نجاح الاقتران ، افتح تطبيق Bluetooth Terminal الذي قمنا بتثبيته للتو. ادخل إلى خيار الإعدادات وحدد "توصيل جهاز - آمن" كما هو موضح أدناه. سيؤدي هذا إلى فتح مربع منبثق حيث سيتم سرد جميع أجهزتنا المقترنة كما هو موضح أدناه. حدد وحدة HC-05 أو HC-06.
بمجرد إنشاء الاتصال ، يجب أن يكون الضوء الموجود على وحدة Bluetooth التي كانت تومض حتى الآن ثابتًا للإشارة إلى اتصالها بهاتفك المحمول بنجاح. ويجب أن نحصل على الرسالة التمهيدية من برنامجنا كما هو موضح أدناه.
الآن اضغط على "1" لتشغيل ضوء LED واضغط على "0" لإطفاء الضوء. سيتم عرض العمل الكامل في الفيديو. ستبدو شاشة هاتفك المحمول كما هو موضح أدناه.
لقد تعلمنا كيفية توصيل وحدة Bluetooth بوحدة التحكم الدقيقة PIC الخاصة بنا ، وبمساعدة هذا الآن يمكننا تجربة المشاريع اللاسلكية. هناك الكثير من المشاريع التي تستخدم البلوتوث ، يمكنك تجربتها أو الخروج بفكرتك الخاصة ومشاركتها في قسم التعليقات. تحقق أيضًا من مشروعنا السابق باستخدام تطبيق Bluetooth Terminal و HC-05 مثل أتمتة المنزل المتحكم فيه بالهاتف الذكي باستخدام Arduino والقفل الرقمي الذي يتم التحكم فيه بواسطة الهاتف الذكي باستخدام Arduino.
آمل أن هذا البرنامج التعليمي ساعدك! إذا واجهتك مشكلة في مكان ما ، فيرجى استخدام قسم التعليقات.