blog cover

توصيل وحدة البلوتوث إتش سي ٠٥ مع أردوينو أونو آر٣

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

في عالم الإلكترونيات المدمجة، يُعدّ البلوتوث وسيلةً ممتازة لنقل كمياتٍ صغيرة من البيانات لاسلكياً عبر مسافاتٍ قصيرة (أقلّ من 100 متر). ويمكن استخدامه لتسجيل البيانات في الزمن الحقيقي، أو للتحكّم بمشروعٍ ما باستخدام هاتفٍ ذكي.

ومن أكثر وحدات البلوتوث توفّراً بسعرٍ مناسب وانتشاراً في الاستخدام وحدة HC-05.

في هذا الدرس، سنساعدك على البدء باستخدام وحدة HC-05. لكننا لا نريد أن نُثقل عليك بمعلوماتٍ كثيرة دفعةً واحدة، لذا سنقسّم الشرح إلى ثلاثة دروسٍ سهلة المتابعة. سيوضّح لك هذا الدرس الأول كيفية إرسال البيانات واستقبالها بين وحدة HC-05 وهاتفك الذكي. وفي الدرس التالي، سنعلّمك كيفية ضبط وحدة HC-05 باستخدام أوامر AT. وفي الدرس الأخير، ستتعلّم كيفية جعل لوحتَي أردوينو تتواصلان لاسلكياً باستخدام وحدتَي البلوتوث HC-05.

وبنهاية هذه الدروس، سيكون لديك فهمٌ جيد لاستخدام وحدة البلوتوث HC-05 في مشاريعك. فلنبدأ إذاً!

نظرة عامة على عتاد وحدة HC-05

وحدة HC-05 هي وحدةٌ تعمل كجسرٍ بين البلوتوث والاتصال التسلسلي (Bluetooth-to-Serial-Bridge)، تتيح الاتصالات اللاسلكية بين متحكّمَين دقيقَين، أو بين متحكّمٍ دقيق وهاتفٍ ذكي أو حاسوبٍ محمول أو حاسوبٍ مكتبي مزوّدٍ بخاصية البلوتوث. وهي مثاليةٌ لتحلّ مباشرةً محلّ الواجهة التسلسلية غير المتزامنة السلكية!

تحتوي كلٌّ من هذه الوحدات على جهاز إرسالٍ واستقبال بلوتوث (transceiver)، ما يعني أنها قادرةٌ على إرسال البيانات واستقبالها معاً.

hc05

بصفتها جهاز بلوتوث من الفئة الثانية (Class 2)، يبلغ المدى الاسمي لوحدة HC-05 نحو 10 أمتار. وهذا بالطبع في الأماكن المفتوحة. أما داخل المنزل فيضعف مداها قليلاً، خاصةً بسبب الجدران.

وعلاوةً على ذلك، فإن هذه الوحدات سهلة الاستخدام جداً. فلا حاجة للتعامل مع بروتوكولات البلوتوث أو حزمتها البرمجية (stack). ما عليك سوى إرسال البيانات عبر الواجهة التسلسلية، فتُمرَّر إلى أي جهاز بلوتوث متّصلٍ بها.

أوضاع التشغيل

التحكّم بوحدة HC-05 وإرسال البيانات عبرها عمليتان مختلفتان، لكن كلتيهما تُنجَزان عبر الواجهة التسلسلية. وللتمييز بين هذين النوعين من البيانات، تعتمد وحدة HC-05 وضعَي اتصالٍ متمايزَين: وضع الأوامر (AT mode) ووضع البيانات (Data mode).

في وضع الأوامر (AT Mode)، يمكنك ضبط إعداداتٍ مختلفة لوحدة HC-05، مثل اسمها، ومعدّل النقل (baud rate)، ورمز التعريف (PIN)، ومعدّل البيانات.

في وضع البيانات (Data Mode)، تعمل وحدة HC-05 كبوابة بياناتٍ شفّافة. فعندما تستقبل الوحدة بياناتٍ، تُزيل ترويسات البلوتوث وذيوله وترسلها إلى منفذ UART. وعندما تُكتَب بياناتٌ إلى منفذ UART، تُنشئ الوحدة حزمة بلوتوث وترسلها عبر اتصال البلوتوث اللاسلكي.

أدوار الاتصال

يمكن لوحدة البلوتوث HC-05 أن تعمل بدورَين رئيسيَّين: الدور الرئيسي (Master) والدور التابع (Slave).

في الدور التابع (Slave Role)، تنتظر وحدة HC-05 أن تبادر الأجهزة الأخرى إلى بدء الاتصال. وهذا هو الدور الافتراضي للوحدة، ويُستخدَم عادةً في المشاريع التي ترغب فيها بالتحكّم بالأشياء باستخدام هاتفٍ ذكي.

في الدور الرئيسي (Master Role)، تبحث وحدة HC-05 بنشاطٍ عن أجهزة بلوتوث أخرى وتحاول بدء الاتصال بها. ويُستخدَم هذا الوضع في المشاريع التي يحتاج فيها متحكّمان دقيقان إلى التواصل لاسلكياً.

وللتبديل بين الدورَين، عليك ضبط وحدة HC-05 بوضعها في وضع الأوامر (AT mode) وإرسال أوامر AT عبر منفذ UART.

الطاقة

يبلغ أقصى جهد تشغيلٍ لشريحة HC-05 المجرّدة 3.3 فولت. لذلك تتضمّن الوحدة منظّم جهدٍ خطّياً بقيمة 3.3 فولت، ما يتيح استخدام جهدٍ يتراوح بين 3.6 و6 فولت لتغذية الوحدة بالطاقة.

hc05 3v3 regulator

من المهمّ ملاحظة أن وحدة HC-05 تعمل بمستوى منطقٍ قدره 3.3 فولت، لذا لا يمكننا توصيل طرف Rx في وحدة HC-05 مباشرةً بطرفٍ رقمي في متحكّمٍ دقيق يعمل بجهد 5 فولت مثل أردوينو أونو. وبعبارةٍ أخرى، فإن طرف Rx في وحدة HC-05 لا يتحمّل جهد 5 فولت. لذلك، وقبل التوصيل بوحدة HC-05، يجب خفض إشارة Tx الخاصة بالمتحكّم الدقيق إلى 3.3 فولت.

يعتمد استهلاك التيار في وحدة HC-05 على الحالة التي تكون فيها. ويقدّم هذا الجدول المأخوذ من ورقة البيانات (datasheet) بعض التقديرات الجيدة:

الوضع

استهلاك التيار

متّصلة مع نقل البيانات

45 مللي أمبير

متّصلة في وضع الخمول

8 مللي أمبير

مؤشّر الحالة الضوئي (LED)

تأتي كثيرٌ من وحدات HC-05 مزوّدةً بمؤشّرٍ ضوئي (LED) مدمج.

hc05 status led

يومض المؤشّر الضوئي بمعدّلاتٍ مختلفة للدلالة على الحالة:

  • عند تشغيلها، تدخل الوحدة وضع الاقتران بالبلوتوث، ويومض المؤشّر الضوئي بسرعةٍ عند نحو 2 هرتز.

  • عند اقتران الوحدة بجهازٍ ما، يتغيّر نمط وميض المؤشّر إلى وميضتَين سريعتَين تعقبهما فترة توقّف، ثم يتكرّر النمط.

  • عند وضع الوحدة في وضع الأوامر (AT mode)، يومض المؤشّر الضوئي بمعدّلٍ بطيءٍ وثابت.

وضع الأوامر (AT Mode)

وضع الأوامر هو وضع الضبط الذي يمكنك فيه إرسال أوامر من نوع Hayes AT إلى وحدة HC-05 لتغيير إعداداتها مثل الاسم ومعدّل النقل (baud rate) وكلمة المرور، وغيرها.

في العادة، تكون وحدة HC-05 في وضع البيانات. ولوضعها في وضع الأوامر، عليك الضغط مع الاستمرار على الزرّ المدمج أثناء تشغيل الوحدة. عندئذٍ يبدأ المؤشّر الضوئي بالوميض بمعدّلٍ بطيءٍ وثابت، ما يدلّ على أن الوحدة في وضع الأوامر.

hc05 at mode button

بمجرّد الدخول إلى وضع الأوامر (AT mode)، يمكنك إرسال أوامر AT إلى الوحدة عبر منفذ UART. وستستجيب الوحدة للأوامر، إمّا بتأكيد استلام الأمر، أو بتقديم البيانات المطلوبة، أو بالإشارة إلى وجود خطأ. وعادةً ما تبدأ الأوامر بـ "AT+" متبوعةً بالأمر المحدّد، فمثلاً "AT+NAME؟" يستعلم عن اسم الوحدة، و"AT+NAME=MyHC05" يغيّر الاسم إلى "MyHC05".

ينبغي إرسال أوامر AT بمعدّل النقل (baud rate) المحدّد لوضع الأوامر، وهو غالباً ما يختلف عن معدّل النقل المستخدَم في نقل البيانات. ومعدّل النقل الافتراضي لوضع الأوامر هو 38400 بت في الثانية (bps)، لكن يمكن تغييره عند الحاجة.

توزيع أطراف وحدة HC-05

تُخرِج وحدة HC-05 ستة أطراف. لنلقِ نظرةً على توزيع الأطراف.

hc05 pinout

يمكن استخدام طرف STATE لتحديد الحالة الراهنة لوحدة HC-05. فيكون هذا الطرف في الحالة المنخفضة (LOW) عندما تكون الوحدة غير مقترنة، وفي الحالة العالية (HIGH) عندما تكون مقترنة.

يستقبل طرف RXD البيانات التسلسلية من المتحكّم الدقيق. وينبغي توصيله بطرف TX الخاص بالمتحكّم الدقيق. يُرجى ملاحظة أن هذا الطرف لا يتحمّل جهد 5 فولت. لذلك، وقبل توصيل الوحدة بمتحكّمٍ دقيق يعمل بجهد 5 فولت، يجب خفض إشارة Tx الخاصة بالمتحكّم إلى 3.3 فولت.

يرسل طرف TXD البيانات التسلسلية إلى المتحكّم الدقيق. وينبغي توصيله بطرف RX الخاص بالمتحكّم الدقيق.

طرف GND هو طرف الأرضي، وهو مشترَكٌ مع أي جهازٍ آخر متّصلٍ بالوحدة.

طرف VCC هو حيث تُوصِّل جهد التغذية الموجب. وتُوجَّه إشارة جهد التغذية هذه إلى شريحة HC-05 عبر منظّم جهدٍ بقيمة 3.3 فولت. وينبغي أن يتراوح هذا الجهد بين 3.6 و6 فولت.

طرف EN موصولٌ بطرف تمكين المنظّم المدمج، ويُرفَع إلى الحالة العالية عبر مقاومةٍ بقيمة 220 كيلوأوم. وخفض هذا الطرف إلى الحالة المنخفضة يُعطّل المنظّم، ما يؤدّي بالتالي إلى إيقاف تشغيل وحدة HC-05.

التحكّم بوحدة HC-05

كلّ ما يلزم للتحكّم بوحدة البلوتوث HC-05 وإرسال البيانات عبرها هو واجهةٌ تسلسلية. فهي تعمل في جوهرها كأنبوبٍ لنقل البيانات: فالبيانات التسلسلية الداخلة إلى الوحدة (من طرف RXD) تُمرَّر إلى اتصال البلوتوث، والبيانات الواردة من جهة البلوتوث تُمرَّر إلى الجهة التسلسلية (عبر طرف TXD).

ولإعداد أنبوب نقل البيانات هذا، نتّبع عمليةً من خطوتَين:

توصيل وحدة HC-05 بجهازٍ قادرٍ على إرسال البيانات التسلسلية واستقبالها، مثل لوحة أردوينو أو أي متحكّمٍ دقيق مزوّدٍ بمنفذ UART.

ومن جهة البلوتوث، نُنشئ اتصالاً لاسلكياً بين وحدة HC-05 وجهازٍ آخر مزوّدٍ بخاصية البلوتوث، مثل هاتف أندرويد. ويتضمّن هذا الاتصال عملية اقترانٍ شبيهة باقتران أي جهازَي بلوتوث آخرَين معاً. كما ستحتاج إلى برنامج طرفية (terminal) مثبّتٍ على هاتفك قادرٍ على التواصل عبر البلوتوث. ولهذا الغرض، ننصح باستخدام تطبيق "Serial Bluetooth Terminal" المتوفّر في متجر Play. ومع ذلك، هناك أيضاً العديد من الخيارات المجانية الأخرى التي يمكنك استكشافها.

وباختصار، كلّ ما نحتاجه هو إعداد الواجهة التسلسلية بين وحدة HC-05 ومتحكّمنا الدقيق، ثم اقتران وحدة HC-05 بجهاز البلوتوث الآخر، وبذلك نكون جاهزين!

توصيل وحدة HC-05 بلوحة أردوينو

توصيل وحدة HC-05 بلوحة أردوينو سهلٌ بقدر توصيل الطاقة وربط طرفَي الاستقبال والإرسال التسلسليَّين (RX وTX).

فبدلاً من توصيل وحدة HC-05 بمنفذ UART العتادي في الأردوينو، سنستخدم مكتبة SoftwareSerial ونوصّل طرفَي RX وTX الخاصَّين بوحدة HC-05 بأي طرفٍ رقمي متاحٍ في الأردوينو. سيساعد هذا على تجنّب تنازع الناقل (bus contention)، ويضمن ألّا تستقبل وحدة HC-05 أي بياناتٍ غير مقصودة أثناء رفع الكود.

لذلك، يُوصَّل طرف TXD في وحدة HC-05 بالطرف D3 في الأردوينو، وطرف RXD بالطرف D2، وطرف GND بطرف GND، وطرف VCC بطرف 5V. ويمكن في الواقع توصيل طرفَي TXD وRXD بأي طرفٍ رقمي (باستثناء 0 و1). لذا إذا كنت تحتاج الطرفَين 2 و3 لأغراضٍ أخرى، فلا تتردّد في تبديلهما.

لكن، إذا كنت تتذكّر، فإن طرف Rx في وحدة HC-05 لا يتحمّل جهد 5 فولت. وبالتالي، لا يمكنك توصيل طرف Rx الخاص بوحدة HC-05 مباشرةً بالطرف الرقمي في الأردوينو (وهو متحكّمٌ يعمل بجهد 5 فولت). فيجب خفض إشارة Tx القادمة من الأردوينو إلى 3.3 فولت. وهناك طرقٌ عديدة لتحقيق ذلك، لكن أبسطها هو استخدام مقسّم جهدٍ بمقاومتَين. فوضع مقاومةٍ بقيمة 1 كيلوأوم بين طرف Rx في HC-05 والطرف D2 في الأردوينو، ومقاومةٍ بقيمة 2 كيلوأوم بين طرف Rx في HC-05 وطرف GND، سيؤدّي الغرض تماماً.

وتلخيصاً، فيما يلي التوصيلات التي سنُجريها للكود المثالي لاحقاً في هذا الدرس:

وحدة HC-05

الأردوينو

ملاحظات

VCC

5V

GND

GND

TXD

D3

RXD

D2

استخدم مبدّل مستوى الجهد إذا كنت تستخدم متحكّماً بجهد 5 فولت

تُظهِر الصورة أدناه كيفية توصيل وحدة HC-05 بلوحة أردوينو أونو.

wiring hc05 bluetooth module to arduino software uart

كود التمرير التسلسلي عبر البلوتوث (Serial Passthrough)

بقليلٍ من البراعة، يمكننا استخدام الأردوينو كوسيطٍ بيننا وبين وحدة HC-05. وفيما يلي كودٌ بسيط ينقل البيانات بين الـ Serial Monitor في الأردوينو ووحدة HC-05.

#include <SoftwareSerial.h>

//Create software serial object to communicate with HC-05
SoftwareSerial mySerial(3, 2); //HC-05 Tx & Rx is connected to Arduino #3 & #2

void setup()
{
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  
  //Begin serial communication with Arduino and HC-05
  mySerial.begin(9600);

  Serial.println("Initializing...");
  Serial.println("The device started, now you can pair it with bluetooth!");
}

void loop()
{
  if(Serial.available()) 
  {
    mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  if(mySerial.available()) 
  {
    Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
  }
  delay(20);
}

بمجرّد رفع الكود، افتح الـ Serial Monitor على معدّل نقلٍ (baud rate) قدره 9600. ينبغي أن تظهر لك رسالةٌ تقول: "The device started, now you can pair it with bluetooth!" (أي: بدأ تشغيل الجهاز، يمكنك الآن اقترانه بالبلوتوث!).

hc05 output screenshot1

الاتصال بهاتف أندرويد

لنُنشئ اتصالاً لاسلكياً بين وحدة HC-05 وهاتف أندرويد. قد تختلف العملية باختلاف الجهاز، لكن الخطوات العامة متشابهةٌ إلى حدٍّ كبير.

  1. تأكّد من أن وحدة HC-05 قيد التشغيل وجاهزةٌ لإنشاء اتصال. وينبغي أن يومض المؤشّر الضوئي المدمج بسرعةٍ عند نحو 2 هرتز، ما يدلّ على أنها قابلةٌ للاكتشاف.

  2. الآن، اسحب لأسفل من أعلى شاشة هاتف أندرويد وتأكّد من أن البلوتوث مُفعّل.

turn mobile bluetooth on

3. اضغط مع الاستمرار على أيقونة البلوتوث، ثم اضغط على "إقران جهاز جديد" وانتظر بضع ثوانٍ.

pair a new bluetooth device

4. اضغط على اسم جهاز البلوتوث الذي تريد إقرانه بجهازك (في حالتنا، HC-05). واتّبع أي تعليماتٍ تظهر على الشاشة.

select hc05 from all discovered devices

5. عندما يُطلَب منك ذلك، أدخِل 1234 كرمز تعريف (PIN). وهذا هو الرمز الافتراضي لكل وحدة HC-05.

enter pin for hc05

6. للخطوات التالية في هذا الدرس، تحتاج إلى تطبيق طرفية بلوتوث (Bluetooth Terminal) مثبّتٍ على هاتفك الذكي. وننصح باستخدام تطبيق أندرويد "Serial Bluetooth Terminal" المتوفّر في متجر Play.

serial bluetooth terminal app

7. بعد التثبيت، شغّل تطبيق "Serial Bluetooth Terminal". اضغط على الأيقونة في الزاوية العلوية اليسرى واختَر "Devices" (الأجهزة).

open menu and choose devices

8. ينبغي أن تظهر لك قائمةٌ بالأجهزة التي سبق أن اقترنت بها. اختَر "HC-05" من هذه القائمة.

select hc05 from a list of paired devices

9. ينبغي أن تظهر لك رسالة "Connected" (تم الاتصال). وسيتغيّر الآن نمط وميض المؤشّر الضوئي المدمج في وحدة HC-05 إلى وميضتَين سريعتَين تعقبهما فترة توقّف. وهذا كلّ شيء! أصبح هاتفك الذكي الآن مقترناً بنجاحٍ مع وحدة البلوتوث HC-05 وجاهزاً للتواصل.

mobile connects to hc05

10. الآن، اكتب شيئاً في مربّع الإدخال الموجود أسفل التطبيق، مثلاً "Hi!".

send a message from app to hc05

11. ينبغي أن تستقبل تلك الرسالة على الفور في الـ Serial Monitor الخاص ببيئة الأردوينو (Arduino IDE).

hc05 output screenshot2

12. يمكنك أيضاً تبادل البيانات بين الـ Serial Monitor وهاتفك الذكي. اكتب شيئاً في مربّع الإدخال العلوي في الـ Serial Monitor واضغط على زرّ "Send" (إرسال).

send a message from serial monitor to app

13. ينبغي أن تستقبل تلك الرسالة على الفور في تطبيق Serial Bluetooth Terminal..

app shows received message