Port szeregowy przez Bluetooth w przeglądarce

François Beaufort
François Beaufort

Interfejs Web Bluetooth API i Web Serial API umożliwiają aplikacjom internetowym komunikację odpowiednio z urządzeniami Bluetooth Low Energy (BLE) i urządzeniami szeregowymi. Chociaż wielu programistów internetowych już używa tych interfejsów API w osiągnięciu sukcesu, rośnie również zapotrzebowanie na obsługę urządzeń z klasyczną wersją Bluetooth.

Obecnie interfejs Web Serial API obsługuje komunikację z usługami RFCOMM na sparowanych urządzeniach klasycznych z Bluetoothem, w tym za pomocą profilu portu szeregowego (SPP) w Chrome 117 na komputerach. Otwiera to przed programistami i użytkownikami nowe możliwości. Oto kilka rzeczywistych urządzeń, na których takie rozwiązanie może mieć wiele zalet:

  • Słuchawki Pixel Buds Pro i inne bezprzewodowe słuchawki douszne używają RFCOMM do zarządzania ustawieniami dźwięku i aktualizacjami oprogramowania.
  • Mobilne systemy w punkcie sprzedaży używają Bluetootha SPP do komunikacji z drukarkami paragonów.
  • Czytniki tagów RFID zwierząt hodowlanych korzystają z Bluetootha SPP do rejestrowania ruchu zwierząt.

Protokół RFCOMM Bluetooth

Przenieś się do ostatnich lat 90. Wystarczy umieścić urządzenie Palm Pilot w stacji, aby zsynchronizować kalendarz na następny dzień. Czy nie byłoby lepiej, gdyby można było to zrobić bezprzewodowo? Wraz z nowym Bluetoothem możesz pozbyć się tych chaotycznych kabli. Technologia bezprzewodowa to przyszłość! Jest tylko jeden problem: wszystkie istniejące elementy są przeznaczone do połączenia kablem RS-232. Dlatego Bluetooth korzysta z protokołu RFCOMM, aby zapewnić taki interfejs całemu oprogramowaniu i sprzętowi.

Nawet obecnie usługi RFCOMM są powszechnie używane w nowym i dotychczasowym sprzęcie. Umożliwia spełnienie określonych wymagań dotyczących czasu oczekiwania i przepustowości, których obecnie nie spełnia funkcja Bluetooth Low Energy. Dlatego opracowaliśmy integrację między Web Serial, interfejsem API do łączenia się z urządzeniami szeregowymi, oraz Bluetoothem, by umożliwić dostęp do starszych usług RFCOMM, zanim producenci w końcu przejdą na Bluetooth Low Energy, a deweloperzy będą mogli używać interfejsu Web Bluetooth API.

Zmiany interfejsu Web Serial API

Począwszy od Chrome 117 w wersji na komputery deweloperzy stron internetowych mogą teraz niezawodnie komunikować się ze sparowanymi urządzeniami klasycznymi z Bluetoothem, korzystając z usług RFCOMM przy użyciu interfejsu Web Serial API. Jest to możliwe dzięki tym zmianom w interfejsie Web Serial API:

  • Chrome wylicza teraz sparowane urządzenia Bluetooth, które udostępniają interfejs szeregowy za pomocą standardowego profilu portu szeregowego Bluetooth.
  • Chrome może teraz komunikować się z interfejsem szeregowym nawet wtedy, gdy system operacyjny nie utworzył węzła urządzenia przez emulowany port szeregowy.
  • Chrome może teraz komunikować się z usługą przez port inny niż szeregowy, która udostępnia interfejs szeregowy RFCOMM (zobacz niestandardowe identyfikatory klas usługi).

Informacje o korzystaniu z interfejsu Web Serial API znajdziesz w artykule Odczyt z portu szeregowego i zapisywanie na nim. W tym artykule zakładamy, że masz podstawową wiedzę o Bluetooth, a koncentrujesz się na zmianach w interfejsie szeregowym.

Jeśli nie określisz żadnych filtrów, wywołanie funkcji navigator.serial.requestPort() umożliwi użytkownikom wybranie portów szeregowych innych niż Bluetooth, portów szeregowych Bluetooth, które zostały już zmapowane, a także dowolnych niezmapowanych portów szeregowych dostępnych w standardowym profilu klasycznej wersji portu szeregowego Bluetooth.

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

Chociaż większość urządzeń udostępnia komunikację opartą na SPP za pomocą standardowego profilu portu szeregowego Bluetooth, niektóre korzystają z niestandardowych usług opartych na RFCOMM. Te urządzenia mają identyfikator klasy usługi spoza standardowego zakresu UUID Bluetooth.

Aby uzyskać dostęp do tych niestandardowych usług opartych na RFCOMM, musisz przekazać listę allowedBluetoothServiceClassIds firmie navigator.serial.requestPort(), jak pokazano w poniższym przykładzie.

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

Pamiętaj, że wszystkie identyfikatory klas usług korzystające z podstawowego identyfikatora UUID Bluetooth SIG (czyli wszystkie identyfikatory UUID zakończone na „-0000-1000-8000-00805f9b34fb”) są blokowane z wyjątkiem identyfikatora profilu portu szeregowego, ponieważ Chrome nie obsługuje klasycznych usług Bluetooth, takich jak audio i wideo.

Możesz też użyć bluetoothServiceClassIdklucza filtra przy wywołaniu navigator.serial.requestPort(), aby wyświetlić użytkownikowi listę filtrowanych portów szeregowych Bluetooth identyfikowanych przez identyfikatory klasy usługi. Zobacz ten przykład:

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

Jeśli port szeregowy jest częścią urządzenia Bluetooth, nowy klucz bluetoothServiceClassId zawierający identyfikator klasy usługi powiązany z kanałem RFCOMM, z którym jest podłączony port, jest dostępny w informacjach o porcie szeregowym zwróconych przez wywołanie port.getInfo(). Jeśli port szeregowy jest zmapowany, zwracany jest „00001101-0000-1000-8000-00805f9b34fb”. czyli 0x1101 w krótkiej formie.

const { bluetoothServiceClassId } = port.getInfo();

Przykład zastosowania: sterowanie słuchawkami Pixel Buds Pro

Aplikacja internetowa Pixel Buds Pro to nowa aplikacja internetowa, która umożliwia użytkownikom sterowanie słuchawkami Pixel Buds Pro z dowolnego urządzenia z przeglądarką. Jest ono oparte na technologii progresywnych aplikacji internetowych, które zapewnia błyskawiczne ładowanie. Można je opcjonalnie zainstalować razem z innymi aplikacjami systemowymi.

Aplikacja używa interfejsu Web Serial API do komunikacji ze słuchawkami Pixel Buds Pro. Dzięki temu użytkownicy mogą kontrolować różne ustawienia słuchawek Pixel Buds Pro, takie jak aktywna kontrola szumów, korektor, wykrywanie umieszczenia w uchu i aktualizacje oprogramowania.

Aby wypróbować aplikację Pixel Buds Pro Web Companion, otwórz stronę mypixelbuds.google.com na urządzeniu z ChromeOS (wkrótce też na innych platformach).

Zrzut ekranu przedstawiający aplikację Pixel Buds Pro Web Companion.
Aplikacja Web Companion dla słuchawek Pixel Buds Pro.

Zasoby

Poświadczenia

Dziękujemy Reilly Grant, Thomas Steiner, Ben Morss i Vincent Scheib za opinie. Baner powitalny: Mika Baumeister na kanale Unsplash.