יציאה טורית באמצעות Bluetooth באינטרנט

François Beaufort
François Beaufort

Web Bluetooth API ו-Web Serial API מאפשרים לאפליקציות אינטרנט לתקשר עם מכשירים עם צריכת אנרגיה נמוכה (BLE) של Bluetooth ומכשירים עם יציאה טורית, בהתאמה. מפתחי אינטרנט רבים כבר משתמשים בממשקי ה-API האלה בהצלחה רבה, אבל יש גם ביקוש הולך וגדל לתמיכה במכשירי Bluetooth Classic.

עכשיו, Web Serial API תומך בתקשורת עם שירותי RFCOMM במכשירי Bluetooth Classic מותאמים, כולל פרופיל היציאה הטורי (SPP) ב-Chrome 117 במחשב. כך נוצרות אפשרויות חדשות למפתחי אתרים ולמשתמשים כאחד. הנה כמה דוגמאות למכשירים בעולם האמיתי שיכולים להפיק תועלת מהתכונה הזו:

  • אוזניות Pixel Buds Pro ואוזניות אוזניות אלחוטיות אחרות משתמשות ב-RFCOMM כדי לנהל את הגדרות האודיו ואת עדכוני הקושחה.
  • מערכות ניידות לנקודת מכירה משתמשות ב-Bluetooth SPP כדי לתקשר עם מדפסות קבלות.
  • קוראי תגי RFID של בעלי חיים משתמשים ב-Bluetooth SPP כדי לתעד את תנועות החיות.

פרוטוקול RFCOMM של Bluetooth

חזרה לשנות ה-90 של המאה הקודמת. פשוט צריך להכניס את Palm Pilot למטען כדי לסנכרן את היומן ליום הבא. לא הייתם רוצים לעשות את זה באופן אלחוטי במקום זאת? הטכנולוגיה החדשה 'Bluetooth' מאפשרת לך להיפטר מכל הכבלים המגושמים. אלחוטי זה העתיד! יש רק בעיה אחת, כל מה שקיים מיועד לחיבור באמצעות כבל RS-232. לכן, Bluetooth משתמש בפרוטוקול Radio Frequency Communication‏ (RFCOMM) כדי לספק את הממשק הזה לכל התוכנות והחומרה הקיימות.

גם היום, שירותי RFCOMM נמצאים בשימוש נרחב בחומרה חדשה וקיימת. הוא מאפשר לעמוד בדרישות ספציפיות של זמן אחזור ורוחב פס, ש-Bluetooth עם צריכת אנרגיה נמוכה לא עומד בהן עד כה. לכן פיתחנו שילוב בין Web Serial, ממשק API לחיבור למכשירים טוריים, לבין Bluetooth, כדי לאפשר גישה לשירותי RFCOMM הקודמים האלה לפני שהיצרנים יעברו בסופו של דבר ל-Bluetooth Low Energy, והמפתחים יוכלו להשתמש ב-Web Bluetooth API במקום זאת.

שינויים ב-Web Serial API

החל מגרסת Chrome 117 למחשב, מפתחי אינטרנט יכולים עכשיו לתקשר בצורה מהימנה עם מכשירי Bluetooth Classic מותאמים באמצעות שירותי RFCOMM באמצעות Web Serial API. העדכונים הבאים ב-Web Serial API אפשרו זאת:

  • מעכשיו, Chrome מציג פירוט של מכשירי Bluetooth מותאמים שמציגים ממשק טורי באמצעות פרופיל היציאה הטורי הסטנדרטי של Bluetooth Classic.
  • עכשיו Chrome יכול לתקשר עם הממשק הטורי גם אם מערכת ההפעלה לא יצרה צומת מכשיר דרך יציאה טורית ממולאמת באופן ספציפי.
  • מעכשיו, Chrome יכול לתקשר עם שירות שאינו יציאה טורית שחשף ממשק טורית RFCOMM (ראו מזהי Service Class לא סטנדרטיים).

במאמר קריאה מיציאה טורית וכתיבה אליה מוסבר איך משתמשים ב-Web Serial API. ההנחה במאמר הזה היא שיש לכם ידע בסיסי ב-Bluetooth, והוא מתמקד בשינויים בתקן ה-Serial over Bluetooth.

בלי לציין מסננים, קריאה ל-navigator.serial.requestPort() מאפשרת למשתמשים לבחור יציאות טוריות שאינן Bluetooth, יציאות טוריות של Bluetooth שכבר מוגדרות וממופות ויציאות טוריות לא מוגדרות וממופות שסופקו על ידי פרופיל היציאה הטורית הסטנדרטי של Bluetooth Classic.

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

רוב המכשירים חושפים תקשורת מבוססת-SPP דרך פרופיל היציאה הטורי (SPP) הסטנדרטי של Bluetooth Classic, אבל חלק מהם משתמשים בשירותים מותאמים אישית שמבוססים על RFCOMM. למכשירים האלה יש מזהה של סוג שירות שלא נמצא בטווח ה-UUID הרגיל של Bluetooth.

כדי לגשת לשירותים המותאמים אישית האלה שמבוססים על RFCOMM, צריך להעביר את הרשימה allowedBluetoothServiceClassIds אל navigator.serial.requestPort(), כפי שמתואר בדוגמה הבאה.

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],
});

חשוב לדעת שכל מזהי Service Class שמשתמשים ב-UUID Base של Bluetooth SIG (כלומר, כל מזהי ה-UUID שמסתיימים ב-‎ "-0000-1000-8000-00805f9b34fb") חסומים, מלבד מזהה הפרופיל של Serial Port, כי 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 }],
});

אם היציאה הטורי היא חלק ממכשיר Bluetooth, מפתח 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 מכל מכשיר עם דפדפן אינטרנט. היא מבוססת על טכנולוגיות של אפליקציות Progressive Web Apps כדי לספק חוויית טעינה מיידית, ואפשר להתקין אותה לצד אפליקציות אחרות של מערכת ההפעלה.

האפליקציה משתמשת ב-Web Serial API כדי לתקשר עם Pixel Buds Pro. כך המשתמשים יכולים לשלוט בהגדרות שונות ב-Pixel Buds Pro, כמו בקרת רעשי רקע פעילה, אקולייזר, זיהוי מיקום האוזניה ועדכוני קושחה.

כדי לנסות את אפליקציית Pixel Buds Pro ל-Web, אפשר להיכנס לכתובת mypixelbuds.google.com במכשיר ChromeOS (פלטפורמות אחרות יהיו זמינות בקרוב).

צילום מסך של אפליקציית האינטרנט הנלווית ל-Pixel Buds Pro.
אפליקציית Pixel Buds Pro ל-Web.

משאבים

אימות חתימות

תודה ל-Reilly Grant, ל-Thomas Steiner, ל-Ben Morss ול-Vincent Scheib על הביקורות שלהם.