יציאה טורית באמצעות 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 Low Energy. לכן פיתחנו שילוב בין 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 (מידע נוסף זמין בקטע מזהים של סיווגי שירות לא סטנדרטיים).

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

חשוב לשים לב שכל המזהים של סיווגי שירות שמשתמשים ב-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 Web Companion היא אפליקציית אינטרנט חדשה שמאפשרת למשתמשים לשלוט באוזניות 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.

משאבים

אימות חתימות

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