Seriennummer über Bluetooth im Web

Beaufort
François Beaufort

Über die Web Bluetooth API und die Web Serial API können Webanwendungen mit Bluetooth Low Energy-Geräten (BLE) bzw. seriellen Geräten kommunizieren. Viele Webentwickler setzen diese APIs bereits mit großem Erfolg ein. Es gibt jedoch auch eine wachsende Nachfrage nach Unterstützung für Bluetooth Classic-Geräte.

Jetzt unterstützt die Web Serial API die Kommunikation mit RFCOMM-Diensten auf gekoppelten Bluetooth Classic-Geräten wie dem Serial Port Profile (SPP) in Chrome 117 auf dem Desktop. Dies eröffnet sowohl Webentwicklern als auch Nutzern neue Möglichkeiten. Hier 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 verwenden Bluetooth SPP zur Kommunikation mit Belegdruckern.
  • RFID-Lesegeräte für Nutztiere verwenden Bluetooth SPP, um die Tierbewegungen zu protokollieren.

Das Bluetooth-RFCOMM-Protokoll

Zurück in die späten 90er Sie legen einfach Ihren Palm Pilot in die Halterung, um Ihren Kalender für den nächsten Tag zu synchronisieren. Wäre es nicht schön, wenn du das stattdessen auch kabellos tun könntest? Dank der neuen „Bluetooth“-Technologie musst du dich nicht mehr um die unruhigen Kabel kümmern. Die Zukunft ist kabellos. Es gibt nur ein Problem: Alle vorhandenen Elemente sind für den Anschluss an ein RS-232-Kabel ausgelegt. Bluetooth nutzt das Radio Frequency Communication-Protokoll (RFCOMM), um diese Schnittstelle für die gesamte vorhandene Software und Hardware bereitzustellen.

Auch heute werden RFCOMM-Dienste bei neuer und bestehender Hardware weit verbreitet. Dadurch können spezifische Latenz- und Bandbreitenanforderungen erfüllt werden, die von Bluetooth Low Energy bisher nicht erfüllt wurden. Aus diesem Grund haben wir eine Integration zwischen Web Serial, einer API zum Verbinden 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.

Web Serial API-Änderungen

Ab Chrome 117 auf dem Computer können Webentwickler jetzt zuverlässig mit gekoppelten Bluetooth Classic-Geräten über RFCOMM-Dienste und der Web Serial API 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 Classic Serial Port Profile bereitstellen.
  • Chrome kann jetzt auch dann mit der seriellen Schnittstelle kommunizieren, wenn das Betriebssystem keinen Geräteknoten speziell über einen emulierten seriellen Port erstellt hat.
  • Chrome kann jetzt mit einem nicht seriellen Port-Dienst kommunizieren, der eine serielle RFCOMM-Schnittstelle verfügbar macht (siehe Nicht standardmäßige Dienstklassen-IDs).

Wie Sie die Web Serial API verwenden, erfahren Sie im Artikel Aus einem seriellen Port lesen und in ihn schreiben. In diesem Artikel wird davon ausgegangen, dass Sie Grundkenntnisse in Bluetooth haben. Der Schwerpunkt liegt dabei auf den Änderungen bei der seriellen Version gegenüber Bluetooth.

Ohne Angabe von Filtern können Nutzer durch Aufrufen von navigator.serial.requestPort() die seriellen Ports ohne Bluetooth, bereits zugeordnete serielle Ports und alle nicht zugeordneten seriellen Ports auswählen, die vom standardisierten klassischen seriellen Bluetooth-Port-Profil bereitgestellt werden.

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

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

Du musst 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) blockiert werden, mit Ausnahme der Profil-ID des seriellen Ports, da Chrome keine Bluetooth Classic-Dienste wie Audio und Video unterstützt.

Sie können beim Aufrufen von navigator.serial.requestPort() auch den bluetoothServiceClassId-Filterschlüssel verwenden, um dem Nutzer eine Liste gefilterter serieller Bluetooth-Ports anzuzeigen, 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 in den Informationen zum seriellen Port, die durch Aufrufen von port.getInfo() zurückgegeben werden, ein neuer bluetoothServiceClassId-Schlüssel mit der Dienstklassen-ID verfügbar, die dem RFCOMM-Kanal zugeordnet ist, mit dem der Port 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();

Anwendungsfallbeispiel: Pixel Buds Pro steuern

Die Web-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 Progressive Web Apps-Technologien und ermöglicht ein sofortiges Laden und kann optional zusammen mit anderen Betriebssystem-Apps installiert werden.

Die App verwendet die Web Serial API, um mit Pixel Buds Pro zu kommunizieren. Damit können Nutzer verschiedene Einstellungen auf ihren 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 (demnächst auch andere Plattformen verfügbar).

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

Ressourcen

Danksagung

Wir danken Reilly Grant, Thomas Steiner, Ben Morss und Vincent Scheib für ihre Bewertungen. Hero-Image von Mika Baumeister auf Unsplash