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, kunnen gebruikers met het aanroepen van navigator.serial.requestPort()
niet-Bluetooth seriële poorten, seriële Bluetooth-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 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 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. It is built using Progressive Web Apps technologies for an instant load experience and can optionally be installed alongside other operating system apps.
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).
Bronnen
Dankbetuigingen
Met dank aan Reilly Grant, Thomas Steiner, Ben Morss en Vincent Scheib voor hun recensies.