Serieel via Bluetooth op internet

François Beaufort
François Beaufort

Met de Web Bluetooth API en de Web Serial API kunnen webapps communiceren met respectievelijk Bluetooth Low Energy (BLE)-apparaten en seriële apparaten. Hoewel veel webontwikkelaars deze API's al met groot succes gebruiken, is er ook een groeiende vraag naar ondersteuning voor Bluetooth Classic-apparaten.

Nu ondersteunt de Web Serial API communicatie met RFCOMM-services op gekoppelde Bluetooth Classic-apparaten, waaronder het Serial Port Profile (SPP) in Chrome 117 op desktop. Dit opent nieuwe mogelijkheden voor zowel webontwikkelaars als gebruikers. Hier zijn enkele apparaten uit de echte wereld die hiervan kunnen profiteren:

  • Pixel Buds Pro en andere draadloze oordopjes gebruiken RFCOMM om audio-instellingen en firmware-updates te beheren.
  • Mobiele kassasystemen gebruiken Bluetooth SPP om te communiceren met kassabonprinters.
  • RFID-taglezers voor vee gebruiken Bluetooth SPP om de bewegingen van dieren te registreren.

Het Bluetooth RFCOMM-protocol

Neem jezelf mee terug naar eind jaren 90. U plaatst uw Palm Pilot gewoon in de houder om uw agenda voor de volgende dag te synchroniseren. Zou het niet mooi zijn als je dat draadloos zou kunnen doen? Met deze nieuwe "Bluetooth"-technologie ben je af van al die rommelige snoeren. Draadloos is de toekomst! Er is alleen één probleem: alles wat bestaat, is ontworpen om te worden aangesloten met een RS-232-kabel. Bluetooth gebruikt dus het Radio Frequency Communication (RFCOMM)-protocol om die interface voor alle bestaande software en hardware te bieden.

Zelfs vandaag de dag worden RFCOMM-services op grote schaal gebruikt in nieuwe en bestaande hardware. Het maakt het mogelijk om te voldoen aan specifieke latentie- en bandbreedtevereisten waaraan Bluetooth Low Energy tot nu toe niet voldoet. Daarom hebben we een integratie ontwikkeld tussen Web Serial, een API voor verbinding met seriële apparaten, en Bluetooth, om toegang tot deze oudere RFCOMM-services mogelijk te maken voordat fabrikanten uiteindelijk migreren naar Bluetooth Low Energy en ontwikkelaars in plaats daarvan de Web Bluetooth API kunnen gebruiken.

Web Serial API-wijzigingen

Vanaf Chrome 117 op desktop kunnen webontwikkelaars nu betrouwbaar communiceren met gekoppelde Bluetooth Classic-apparaten via RFCOMM-services met behulp van de Web Serial API. Dit werd mogelijk gemaakt door de volgende updates van de Web Serial API:

  • Chrome somt nu gekoppelde Bluetooth-apparaten op die een seriële interface gebruiken met behulp van het gestandaardiseerde Bluetooth Classic Serial Port Profile.
  • Chrome kan nu communiceren met de seriële interface, zelfs als het besturingssysteem niet specifiek een apparaatknooppunt heeft gemaakt via een geëmuleerde seriële poort.
  • Chrome kan nu communiceren met een niet-seriële poortservice die een seriële RFCOMM-interface beschikbaar stelt (zie niet-standaard serviceklasse-ID's ).

In het artikel Lezen van en schrijven naar een seriële poort leest u hoe u de Web Serial API gebruikt. In dit artikel wordt ervan uitgegaan dat u over basiskennis over Bluetooth beschikt en wordt de nadruk gelegd op de wijzigingen in serieel via Bluetooth.

Zonder filters op te geven, stelt het aanroepen van navigator.serial.requestPort() gebruikers in staat om niet-Bluetooth seriële poorten, Bluetooth seriële poorten die al in kaart zijn gebracht, en alle niet-toegewezen seriële poorten die worden geleverd door het gestandaardiseerde Bluetooth Classic Serial Port Profile te selecteren.

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

Hoewel de meeste apparaten op SPP gebaseerde communicatie mogelijk maken via het gestandaardiseerde Bluetooth Classic Serial Port Profile, gebruiken sommige apparaten aangepaste RFCOMM-gebaseerde services. Deze apparaten hebben een Service Class ID die niet binnen het standaard Bluetooth UUID-bereik valt.

U moet de lijst allowedBluetoothServiceClassIds doorgeven aan navigator.serial.requestPort() om toegang te krijgen tot deze aangepaste op RFCOMM gebaseerde services, zoals weergegeven in het onderstaande voorbeeld.

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],
});

Houd er rekening mee dat alle serviceklasse-ID's die de Bluetooth SIG Base UUID gebruiken (dat wil zeggen, alle UUID's die eindigen op "-0000-1000-8000-00805f9b34fb") worden geblokkeerd, behalve de seriële poortprofiel-ID, aangezien Chrome geen Bluetooth Classic-services zoals als audio en video.

U kunt ook de filtersleutel bluetoothServiceClassId gebruiken bij het aanroepen van navigator.serial.requestPort() om de gebruiker te vragen om een ​​lijst met gefilterde seriële Bluetooth-poorten, geïdentificeerd door serviceklasse-ID's. Zie het onderstaande voorbeeld.

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 }],
});

Als de seriële poort deel uitmaakt van een Bluetooth-apparaat, is er een nieuwe bluetoothServiceClassId sleutel met de Service Class-ID die is gekoppeld aan het RFCOMM-kanaal waarmee de poort is verbonden, beschikbaar in de seriële poortinformatie die wordt geretourneerd door port.getInfo() aan te roepen. Als de seriële poort is toegewezen, retourneert deze "00001101-0000-1000-8000-00805f9b34fb" of 0x1101 in zijn korte vorm.

const { bluetoothServiceClassId } = port.getInfo();

Voorbeeld van gebruik: Controle Pixel Buds Pro

De Pixel Buds Pro Web Companion-app is een nieuwe webapp waarmee gebruikers hun Pixel Buds Pro kunnen bedienen vanaf elk apparaat met een webbrowser. Het is gebouwd met behulp van Progressive Web Apps- technologieën voor een onmiddellijke laadervaring en kan optioneel naast andere besturingssysteem-apps worden geïnstalleerd.

De app gebruikt de Web Serial API om met de Pixel Buds Pro te communiceren. Hiermee kunnen gebruikers verschillende instellingen op hun Pixel Buds Pro beheren, zoals actieve ruisbeheersing, equalizer, in-ear detectie en firmware-updates.

Als je de Pixel Buds Pro Web Companion-app wilt proberen, ga je naar mypixelbuds.google.com op een ChromeOS-apparaat (andere platforms binnenkort beschikbaar).

Screenshot van de Pixel Buds Pro Web Companion-app.
Pixel Buds Pro Web Companion-app.

Bronnen

Dankbetuigingen

Met dank aan Reilly Grant, Thomas Steiner, Ben Morss en Vincent Scheib voor hun recensies. Heldenafbeelding door Mika Baumeister op Unsplash .