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

פרנסואה בופורט
פרנסואה בופורט

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

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

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

פרוטוקול Bluetooth RFCOMM

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

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

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

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

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

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

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

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

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

עליך להעביר את הרשימה 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 Base (כלומר, כל מזהי ה-UUID שמסתיימים ב-' -0000-1000-8000-00805f9b34fb') חסומים מלבד המזהה של פרופיל היציאה הטורית, כי Chrome לא תומך בשירותי Bluetooth הקלאסי, כמו אודיו ווידאו.

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

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();

דוגמה לתרחיש לדוגמה: Control Pixel Buds Pro

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

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

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

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

מקורות מידע

אימות חתימות

תודה לריילי גראנט, תומאס שטיינר, בן מורס ווינסנט שייב על הביקורות שלהם. תמונה ראשית (Hero) של Mika Baumeister באתר Unense.