Mit der Web Bluetooth API und der Web Serial API können Webanwendungen mit BLE-Geräten (Bluetooth Low Energy) bzw. seriellen Geräten kommunizieren. Viele Webentwickler nutzen diese APIs bereits sehr erfolgreich. Es besteht jedoch auch eine wachsende Nachfrage nach Unterstützung für Bluetooth Classic-Geräte.
Die Web Serial API unterstützt jetzt die Kommunikation mit RFCOMM-Diensten auf gekoppelten Bluetooth Classic-Geräten, einschließlich des Serial Port Profiles (SPP) in Chrome 117 auf dem Computer. Dies eröffnet sowohl Webentwicklern als auch Nutzern neue Möglichkeiten. Hier sind einige Geräte, die davon profitieren können:
- Pixel Buds Pro und andere kabellose Kopfhörer verwalten die Audioeinstellungen und Firmware-Updates über RFCOMM.
- Mobile Point-of-Sale-Systeme verwenden Bluetooth SPP, um mit Belegdruckern zu kommunizieren.
- RFID-Tag-Lesegeräte für Nutztiere verwenden Bluetooth SPP, um die Bewegungen der Tiere zu protokollieren.
Das Bluetooth-RFCOMM-Protokoll
Wir befinden uns in den späten 90er-Jahren. Sie legen Ihren Palm Pilot einfach in die Ladestation, um Ihren Kalender für den nächsten Tag zu synchronisieren. Wäre es nicht toll, wenn Sie das stattdessen kabellos tun könnten? Mit dieser neuen „Bluetooth“-Technologie können Sie sich von all den Kabeln befreien. Kabelloses Laden ist die Zukunft! Es gibt nur ein Problem: Alle vorhandenen Geräte sind für die Verbindung mit einem RS-232-Kabel ausgelegt. Daher verwendet Bluetooth das HFCOMM-Protokoll (Radio Frequency Communication), um diese Schnittstelle zu der gesamten vorhandenen Software und Hardware bereitzustellen.
Auch heute werden RFCOMM-Dienste in neuer und vorhandener Hardware häufig verwendet. So können bestimmte Latenz- und Bandbreitenanforderungen erfüllt werden, die mit Bluetooth Low Energy bisher nicht erfüllt werden. Aus diesem Grund haben wir eine Integration zwischen Web Serial, einer API für die Verbindung mit seriellen Geräten, und Bluetooth entwickelt, um den Zugriff auf diese älteren RFCOMM-Dienste zu ermöglichen, bevor Hersteller zu Bluetooth Low Energy migrieren und Entwickler stattdessen die Web Bluetooth API verwenden können.
Änderungen an der Web Serial API
Ab Chrome 117 für Desktop-Computer können Webentwickler jetzt zuverlässig über RFCOMM-Dienste mit gekoppelten Bluetooth Classic-Geräten über die Web Serial API kommunizieren. Dies wurde durch die folgenden Updates an der Web Serial API ermöglicht:
- Chrome zählt jetzt gekoppelte Bluetooth-Geräte auf, die eine serielle Schnittstelle mit dem standardisierten Bluetooth Classic Serial Port Profile bereitstellen.
- Chrome kann jetzt auch dann mit der seriellen Schnittstelle kommunizieren, wenn das Betriebssystem keinen Geräteknoten über einen emulierten seriellen Port erstellt hat.
- Chrome kann jetzt mit einem Dienst ohne serielle Ports kommunizieren, der eine serielle RFCOMM-Schnittstelle verfügbar macht (siehe Nicht standardmäßige Dienstklassen-IDs).
Weitere Informationen zur Verwendung der Web Serial API finden Sie im Artikel Aus einem seriellen Port lesen und in diesen schreiben. In diesem Artikel wird davon ausgegangen, dass Sie Grundkenntnisse in Bluetooth haben. Der Schwerpunkt liegt dabei auf den Änderungen bei seriellen Abläufen über Bluetooth.
Ohne Angabe von Filtern können Nutzer durch Eingabe von navigator.serial.requestPort()
nicht-Bluetooth-Serienports, bereits zugeordnete Bluetooth-Serienports und alle nicht zugeordneten seriellen Ports auswählen, die vom standardisierten Bluetooth Classic Serial Port Profile bereitgestellt werden.
// Prompt user to select any serial port.
const port = await navigator.serial.requestPort();
Die meisten Geräte stellen zwar eine SPP-basierte Kommunikation über das standardisierte Bluetooth Classic Serial Port Profile bereit, einige verwenden jedoch benutzerdefinierte RFCOMM-basierte Dienste. Diese Geräte haben eine Dienstklassen-ID, die nicht im Standardbereich der Bluetooth-UUIDs liegt.
Sie müssen die allowedBluetoothServiceClassIds
-Liste an navigator.serial.requestPort()
übergeben, um auf diese benutzerdefinierten RFCOMM-basierten Dienste zugreifen zu können, wie im folgenden Beispiel gezeigt.
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],
});
Beachten Sie, dass alle Dienstklassen-IDs, die die Bluetooth SIG Base-UUID verwenden (d. h. alle UUIDs, die auf „-0000-1000-8000-00805f9b34fb“ enden), mit Ausnahme der Profil-ID des seriellen Ports blockiert werden, da Chrome keine Bluetooth Classic-Dienste wie Audio und Video unterstützt.
Du kannst auch den bluetoothServiceClassId
Filterschlüssel verwenden, wenn du navigator.serial.requestPort()
aufrufst. So erhält der Nutzer eine Liste gefilterter serieller Bluetooth-Ports, die durch Dienstklassen-IDs identifiziert werden. Siehe Beispiel unten.
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 }],
});
Wenn die serielle Schnittstelle zu einem Bluetooth-Gerät gehört, ist in den Informationen zur seriellen Schnittstelle, die durch Aufrufen von port.getInfo()
zurückgegeben werden, ein neuer bluetoothServiceClassId
-Schlüssel mit der Service-Klassen-ID verfügbar, die mit dem RFCOMM-Kanal verknüpft ist, mit dem die Schnittstelle verbunden ist. Wenn der serielle Port zugeordnet ist, wird in der Kurzform „00001101-0000-1000-8000-00805f9b34fb“ oder „0x1101“ zurückgegeben.
const { bluetoothServiceClassId } = port.getInfo();
Beispiel für einen Anwendungsfall: Pixel Buds Pro steuern
Die Companion-App „Pixel Buds Web“ für die Pixel Buds Pro ist eine neue Web-App, mit der Nutzer ihre Pixel Buds Pro von jedem Gerät mit Webbrowser aus steuern können. Sie wurde mit Technologien für progressive Web-Apps entwickelt, um sofort geladen zu werden, und kann optional zusammen mit anderen Betriebssystem-Apps installiert werden.
Die App nutzt die Web Serial API, um mit Pixel Buds Pro zu kommunizieren. So können Nutzer verschiedene Einstellungen für ihre Pixel Buds Pro verwalten, z. B. die aktive Geräuschunterdrückung, den Equalizer, die Trageerkennung und Firmware-Updates.
Wenn Sie die Companion-App „Pixel Buds Web“ für Pixel Buds Pro ausprobieren möchten, rufen Sie auf einem ChromeOS-Gerät mypixelbuds.google.com auf. Weitere Plattformen folgen bald.
Ressourcen
Danksagung
Vielen Dank an Reilly Grant, Thomas Steiner, Ben Morss und Vincent Scheib für ihre Rezensionen.