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

François Beaufort
François Beaufort

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

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

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

פרוטוקול Bluetooth RFCOMM

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

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

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

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

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

תוכלו למצוא מידע נוסף על אופן השימוש ב-Web Series 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],
});

חשוב לשים לב שכל המזהים של סיווגי שירות שמשתמשים ב-Bluetooth SIG Base UUID (כלומר, כל מזהי ה-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 }],
});

אם היציאה הטורית היא חלק ממכשיר Bluetooth, מפתח bluetoothServiceClassId חדש שמכיל את מזהה סיווג השירות המשויך לערוץ RFCOMM שאליו היציאה מחוברת יהיה זמין בפרטי היציאה הטורית שמוחזרים בקריאה port.getInfo(). אם היציאה הטורית ממופה, היא מחזירה '00001101-0000-1000-8000-00805f9b34fb' או 0x1101 בצורתה הקצרה.

const { bluetoothServiceClassId } = port.getInfo();

תרחיש לדוגמה: שליטה ב-Pixel Buds Pro

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

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

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

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

מקורות מידע

אימות חתימות

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