Seriale tramite Bluetooth sul Web

Francesco Beaufort
François Beaufort

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

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

  • 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 il Bluetooth SPP per comunicare con le stampanti per ricevute.
  • I lettori di tag RFID per bestiame utilizzano il Bluetooth SPP per registrare i movimenti degli animali.

Protocollo Bluetooth RFCOMM

Torna ai recenti anni '90. È sufficiente posizionare il Palm Pilot nella sua base di appoggio per sincronizzare il calendario per il giorno successivo. Non sarebbe bello se potessi farlo in modalità wireless? Grazie alla nuova tecnologia "Bluetooth", puoi sbarazzarti di tutti i cavi disordinati. Il wireless è il futuro! C'è un solo problema, tutto quello che esiste è stato progettato per essere collegato con un cavo RS-232. Di conseguenza, il Bluetooth utilizza il protocollo RFCOMM (Radio Response Communication) per fornire quell'interfaccia a tutti i software e l'hardware esistenti.

Ancora oggi, i servizi RFCOMM sono ampiamente utilizzati nell'hardware nuovo ed esistente. Consente di soddisfare requisiti specifici di latenza e larghezza di banda che finora non sono stati 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 precedenti prima che i produttori eseguano 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 su 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 possibile grazie ai seguenti aggiornamenti all'API Web Serial:

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

Scopri come utilizzare l'API Web Serial nell'articolo Lettura da e scrittura su una porta seriale. Questo articolo presuppone che tu possieda una conoscenza di base del Bluetooth e si concentra sulle modifiche 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 standardizzato 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 espongono la comunicazione basata su SPP tramite il profilo standardizzato della porta seriale Bluetooth Classic, alcuni utilizzano servizi basati su RFCOMM personalizzati. 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") sono bloccati, ad eccezione dell'ID profilo porta seriale, poiché Chrome non supporta i servizi Bluetooth Classic come audio e video.

Puoi usare il bluetoothServiceClassIdtasto filtro anche durante la chiamata a navigator.serial.requestPort() per chiedere 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 della porta seriale restituite chiamando port.getInfo() è disponibile una nuova chiave bluetoothServiceClassId contenente l'ID della 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 in formato breve.

const { bluetoothServiceClassId } = port.getInfo();

Esempio di caso d'uso: controlla 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 dotato di browser web. È sviluppata utilizzando le tecnologie delle app web progressive per garantire un'esperienza di caricamento istantaneo e può essere facoltativamente installata insieme ad altre app del sistema operativo.

L'app utilizza l'API Web Serial per comunicare con i Pixel Buds Pro. Ciò consente agli utenti di controllare varie impostazioni dei 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 web Pixel Buds Pro, visita la pagina mypixelbuds.google.com su un dispositivo ChromeOS (a breve saranno disponibili altre piattaforme).

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

Risorse

Attestazioni

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