Seriennummer über Bluetooth im Web

François Beaufort
François Beaufort

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, aber es besteht auch ein wachsender Bedarf an 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 Profile (SPP) in Chrome 117 auf Computern. Dies eröffnet sowohl Webentwicklern als auch Nutzern neue Möglichkeiten. Hier sind einige reale Geräte, die davon profitieren können:

  • Pixel Buds Pro und andere kabellose Kopfhörer verwalten die Audioeinstellungen und Firmware-Updates über RFCOMM.
  • Mobile Kassensysteme kommunizieren über Bluetooth SPP mit Belegdruckern.
  • RFID-Tag-Lesegeräte für Nutztiere verwenden Bluetooth SPP, um die Bewegungen der Tiere zu protokollieren.

Das Bluetooth-RFCOMM-Protokoll

Reise zurück in die späten 90er. Sie legen Ihren Palm Pilot in die Halterung, um Ihren Kalender für den nächsten Tag zu synchronisieren. Wäre es nicht schön, wenn Sie das auch kabellos machen könnten? Dank der neuen Bluetooth-Technologie sind keine unschönen Kabel mehr nötig. Kabellose Übertragung ist die Zukunft! Es gibt nur ein Problem: Alles, was vorhanden ist, kann mit einem RS-232-Kabel verbunden werden. Daher verwendet Bluetooth das HFCOMM-Protokoll (Radio Frequency Communication), um diese Schnittstelle zu der gesamten vorhandenen Software und Hardware bereitzustellen.

Auch heute sind RFCOMM-Dienste für neue und bestehende Hardware weit verbreitet. Es ermöglicht die Erfüllung bestimmter Latenz- und Bandbreitenanforderungen, die Bluetooth Low Energy bisher nicht erfüllt hat. Aus diesem Grund haben wir eine Integration zwischen Web Serial, einer API zur Verbindung mit seriellen Geräten, und Bluetooth entwickelt, um den Zugriff auf diese älteren RFCOMM-Dienste zu ermöglichen, bevor Hersteller schließlich zu Bluetooth Low Energy migrieren und Entwickler stattdessen die Web Bluetooth API verwenden können.

Änderungen an der Web Serial API

Ab Chrome 117 können Webentwickler jetzt mithilfe der Web Serial API zuverlässig über RFCOMM-Dienste mit gekoppelten Bluetooth Classic-Geräten kommunizieren. Dies wurde durch die folgenden Aktualisierungen an der Web Serial API ermöglicht:

  • Chrome listet jetzt gekoppelte Bluetooth-Geräte auf, die eine serielle Schnittstelle mithilfe des standardisierten Bluetooth-Profils für den klassischen seriellen Port verfügbar machen.
  • Chrome kann jetzt mit der seriellen Schnittstelle kommunizieren, auch wenn das Betriebssystem keinen Geräteknoten speziell ü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).

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 ermöglicht das Aufrufen von navigator.serial.requestPort() Nutzern, serielle Ports ohne Bluetooth, bereits zugeordnete serielle Ports mit Bluetooth und alle nicht zugeordneten seriellen Ports auszuwählen, die vom standardisierten klassischen Bluetooth-Profil für serielle Ports bereitgestellt wurden.

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

Die meisten Geräte ermöglichen eine SPP-basierte Kommunikation über das standardisierte Bluetooth Classic Serial Port Profile, einige verwenden jedoch benutzerdefinierte RFCOMM-basierte Dienste. Diese Geräte haben eine Dienstklassen-ID, die nicht im standardmäßigen Bluetooth-UUID-Bereich liegt.

Sie müssen die allowedBluetoothServiceClassIds-Liste 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],
});

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 bluetoothServiceClassIdFilterschlü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 der serielle Port Teil eines Bluetooth-Geräts ist, ist ein neuer bluetoothServiceClassId-Schlüssel mit der Dienstklassen-ID für den RFCOMM-Kanal, mit dem der Port verbunden ist, in den Informationen zum seriellen Port verfügbar, die durch Aufrufen von port.getInfo() zurückgegeben werden. Wenn der serielle Port zugeordnet ist, wird in der Kurzform „00001101-0000-1000-8000-00805f9b34fb“ oder „0x1101“ zurückgegeben.

const { bluetoothServiceClassId } = port.getInfo();

Anwendungsbeispiel: Pixel Buds Pro steuern

Die Companion-App für Pixel Buds Pro ist eine neue Web-App, mit der Nutzer ihre Pixel Buds Pro von jedem Gerät aus über einen Webbrowser steuern können. Es basiert auf progressiven Web-Apps-Technologien, die ein sofortiges Laden ermöglichen, und kann optional zusammen mit anderen Betriebssystem-Apps installiert werden.

Die App nutzt die Web Serial API, um mit Pixel Buds Pro zu kommunizieren. Nutzer können so verschiedene Einstellungen ihrer Pixel Buds Pro steuern, z. B. die aktive Geräuschunterdrückung, den Equalizer, die Trageerkennung und Firmware-Updates.

Wenn Sie die Companion-App für Pixel Buds Pro ausprobieren möchten, rufen Sie auf einem ChromeOS-Gerät mypixelbuds.google.com auf. Andere Plattformen sind demnächst verfügbar.

Screenshot der Companion-App „Pixel Buds Pro“.
Web-Companion-App für Pixel Buds Pro.

Weitere Informationen

Danksagung

Vielen Dank an Reilly Grant, Thomas Steiner, Ben Morss und Vincent Scheib für ihre Rezensionen. Hero-Image von Mika Baumeister auf Unsplash