Port szeregowy przez Bluetooth w przeglądarce

François Beaufort
François Beaufort

Interfejsy Web Bluetooth APIWeb Serial API umożliwiają aplikacjom internetowym komunikację odpowiednio z urządzeniami Bluetooth Low Energy (BLE) i urządzeniami szeregowymi. Wielu programistów korzysta już z tych interfejsów API, ale rośnie też zapotrzebowanie na obsługę urządzeń Bluetooth Classic.

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. To otwiera nowe możliwości zarówno dla programistów, jak i użytkowników. Oto kilka przykładów urządzeń, które mogą korzystać z tych funkcji:

  • Słuchawki Pixel Buds Pro i inne bezprzewodowe słuchawki używają RFCOMM do zarządzania ustawieniami dźwięku i aktualizacjami oprogramowania.
  • Mobilne systemy sprzedaży detalicznej używają protokołu Bluetooth SPP do komunikacji z drukarkami paragonów.
  • Czytniki tagów RFID dla zwierząt gospodarskich używają protokołu Bluetooth SPP do rejestrowania ruchów zwierząt.

Protokół RFCOMM Bluetooth

Wróć do końca lat 90. Wystarczy umieścić urządzenie Palm Pilot w stacji, aby zsynchronizować kalendarz na następny dzień. Czy nie byłoby przyjemniej, gdyby można było to zrobić bezprzewodowo? Dzięki nowej technologii „Bluetooth” możesz pozbyć się wszystkich tych plączących się kabli. Technologia bezprzewodowa to przyszłość! Jest tylko jeden problem: wszystkie dostępne urządzenia są przeznaczone do łączenia za pomocą kabla RS-232. Bluetooth używa protokołu Radio Frequency Communication (RFCOMM), aby udostępnić ten interfejs wszystkim istniejącym programom i urządzeniom.

Do dziś usługi RFCOMM są powszechnie używane w nowym i dotychczasowym sprzęcie. Umożliwia ona spełnienie określonych wymagań dotyczących opóźnienia i przepustowości, których Bluetooth Low Energy nie spełnia. Dlatego opracowaliśmy integrację między interfejsem Web Serial API do łączenia z urządzeniami szeregowymi a Bluetooth, aby umożliwić dostęp do tych starszych usług RFCOMM, zanim producenci przejdą na Bluetooth Low Energy i deweloperzy będą mogli zamiast tego korzystać z interfejsu Web Bluetooth API.

Zmiany w interfejsie Web Serial API

Od wersji Chrome 117 na komputery deweloperzy internetowi mogą niezawodnie komunikować się z sparowanymi urządzeniami Bluetooth Classic za pomocą usług RFCOMM przy użyciu interfejsu Web Serial API. Umożliwiły to te zmiany w Web Serial API:

  • Chrome wylicza teraz sparowane urządzenia Bluetooth, które udostępniają interfejs szeregowy za pomocą standardowego profilu portu szeregowego Bluetooth Classic.
  • Chrome może teraz komunikować się z interfejsem szeregowym, nawet jeśli system operacyjny nie utworzył węzła urządzenia za pomocą emulowanego portu szeregowego.
  • Chrome może teraz komunikować się z usługą niebędącą portem szeregowym, która udostępnia interfejs szeregowy RFCOMM (patrz niestandardowe identyfikatory klasy 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ę na temat Bluetooth. Omawiamy w nim zmiany dotyczące komunikacji szeregowej przez Bluetooth.

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ę SPP za pomocą standardowego profilu portu szeregowego Bluetooth Classic, niektóre z nich korzystają z niestandardowych usług na podstawie RFCOMM. Te urządzenia mają identyfikator klasy usługi, który nie mieści się w standardowym zakresie identyfikatorów UUID Bluetootha.

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

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 klasy usługi, które używają podstawowego identyfikatora UUID Bluetooth SIG (czyli wszystkie UUID, które kończą się na „-0000-1000-8000-00805f9b34fb”), są zablokowane, z wyjątkiem identyfikatora profilu portu szeregowego, ponieważ Chrome nie obsługuje usług Bluetooth Classic, takich jak audio i wideo.

Możesz też użyć klucza filtra bluetoothServiceClassId podczas wywołania funkcji navigator.serial.requestPort(), aby wyświetlić użytkownikowi listę przefiltrowanych portów szeregowych Bluetooth zidentyfikowanych za pomocą identyfikatorów 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 połączony port, jest dostępny w informacjach o porcie szeregowym zwracanych przez wywołanie funkcji port.getInfo(). Jeśli port szeregowy jest mapowany, zwraca wartość „00001101-0000-1000-8000-00805f9b34fb” lub 0x1101 w formie skróconej.

const { bluetoothServiceClassId } = port.getInfo();

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

Internetowa aplikacja towarzysząca 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ą internetową. Jest ona oparta na technologiach progresywnych aplikacji internetowych, co zapewnia błyskawiczne wczytywanie. Można ją opcjonalnie zainstalować obok innych aplikacji systemowych.

Aplikacja komunikuje się ze słuchawkami Pixel Buds Pro za pomocą interfejsu Web Serial API. 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 czy aktualizacje oprogramowania układowego.

Aby wypróbować internetową aplikację towarzyszącą Pixel Buds Pro, otwórz stronę mypixelbuds.google.com na urządzeniu z ChromeOS (inne platformy będą dostępne wkrótce).

Zrzut ekranu aplikacji internetowej Pixel Buds Pro
Aplikacja internetowa Pixel Buds Pro.

Zasoby

Poświadczenia

Dziękujemy Reilly Grant, Thomas Steiner, Ben Morss i Vincent Scheib za opinie.