مقدمة مكثفّة عن Bluetooth Low Energy (BLE)

إن بروتوكول البلوتوث هو بروتوكول لاسلكي واسع الانتشار ومستخدم بكثافة في سوق الهواتف المحمولة. شهد عام 2001 أول هاتف محمول مزوّد بالبلوتوث وهو Sony Ericsson T36، وقد تطور بروتوكول البلوتوث عبر السنوات ليواكب متطلبات السوق التكنولوجي، ففي النسخة 4.0 من البلوتوث تم الإعلان عن بروتوكول جديد يسمى Bluetooth Low Energy (BLE) والذي يستهدف أجهزة انترنت الأشياء IoT التي تعمل على بطاريات بسعات صغيرة جداً.

بدءاً من النسخة 4.0 في عام 2010 أصبح البلوتوث يتألف من 3 بروتوكولات: Classic Bluetooth و Bluetooth high speed و Bluetooth Low Energy (BLE) وقد سمح توصيف بلوتوث 4.0 أن يدعم الجهاز نمط واحد single-mode أو نمطين dual-mode، حيث يدعم النمط الواحد BLE بينما يدعم النمطين التشغيل إما كـ BLE أو classic Bluetooth protocol. تسمية أخرى تطلق على أجهزة النمطين وهي Bluetooth Smart Ready و أجهزة النمط الواحد بـ Bluetooth Smart.

تُستخدم في توصيف البلوتوث الكثير من المصطلحات التقنيّة، ولكن في هذه المقالة سيتم إبقاء الأمور بسيطة قدر الإمكان.

 

لماذا يسمى Bluetooth Stack ؟

 

ربما هذا هو المصطلح الأول الذي سيتم قراءته في معظم المراجع، حيث يتألف البلوتوث من مجموعة من الطبقات لبروتوكولات فرعية تشكل ككل البلوتوث، ولذلك تم تسميته بـ Bluetooth Stack. يمكن توصيف ذلك تماماً كطبقات الشبكات المعروفة بـ OSI model، حيث تكون مسؤولة كل طبقة عن مهام محّددة. في البلوتوث، طبقات مسؤولة عن الإشارات الراديوية وأخرى للتقسيم/التجميع fragmentation/defragmentation أو التشفير/فك التشفير encryption/decryption وأخرى مسؤولة عن تنظيم كيفية الوصول للمعلومات أو إذاعة broadcast معلومات الجهاز، ولذلك هذا مشابه جداً لنموذج OSI.

 

المصدر: كتاب  Getting Started with Bluetooth Low Energy

المصدر: Tosi, J.; Taffoni, F.; Santacatterina, M.; Sannino, R.; Formica, D. Performance Evaluation of Bluetooth Low Energy: A Systematic Review. Sensors 2017, 17, 2898.

 

يجب معرفة البنية الأساسية العامّة، وذلك قبل إعطاء فكرة عن كل طبقة من طبقات البلوتوث:

 

المصدر: كتاب  Getting Started with Bluetooth Low Energy

بالعودة إلى المصطلحات العمليّة وبناءً على هذه الأقسام الرئيسية الثلاثة فإن آيسيات الـ BLE يمكن أن تحوي:

 

كمثال:

ملاحظة: إن بروتوكول HCI موصّف من قبل منظمة البلوتوث.

CC256x Internal Block Diagram – Datasheet

 

BLE Software Stack

 

إن BLE Software Stack هو أحد المصطلحات الأخرى التي ترد بكثرة، وهو البرنامج المسؤول عن إدارة وتنظيم عمل طبقات البلوتوث المختلفة الداخلية (أي لا يتضمن التطبيق الفعلي). تقدّم كل شركة نسختها الخاصة من BLE Software Stack لمنتجها، فمثلاً Softdevice هو المقدّم لشرائح NRF ونسخة من Bluedroid هي لشرائح ESP32 بينما Bluegiga هي لمنتجات SiliconLabs. تتيح بعض الشركات المصنّعة لشرائح الـSoC للمطورين استخدام الشريحة كشريحة BLE controller فقط، أي من دون بقية الطبقات.

 

 

ما يجب للمبتدئ معرفته من طبقات البلوتوث BLE؟

 

إن تفاصيل البلوتوث متشعّبة جداً بطريقة جعلت من مستند توصيف النسخة 4.2 عبارة عن مستند بطول حوالي 2700 صفحة!

لتجنب هذه المتاهة للمصطلحات الجديدة وللتركيز على فهم الـBLE يجب البقاء الآن في منحى النظر من الأعلى للأسفل، حيث يجب فهم ماهو الـ  GAP و ATT و GATT وفي وقتٍ لاحق الـ SMP (مقالة أخرى)، إلى جانب ذلك إن فهماً عامّاً لكيفية عمل البلوتوث في (الاتصال connection، الإعلان advertising ، .. إلخ) هو أمرٌ أساسي أيضاً.

 

الإعلان Advertising (المعلن Advertiser والماسح Scanner)

 

إن جهاز  الـBLE يقوم ببث broadcast بعض المعلومات وذلك لجعل أي جهاز قريب على علم بوجوده. إن الأجهزة التي تقوم بالبث تسمى advertisers والأجهزة التي تستقبل هذه الإعلانات تسمى scanners. إن حزم معطيات الإعلانات advertising packets يمكن استقبالها عموماً بواسطة كل الـscanners، مما يجعلها عموماً حزم غير متطلّبة للاقتران والاتصال connectionless packet، وهذا شبيه جداً لما تقوم به مثلاً نقاط الاتصال Access Points في الواي فاي حيث تقوم بالإعلان عن اسم الشبكة ونوع التشفير وبعض المعلومات الأخرى لكل الأجهزة المحيطة بشكل مفتوح عموماً.

إن طول  Advertise packets data يمكن أن يصل لـ31 بايت مشكّلة كالتالي:

 

Bluetooth 4.2 Specification

أمثلة:

1- هذا جزء من كود لـESP32 من أجل تعريف advertising data:

 

static uint8_t raw_adv_data[] = {

       /* Len:2, Type:1 (flags), Data:6 */

       0x02, 0x01, 0x06,

       /* Len:2, Type:a (tx power), Data:eb*/

       0x02, 0x0a, 0xeb,

       /* Len:3, Type:3 (Complete List of 16-bit Service Class UUIDs), Data: FF 00 */

       0x03, 0x03, 0xFF, 0x00,

       /* Len:16, Type:9 (Complete Local Name) */

       0x0f, 0x09, 'E', 'S', 'P', '_', 'G', 'A', 'T', 'T', 'S', '_', 'D','E', 'M', 'O'

};

 

2- وهذا مثال آخر لحزمة advertising مأخوذة من موقع شركة SiliconLabs :

 

هل هذا كل ما يحويه الـAD packet؟ لا، هناك ترويسة أيضاً تحوي على معلومات أخرى مهمّة عن نوع إمكانية الاتصال بهذا الجهاز connectability type.


مصدر الصورة من موقع Bluetooth SIG

إن الجدول التالي من كتاب  Getting Started with Bluetooth Low Energy يبين الأنواع المختلفة لـ PDU types ولمعلومات أكثر عنها، يمكن مراجعة تدوينة على موقع البلوتوث بعنوان “Bluetooth Low Energy – It starts with Advertising”:

إن AD packet يمكن توظيفها لتنفيذ بروتوكول لا يحتاج اتصال connectionless protocol ومثاله بروتوكول iBeacon من آبل و Eddystone من غوغل، ومعنى أنه لا يحتاج للاتصال أي أن المستقبل لا يحتاج لإنشاء اتصال محدد مع المرسل وإنما يمكنه استقبال ما يرسله مباشرة.

بغض النظر عن المعاني المحدّدة لما ورد في الصورة أعلاه لحقول الـ Ibeacon packet كـAD packet إلا أنّه تم التنويه لهذا الموضوع كموضوع لقراءة مستقبلية للقارئ.

 

كيف يتم تخزين المعطيات الفعلية في جهاز BLE؟

 

حتى هذه المرحلة تم الحديث عن كيفية الإعلان advertise ومحتوى AD packets، ولكن ماذا لو أراد الجهاز إرسال قيمة البطارية عبر الـBLE أو ماذا لو أراد المستخدم التحكم بريليه عبر البلوتوث؟ كيف يتم تخزين البيانات وتبادلها؟ لنرى!

إن حجر البناء الأساسي يسمى Attribute Protocol (ATT) والذي يحدد الشكل العام لتخزين وتبادل معلومات الجهاز. بفهم مبسّط جداً، يمكن القول أن جهاز الـBLE يحوي جدول قاعدة معطيات بمدخلات لها شكل وتقسيم محدد كما يلي:

 

Bluetooth V 4.2 Specification

إن “Attribute Handle” (بطول 2 بايت) يمثل رقم سطر مميز لكل Attribute في الجدول، ويشكل “Attribute Type” (بطول 2 بايت أو طول 16 بايت) نوع هذا الـ Attribute ويسمى أيضاً UUID والذي يشير لماهية وطول ..إلخ الـAttribute value. أخيراً، يحدد “Attribute Permissions” صلاحيات القراءة/الكتابة لهذا الـAttribute. تعرّف البلوتوث مجموعة محجوزة مسبقاً لأرقام UUID لتشير لنوع محدد لتكون بذلك وحّدت الدلالة حتى وإن اختلف مصنعي الأجهزة وبرامجها. توجد هذه الأرقام على الموقع الرسمي.

إن الجهاز الذي يحوي قاعدة البيانات يسمى “server” والجهاز الذي يلج لهذه القاعدة “client”. إن الـServer يحوي عدد من الـattributes وهنا تأتي الـ“GATT Profile” لينظم هيكلية أعم باستخدام Attribute Protocol لاستكشاف وقراءة وكتابة … إلخ البيانات.

إن هيكليّة GATT المنطقيّة تتألف من: واحد أو أكثر من Service وكل Service لديها واحد أو أكثر من الـ Characteristic.  تذكر: إن كل هذه البنى هي بالنهاية attributes من (Handler و UUID و value).

كمثال سريع: تخيل أنه هناك خدمة “Control GPIOs” وعندها يكون “set output” و “set input” و “get interrupts” و “get input” .. إلخ هي عبارة عن characteristics.

Bluetooth V 4.2 Specification

يظهر الجدول العملي التالي مثال لتلخيص ما مضى ذكره.

الصورة مأخوذة من فيديو على اليوتيوب من قناة Nordic Semiconductor

أول ملاحظة أن جميع المدخلات كما قلنا تتبع شكل الـ Attribute من  (Handler و UUID و value)

Bluetooth V 4.2 Specification

لنأخذ سطر محدد ونقم بتحليله بناء على هذا الشكل

Attribute Handle: 0x00008 Attribute Type: 0x2803 Attribute Value: 0x12 0x00009 0x2A19

إن Characteristic Properties (0x12) سيجعل الصلاحيات عبارة عن إمكانية subscribe الإشتراك بالتنبيهات التي سترسل من الجهاز إلى المشترك Subscriber عند تغيّر القيمة (قيمة مستوى البطاريّة هنا) وأيضاً إمكانية إرسال طلب القراءة. يوضح هذا الجدول القيم التي يمكن أن يأخذها هذا الحقل.

Bluetooth V 4.2 Specification

إن Characteristic value attribute handel هو مؤشّر إلى رقم السطر الذي سيحوي القيمة الفعليّة (مستوى البطارية هنا)، وفي هذا السطر إن يشير للسطر 0x00009 والذي سيستخدم لقراءة/تخزين مستوى البطاريّة، وأخيراً إن Characteristic UUID هو رقم من بايتين ويمكن أن تكون قيمة مرجعيّة من البلوتوث نفسها أو رقم يحدده المستخدم عن تعريف  Characteristics غير معياريّة وفي حالتنا هي تشير لـbattery level Characteristic.

 

الخاتمة

 

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

العديد من المراجع تم استخدامها لحصر هذه المعلومات ومنها:

 

Exit mobile version