Seriennummer über Bluetooth im Web

François Beaufort
François Beaufort

Mit der Web Bluetooth API und der Web Serial API können Web-Apps jeweils mit BLE-Geräten (Bluetooth Low Energy) und seriellen Geräten kommunizieren. Viele Webentwickler nutzen diese APIs bereits mit großem Erfolg. 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. Das 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 In-Ear-Kopfhörer verwenden RFCOMM, um Audioeinstellungen und Firmwareupdates zu verwalten.
  • Mobile Point-of-Sale-Systeme verwenden Bluetooth SPP, um mit Belegdruckern zu kommunizieren.
  • RFID-Tag-Lesegeräte für Nutztiere verwenden Bluetooth SPP, um Tierbewegungen zu erfassen.

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. Bluetooth verwendet daher das Radio Frequency Communication (RFCOMM)-Protokoll, um diese Schnittstelle für alle vorhandenen Software- und Hardwarekomponenten 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 kommunizieren, der keine serielle Schnittstelle bereitstellt, aber eine RFCOMM-Schnittstelle (siehe Nicht standardmäßige Service-Klassen-IDs).

Weitere Informationen zur Verwendung der Web Serial API finden Sie im Artikel Aus einem seriellen Port lesen und in einen seriellen Port schreiben. In diesem Artikel werden Grundkenntnisse zu Bluetooth vorausgesetzt. Der Schwerpunkt liegt auf den Änderungen bei der seriellen Übertragung ü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 Liste allowedBluetoothServiceClassIds an navigator.serial.requestPort() übergeben, um auf diese benutzerdefinierten RFCOMM-basierten Dienste zuzugreifen, 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],
});

Hinweis: Alle Dienstklassen-IDs, die die Bluetooth SIG Base UUID verwenden (d. h. alle UUIDs, die auf „-0000-1000-8000-00805f9b34fb“ enden), werden blockiert, mit Ausnahme der Serial Port Profile ID, da Chrome keine Bluetooth Classic-Dienste wie Audio und Video unterstützt.

Sie können auch den Filterschlüssel bluetoothServiceClassId beim Aufrufen von navigator.serial.requestPort() verwenden, um dem Nutzer eine Liste der gefilterten Bluetooth-Serienports anzuzeigen, die anhand von Service-Klassen-IDs identifiziert wurden. 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 Anschluss zugeordnet ist, wird „00001101-0000-1000-8000-00805f9b34fb“ oder 0x1101 in Kurzform 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 verwendet 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.

Screenshot der Webversion der Pixel Buds Pro-Companion-App
Companion-App für Pixel Buds Pro.

Ressourcen

Danksagung

Vielen Dank an Reilly Grant, Thomas Steiner, Ben Morss und Vincent Scheib für ihre Rezensionen.