الرقم التسلسلي عبر البلوتوث على الويب

François Beaufort
François Beaufort

تسمح واجهتا برمجة التطبيقات Web Bluetooth API وWeb Serial API لتطبيقات الويب بالتواصل مع أجهزة Bluetooth منخفض الطاقة (BLE) والأجهزة التسلسلية، على التوالي. على الرغم من أنّ العديد من مطوّري الويب يستخدمون واجهات برمجة التطبيقات هذه بنجاح كبير، إلا أنّ هناك طلبًا متزايدًا على توفيرها لأجهزة Bluetooth Classic أيضًا.

تتيح الآن Web Serial API التواصل مع خدمات RFCOMM على الأجهزة المزوّدة بتقنية Bluetooth Classic المقترنة، بما في ذلك ملف تعريف المنفذ التسلسلي (SPP) في الإصدار 117 من Chrome على أجهزة الكمبيوتر المكتبي. ويفتح ذلك آفاقًا جديدة لمطوّري الويب والمستخدمين على حد سواء. في ما يلي بعض الأجهزة التي يمكنها الاستفادة من هذه الميزة:

  • تستخدم سماعات Pixel Buds Pro وغيرها من سماعات الأذن اللاسلكية بروتوكول RFCOMM لإدارة إعدادات الصوت وتحديثات البرامج الثابتة.
  • تستخدم أنظمة نقاط البيع الجوّالة بروتوكول البلوتوث SPP للتواصل مع طابعات الإيصالات.
  • تستخدم أدوات قراءة علامات RFID للماشية بروتوكول SPP عبر البلوتوث لتسجيل تحركات الحيوانات.

بروتوكول RFCOMM في البلوتوث

عود إلى أواخر التسعينيات. ما عليك سوى وضع جهاز Palm Pilot في قاعدته لمزامنة التقويم لليوم التالي. ألن يكون من الرائع إجراء ذلك لاسلكيًا بدلاً من ذلك؟ باستخدام تكنولوجيا "البلوتوث" الجديدة هذه، يمكنك التخلص من كل هذه الأسلاك الفوضوية. التكنولوجيا اللاسلكية هي المستقبل. هناك مشكلة واحدة فقط، وهي أنّ كل الأجهزة مصمّمة للاتصال بكابل RS-232. لذلك، يستخدم البلوتوث بروتوكول التواصل عبر ترددات الراديو (RFCOMM) لتوفير هذه الواجهة لجميع البرامج والأجهزة الحالية.

حتى اليوم، تُستخدم خدمات RFCOMM على نطاق واسع في الأجهزة الجديدة والحالية. ويسمح هذا المعيار باستيفاء متطلبات معيّنة للوقت المستغرَق في إرسال البيانات وعرض النطاق التي لا يستوفيها البلوتوث المنخفض الطاقة حتى الآن. لهذا السبب، طوّرنا عملية دمج بين Web Serial، وهي واجهة برمجة تطبيقات للاتصال بالأجهزة التسلسلية، وBluetooth، لتفعيل الوصول إلى خدمات RFCOMM القديمة هذه قبل أن ينقل المصنّعون بياناتهم في نهاية المطاف إلى Bluetooth Low Energy ويتمكّن المطوّرون من استخدام Web Bluetooth API بدلاً من ذلك.

التغييرات في Web Serial API

بدءًا من الإصدار 117 من Chrome على أجهزة الكمبيوتر المكتبي، يمكن لمطوّري الويب الآن التواصل بشكل موثوق مع الأجهزة المقترنة التي تتضمّن بلوتوث الكلاسيكي من خلال خدمات RFCOMM باستخدام Web Serial API. وقد تمكّنا من إجراء ذلك من خلال التعديلات التالية على Web Serial API:

  • يسرد Chrome الآن أجهزة البلوتوث المقترنة التي تعرض واجهة تسلسلية باستخدام ملف تعريف منفذ تسلسلي قديم ومعياري لتقنية البلوتوث.
  • يمكن الآن لمتصفّح Chrome التواصل مع الواجهة التسلسلية حتى إذا لم ينشئ نظام التشغيل عقدة جهاز من خلال منفذ تسلسلي محاكي على وجه التحديد.
  • يمكن الآن لمتصفّح Chrome التواصل مع خدمة غير مستندة إلى منفذ تسلسلي وتعرض واجهة تسلسلية لبروتوكول RFCOMM (راجِع أرقام تعريف فئة الخدمة غير العادية).

يمكنك الاطّلاع على كيفية استخدام Web Serial API في مقالة القراءة من منفذ تسلسلي والكتابة إليه. تفترض هذه المقالة أنّ لديك معرفة أساسية عن البلوتوث، وتركز على التغييرات في واجهة تسلسلية عبر البلوتوث.

بدون تحديد أي فلاتر، يسمح طلب navigator.serial.requestPort() للمستخدمين باختيار المنافذ التسلسلية غير المزوّدة بتقنية Bluetooth، والمنافذ التسلسلية المزوّدة بتقنية Bluetooth التي سبق ربطها، وأي منافذ تسلسلية غير مرتبطة يوفّرها الملف الشخصي للمنافذ التسلسلية في معيار Bluetooth Classic.

// Prompt user to select any serial port.
const port = await navigator.serial.requestPort();

على الرغم من أنّ معظم الأجهزة تعرض اتصالات مستندة إلى SPP من خلال ملف تعريف منفذ تسلسلي قديم ومعياري لتقنية Bluetooth، تستخدم بعض الأجهزة خدمات مخصّصة مستندة إلى RFCOMM. تحتوي هذه الأجهزة على معرّف فئة الخدمة الذي لا يقع ضمن نطاق المعرّف الفريد العام للخدمة في البلوتوث.

يجب تمرير قائمة allowedBluetoothServiceClassIds إلى navigator.serial.requestPort() للوصول إلى هذه الخدمات المخصّصة المستندة إلى RFCOMM كما هو موضّح في المثال أدناه.

const myBluetoothServiceUuid = "01234567-89ab-cdef-0123-456789abcdef";

// Prompt user to select any serial port.
// Access to the custom Bluetooth RFCOMM service above will be allowed.
const port = await navigator.serial.requestPort({
  allowedBluetoothServiceClassIds: [myBluetoothServiceUuid],
});

يُرجى العِلم أنّه يتم حظر جميع أرقام تعريف فئة الخدمة التي تستخدم معرّف UUID الأساسي لاتحاد Bluetooth SIG (أي جميع معرّفات UUID التي تنتهي بـ "-0000-1000-8000-00805f9b34fb") باستثناء معرّف ملف تعريف المنفذ التسلسلي، لأنّ Chrome لا يتيح خدمات Bluetooth Classic، مثل الصوت والفيديو.

يمكنك أيضًا استخدام bluetoothServiceClassIdمفتاح الفلتر عند الاتصال navigator.serial.requestPort()لطلب عرض قائمة بالمنافذ التسلسلية لتقنية Bluetooth التي تمّت فلترتها والتي تم تحديدها باستخدام معرّفات فئة الخدمة. راجِع المثال أدناه.

const myBluetoothServiceUuid = "01234567-89ab-cdef-0123-456789abcdef";

// Prompt the user to select Bluetooth serial ports with
// the custom Bluetooth RFCOMM service above.
const port = await navigator.serial.requestPort({
  allowedBluetoothServiceClassIds: [myBluetoothServiceUuid],
  filters: [{ bluetoothServiceClassId: myBluetoothServiceUuid }],
});

إذا كان المنفذ التسلسلي جزءًا من جهاز بلوتوث، يتوفّر مفتاح bluetoothServiceClassId جديد يحتوي على معرّف فئة الخدمة المرتبط بقناة RFCOMM التي يكون المنفذ متصلاً بها في معلومات المنفذ التسلسلي التي يتم عرضها من خلال الاتصال بـ port.getInfo(). في حال ربط المنفذ التسلسلي، يتم عرض 00001101‎-0000-1000-8000-00805f9b34fb أو 0x1101 في شكله المختصر.

const { bluetoothServiceClassId } = port.getInfo();

مثال على حالة الاستخدام: التحكّم في سمّاعات Pixel Buds Pro

تطبيق Pixel Buds Pro Web Companion هو تطبيق ويب جديد يتيح للمستخدمين التحكّم في سمّاعات Pixel Buds Pro من أي جهاز مزوّد بمتصفّح ويب. تم إنشاؤه باستخدام تقنيات تطبيقات الويب التقدّمية لتوفير تجربة تحميل فورية، ويمكن تثبيته اختياريًا مع تطبيقات نظام التشغيل الأخرى.

يستخدم التطبيق Web Serial API للتواصل مع سمّاعات Pixel Buds Pro. يتيح ذلك للمستخدمين التحكّم في إعدادات مختلفة على سماعات Pixel Buds Pro، مثل ميزة "التحكّم النشط في الضوضاء" ومعادل الصوت وميزة "الرصد داخل الأذن" وتحديثات البرامج الثابتة.

لتجربة تطبيق Pixel Buds Pro Web Companion، يُرجى الانتقال إلى mypixelbuds.google.com على جهاز ChromeOS (ستتوفّر المنصات الأخرى قريبًا).

لقطة شاشة لتطبيق Pixel Buds Pro المصاحب على الويب
تطبيق Pixel Buds Pro Web Companion App

الموارد

خدمات الإقرار

نشكر "رايلي غرانت" و"توماس شتاينر" و"بن مورجس" و"فينسنت شيب" على مراجعاتهم.