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 con i dispositivi seriali. Sebbene molti sviluppatori web stiano già utilizzando queste API con ottimi risultati, la domanda di assistenza per i dispositivi Bluetooth Classic è in crescita.

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. Ciò apre nuove possibilità sia per gli sviluppatori web che per gli 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 il bestiame utilizzano il Bluetooth SPP per registrare i movimenti degli animali.

Il protocollo RFCOMM Bluetooth

Torna alla fine degli anni '90. Basta inserire il Palm Pilot nella base per sincronizzare il calendario per il giorno successivo. Non sarebbe bello se potessi farlo in modalità wireless? Con questa nuova tecnologia "Bluetooth" puoi liberarti di tutti quei cavi disordinati. Il wireless è il futuro! C'è un solo problema: tutto ciò che esiste è progettato per essere collegato con 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 specifici di latenza e larghezza di banda che finora non sono stati soddisfatti da Bluetooth Low Energy. Per questo motivo abbiamo sviluppato un'integrazione tra Web Serial, un'API per la connessione ai dispositivi seriali, e il Bluetooth, per consentire l'accesso a questi servizi RFCOMM precedenti prima che i produttori eseguino la migrazione a Bluetooth Low Energy e gli sviluppatori possano utilizzare l'API Web Bluetooth.

Modifiche all'API Web Serial

A partire da Chrome 117 per computer, gli sviluppatori web ora 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:

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

Scopri come utilizzare l'API Web Serial nell'articolo Leggere da e scrivere in una porta seriale. Questo articolo presuppone che tu abbia conoscenze di base sul Bluetooth e si concentra sulle modifiche alla porta seriale tramite Bluetooth.

Senza specificare filtri, 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 porta seriale Bluetooth Classic standardizzato.

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

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

Per accedere a questi servizi basati su RFCOMM personalizzati, devi passare l'elenco allowedBluetoothServiceClassIds a navigator.serial.requestPort(), come mostrato nell'esempio seguente.

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 base Bluetooth SIG (ovvero tutti gli UUID che terminano con "-0000-1000-8000-00805f9b34fb") sono bloccati, ad eccezione dell'ID profilo porta seriale, in quanto Chrome non supporta i servizi Bluetooth Classic come audio e video.

Puoi anche utilizzare la bluetoothServiceClassIdchiave di filtro quando chiami navigator.serial.requestPort()per mostrare all'utente un elenco di porte seriali Bluetooth filtrate identificate dagli 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, nelle informazioni sulla porta seriale restituite dalla chiamata a port.getInfo() è disponibile una nuova chiave bluetoothServiceClassId contenente l'ID classe di servizio associato al canale RFCOMM a cui è collegata la porta. Se la porta seriale è mappata, restituisce "00001101-0000-1000-8000-00805f9b34fb" o 0x1101 nella forma breve.

const { bluetoothServiceClassId } = port.getInfo();

Esempio di caso d'uso: controllo dei Pixel Buds Pro

L'app web 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. È stata creata utilizzando le tecnologie delle app web progressive per un'esperienza di caricamento istantaneo e, facoltativamente, può essere installata 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 Pixel Buds Pro, ad esempio la cancellazione attiva del rumore, l'equalizzatore, il rilevamento in-ear e gli aggiornamenti del firmware.

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

Screenshot dell'app complementare web Pixel Buds Pro.
App complementare Pixel Buds Pro per il web.

Risorse

Riconoscimenti

Grazie a Reilly Grant, Thomas Steiner, Ben Morss e Vincent Scheib per le loro recensioni.