Port szeregowy przez Bluetooth w przeglądarce

François Beaufort
François Beaufort

Interfejs Web Bluetooth API i Web Serial API pozwalają aplikacjom internetowym komunikować się odpowiednio z urządzeniami Bluetooth Low Energy (BLE) i urządzeniami szeregowymi. Chociaż wielu programistów internetowych używa już tych interfejsów API do osiągnięcia sukcesu, rośnie zapotrzebowanie na obsługę urządzeń z technologią Bluetooth Classic.

Teraz interfejs Web Serial API obsługuje komunikację z usługami RFCOMM na sparowanych urządzeniach Bluetooth Classic, w tym z profilem portu szeregowego (SPP) w Chrome 117 na komputerach. Otwiera to nowe możliwości zarówno dla programistów, jak i użytkowników. Oto kilka rzeczywistych urządzeń, na których można polegać:

  • 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 punktu sprzedaży komunikują się z drukarkami paragonów za pomocą technologii SPP Bluetooth.
  • Czytniki tagów RFID zwierząt hodowlanych korzystają z SPP Bluetooth do rejestrowania ruchów zwierząt.

Protokół Bluetooth RFCOMM

Przenieś się do późnych lat 90. Wystarczy włożyć urządzenie Palm Pilot do ładowarki, aby zsynchronizować kalendarz na kolejny dzień. Czy nie lepiej byłoby to zrobić bezprzewodowo? Ta nowa technologia „Bluetooth” pozwoli Ci pozbyć się plastikowych kabli. Bezprzewodowe to przyszłość! Jest tylko jeden problem. Wszystkie pozostałe są przystosowane do podłączenia kabla RS-232. Dlatego Bluetooth korzysta z protokołu komunikacji radiowej (RFCOMM) do udostępniania tego interfejsu całemu oprogramowaniu i sprzętowi.

Nawet dzisiaj usługi RFCOMM są powszechnie używane w nowym i istniejącym sprzęcie. Pozwala na spełnienie określonych wymagań dotyczących opóźnienia i przepustowości, które nie są jak dotąd spełnione przez Bluetooth Low Energy. Dlatego opracowaliśmy integrację między Web Serial, interfejsem API do łączenia się z urządzeniami szeregowymi oraz Bluetoothem, aby umożliwić dostęp do tych starszych usług RFCOMM, zanim producenci przejdą na Bluetooth Low Energy, a deweloperzy będą mogli korzystać z interfejsu Web Bluetooth API.

Zmiany interfejsu Web Serial API

Począwszy od Chrome 117 na komputerach deweloperzy stron internetowych mogą teraz niezawodnie komunikować się ze sparowanymi urządzeniami Bluetooth Classic za pomocą usług RFCOMM przy użyciu interfejsu Web Serial API. Było to możliwe dzięki tym aktualizacjom interfejsu Web Serial API:

  • Chrome zlicza teraz sparowane urządzenia Bluetooth, które udostępniają interfejs szeregowy, korzystając ze ustandaryzowanego profilu klasycznego profilu portu szeregowego Bluetooth.
  • Chrome może teraz komunikować się z interfejsem szeregowym, nawet jeśli system operacyjny nie utworzył węzła urządzenia przez emulowany port szeregowy.
  • Chrome może teraz komunikować się z usługą portu szeregowego, która udostępnia interfejs szeregowy RFCOMM (patrz niestandardowe identyfikatory klas usługi).

Informacje o tym, jak korzystać z interfejsu Web Serial API, znajdziesz w artykule Odczytywanie z portu szeregowego i zapisywanie na nim. W tym artykule zakładamy, że masz podstawową wiedzę o technologii Bluetooth i dotyczy to zmian w urządzeniu seryjnym zamiast Bluetooth.

Bez określania filtrów połączenie navigator.serial.requestPort() umożliwia użytkownikom wybranie portów szeregowych innych niż Bluetooth, portów szeregowych Bluetooth, które zostały już zmapowane, oraz dowolnych niezmapowanych portów szeregowych udostępnionych w ramach ustandaryzowanego profilu klasycznego portu szeregowego Bluetooth.

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

Większość urządzeń umożliwia komunikację opartą na SPP przez ustandaryzowany profil klasyczny portu szeregowego Bluetooth, niektóre z nich korzystają jednak z niestandardowych usług opartych na RFCOMM. Te urządzenia mają identyfikator klasy usługi spoza standardowego zakresu UUID Bluetootha.

Aby uzyskać dostęp do niestandardowych usług opartych na RFCOMM, musisz przekazać listę allowedBluetoothServiceClassIds do 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ługi korzystające z identyfikatora UUID Bluetooth SIG Base (czyli wszystkie identyfikatory UUID kończące się na „-0000-1000-8000-00805f9b34fb”) są blokowane z wyjątkiem identyfikatora profilu portu szeregowego, ponieważ Chrome nie obsługuje klasycznego interfejsu Bluetooth, takich jak usługi audio i wideo.

Możesz też użyć bluetoothServiceClassIdklucza filtra podczas wywoływania funkcji navigator.serial.requestPort(), aby wyświetlić użytkownikowi listę odfiltrowanych portów szeregowych Bluetooth zidentyfikowanych przez identyfikatory klas usługi. Zobacz przykład poniżej.

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, do którego jest podłączony ten port, jest dostępny w informacjach o porcie szeregowym zwracanych przez wywołanie port.getInfo(). Jeśli port szeregowy jest zmapowany, zwracany jest skrót „00001101-0000-1000-8000-00805f9b34fb” lub 0x1101.

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ą. Jest ono oparte na technologii progresywnych aplikacji internetowych, które zapewnia błyskawiczne wczytywanie, i opcjonalnie można je 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ą zarządzać różnymi ustawieniami słuchawek Pixel Buds Pro, takimi jak aktywna kontrola szumów, korekcja, wykrywanie w uchu i aktualizacje oprogramowania.

Aby wypróbować internetową aplikację towarzyszącą Pixel Buds Pro, otwórz stronę mypixelbuds.google.com na urządzeniu z ChromeOS (wkrótce także na innych platformach).

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

Zasoby

Poświadczenia

Dziękujemy Reilly Grantowi, Thomasowi Steinerowi, Benowi Morssowi i Vincentowi Scheibowi za recenzje. Baner powitalny autorstwa Mika Baumeister na kanale Unsplash.