Seriale tramite Bluetooth sul Web

François Beaufort
François Beaufort

L'API Web Bluetooth e l'API Web Serial consentono alle app web di comunicare rispettivamente con i dispositivi Bluetooth Low Energy (BLE) e seriali. Anche se molti sviluppatori web utilizzano già queste API con ottimi risultati, c'è una crescente richiesta di supporto anche per i dispositivi Bluetooth Classic.

Ora l'API Web Serial supporta la comunicazione con i servizi RFCOMM sui dispositivi Bluetooth Classic accoppiati, incluso il Serial Port Profile (SPP) in Chrome 117 su computer. Questo apre nuove possibilità agli sviluppatori web e agli utenti. Ecco alcuni dispositivi reali che possono trarre vantaggio da questa funzionalità:

  • I Pixel Buds Pro e altri auricolari wireless utilizzano RFCOMM per gestire le impostazioni audio e gli aggiornamenti del firmware.
  • I sistemi point of sale mobili utilizzano Bluetooth SPP per comunicare con le stampanti per ricevute.
  • I lettori di tag RFID per bestiame utilizzano Bluetooth SPP per registrare i movimenti di animali.

Il protocollo Bluetooth RFCOMM

Torna alla fine degli anni '90. Basta mettere il Palm Pilot sulla base per sincronizzare il calendario per il giorno successivo. Non sarebbe bello se potessi farlo in modalità wireless? Grazie alla nuova tecnologia "Bluetooth", puoi eliminare tutti i cavi caotici. Il wireless è il futuro! Il problema è un unico problema: tutto ciò che esiste è progettato per essere collegato tramite un cavo RS-232. Pertanto, il Bluetooth utilizza il protocollo RFCOMM (RFCOMM) per fornire tale interfaccia a tutto il software e l'hardware esistenti.

Ancora oggi i servizi RFCOMM sono ampiamente utilizzati in hardware nuovi ed esistenti. Consente di soddisfare requisiti di latenza e larghezza di banda specifici che finora non sono soddisfatti da Bluetooth Low Energy. Ecco perché abbiamo sviluppato un'integrazione tra Web Serial, un'API per la connessione a dispositivi seriali, e Bluetooth, per consentire l'accesso a questi servizi RFCOMM legacy prima che i produttori eseguano la migrazione a Bluetooth Low Energy e gli sviluppatori possono utilizzare invece l'API Web Bluetooth.

Modifiche all'API Web Serial

A partire da Chrome 117 per computer, gli sviluppatori web possono comunicare in modo affidabile con i dispositivi Bluetooth Classic accoppiati tramite i servizi RFCOMM utilizzando l'API Web Serial. Ciò è stato reso possibile dai seguenti aggiornamenti all'API Web Serial:

  • Chrome ora elenca i dispositivi Bluetooth accoppiati che espongono un'interfaccia seriale utilizzando il profilo porta seriale classico Bluetooth standardizzato.
  • Ora Chrome può comunicare con l'interfaccia seriale anche se il sistema operativo non ha creato un nodo del dispositivo tramite una porta seriale emulata specificatamente.
  • Ora Chrome può comunicare con un servizio di porta non seriale che espone un'interfaccia seriale RFCOMM (vedi ID classi di servizio non standard).

Per informazioni su come utilizzare l'API Web Serial, consulta l'articolo Lettura e scrittura su una porta seriale. In questo articolo si presuppone che tu abbia una conoscenza di base del Bluetooth e che si concentra sui cambiamenti seriali tramite Bluetooth.

Senza specificare alcun filtro, la chiamata a navigator.serial.requestPort() consente agli utenti di selezionare porte seriali non Bluetooth, porte seriali Bluetooth già mappate e qualsiasi porta seriale non mappata fornita dal profilo standard della porta seriale Bluetooth Classic.

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

Anche se la maggior parte dei dispositivi espone la comunicazione basata su SPP tramite il profilo porta seriale classico Bluetooth standard, alcuni utilizzano servizi personalizzati basati su RFCOMM. Questi dispositivi hanno un ID classe di servizio che non rientra nell'intervallo UUID Bluetooth standard.

Devi passare l'elenco allowedBluetoothServiceClassIds a navigator.serial.requestPort() per accedere a questi servizi personalizzati basati su RFCOMM, come mostrato nell'esempio riportato di seguito.

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

Tieni presente che tutti gli ID classe di servizio che utilizzano l'UUID Bluetooth SIG Base (ovvero tutti gli UUID che terminano con "-0000-1000-8000-00805f9b34fb") vengono bloccati, ad eccezione dell'ID profilo della porta seriale, poiché Chrome non supporta i servizi Bluetooth Classic come audio e video.

Puoi anche usare la bluetoothServiceClassIdchiave di filtro durante la chiamata a navigator.serial.requestPort() per chiedere all'utente con un elenco di porte seriali Bluetooth filtrate identificate tramite ID classe di servizio. Vedi l'esempio riportato di seguito.

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

Se la porta seriale fa parte di un dispositivo Bluetooth, una nuova chiave bluetoothServiceClassId contenente l'ID classe di servizio associato al canale RFCOMM a cui è collegata la porta è disponibile nelle informazioni della porta seriale restituite chiamando il numero port.getInfo(). Se la porta seriale è mappata, nella forma abbreviata viene restituito "00001101-0000-1000-8000-00805f9b34fb" o 0x1101.

const { bluetoothServiceClassId } = port.getInfo();

Esempio di caso d'uso: controllare i Pixel Buds Pro

L'app complementare Pixel Buds Pro è una nuova app web che consente agli utenti di controllare i Pixel Buds Pro da qualsiasi dispositivo con un browser web. È realizzato utilizzando tecnologie di app web progressive per un'esperienza di caricamento istantaneo e può essere installato insieme ad altre app del sistema operativo.

L'app utilizza l'API Web Serial per comunicare con i Pixel Buds Pro. In questo modo gli utenti possono controllare varie impostazioni dei loro Pixel Buds Pro, come il controllo attivo del rumore, l'equalizzatore, il rilevamento in-ear e gli aggiornamenti del firmware.

Per provare l'app complementare Pixel Buds Pro, visita il sito mypixelbuds.google.com su un dispositivo ChromeOS (altre piattaforme saranno presto disponibili).

Screenshot dell'app complementare Pixel Buds Pro.
App complementare Pixel Buds Pro.

Risorse

Riconoscimenti

Grazie a Reilly Grant, Thomas Steiner, Ben Morss e Vincent Scheib per le loro recensioni. Immagine hero di Mika Baumeister su Unsplash.