Последовательный порт через Bluetooth в Интернете

Франсуа Бофор
François Beaufort

Web Bluetooth API и Web Serial API позволяют веб-приложениям взаимодействовать с устройствами Bluetooth Low Energy (BLE) и последовательными устройствами соответственно. Хотя многие веб-разработчики уже успешно используют эти API, растет также спрос на поддержку устройств Bluetooth Classic.

Теперь API Web Serial поддерживает связь со службами RFCOMM на сопряженных устройствах Bluetooth Classic, включая профиль последовательного порта (SPP) в Chrome 117 на настольном компьютере. Это открывает новые возможности как для веб-разработчиков, так и для пользователей. Вот некоторые реальные устройства, которые могут извлечь из этого пользу:

  • Pixel Buds Pro и другие беспроводные наушники используют RFCOMM для управления настройками звука и обновлениями прошивки.
  • Мобильные системы торговых точек используют Bluetooth SPP для связи с принтерами чеков.
  • Считыватели RFID-меток для домашнего скота используют Bluetooth SPP для регистрации перемещений животных.

Протокол Bluetooth RFCOMM

Вернитесь в конец 90-х. Вы просто кладете Palm Pilot на подставку, чтобы синхронизировать календарь на следующий день. Было бы неплохо, если бы вы могли делать это по беспроводной сети, не правда ли? С помощью этой новой технологии Bluetooth вы сможете избавиться от всех этих запутанных проводов. Беспроводная связь – это будущее! Есть только одна проблема, все что есть рассчитано на подключение по кабелю RS-232. Таким образом, Bluetooth использует протокол радиочастотной связи (RFCOMM) для предоставления этого интерфейса всему существующему программному и аппаратному обеспечению.

Даже сегодня сервисы RFCOMM широко используются в новом и существующем оборудовании. Это позволяет удовлетворить определенные требования к задержке и пропускной способности, которые до сих пор не удовлетворялись Bluetooth Low Energy. Вот почему мы разработали интеграцию между Web Serial, API для подключения к последовательным устройствам, и Bluetooth, чтобы обеспечить доступ к этим устаревшим службам RFCOMM до того, как производители в конечном итоге перейдут на Bluetooth Low Energy, а разработчики смогут вместо этого использовать API Web Bluetooth.

Изменения API веб-сериалов

Начиная с Chrome 117 для настольных компьютеров, веб-разработчики теперь могут надежно взаимодействовать с сопряженными устройствами Bluetooth Classic через службы RFCOMM с использованием Web Serial API. Это стало возможным благодаря следующим обновлениям Web Serial API:

  • Chrome теперь перечисляет сопряженные устройства Bluetooth, которые предоставляют последовательный интерфейс, используя стандартизированный профиль последовательного порта Bluetooth Classic.
  • Chrome теперь может взаимодействовать с последовательным интерфейсом, даже если операционная система не создала узел устройства специально через эмулируемый последовательный порт.
  • Chrome теперь может взаимодействовать со службой, не являющейся последовательным портом, которая предоставляет последовательный интерфейс RFCOMM (см . нестандартные идентификаторы классов обслуживания ).

О том, как использовать Web Serial API, можно узнать в статье Чтение и запись в последовательный порт . В этой статье предполагается, что у вас есть базовые знания о Bluetooth, и основное внимание уделяется изменениям в последовательном интерфейсе через Bluetooth.

Без указания каких-либо фильтров вызов navigator.serial.requestPort() позволяет пользователям выбирать последовательные порты, отличные от Bluetooth, последовательные порты Bluetooth, которые уже сопоставлены, и любые несопоставленные последовательные порты, предоставляемые стандартизированным профилем классического последовательного порта Bluetooth.

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

Хотя большинство устройств предоставляют связь на основе SPP через стандартизированный профиль последовательного порта Bluetooth Classic, некоторые используют специальные службы на основе RFCOMM. Эти устройства имеют идентификатор класса обслуживания, который не входит в стандартный диапазон UUID Bluetooth.

Вам необходимо передать список allowedBluetoothServiceClassIds в navigator.serial.requestPort() для доступа к этим пользовательским службам на основе RFCOMM, как показано в примере ниже.

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

Обратите внимание, что все идентификаторы классов обслуживания, использующие базовый UUID Bluetooth SIG (то есть все UUID, оканчивающиеся на «-0000-1000-8000-00805f9b34fb»), блокируются, за исключением идентификатора профиля последовательного порта, поскольку Chrome не поддерживает классические службы Bluetooth, такие как как аудио и видео.

Вы также можете использовать ключ фильтра bluetoothServiceClassId при вызове navigator.serial.requestPort() , чтобы предложить пользователю список отфильтрованных последовательных портов Bluetooth, идентифицированных идентификаторами классов обслуживания. См. пример ниже.

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

Если последовательный порт является частью устройства Bluetooth, новый ключ bluetoothServiceClassId , содержащий идентификатор класса обслуживания, связанный с каналом RFCOMM, к которому подключен порт, доступен в информации последовательного порта, возвращаемой вызовом port.getInfo() . Если последовательный порт сопоставлен, он возвращает «00001101-0000-1000-8000-00805f9b34fb» или 0x1101 в его короткой форме.

const { bluetoothServiceClassId } = port.getInfo();

Пример использования: управление Pixel Buds Pro

Приложение Pixel Buds Pro Web Companion — это новое веб-приложение, которое позволяет пользователям управлять своими Pixel Buds Pro с любого устройства с помощью веб-браузера. Он создан с использованием технологий Progressive Web Apps для мгновенной загрузки и может быть установлен вместе с другими приложениями операционной системы.

Приложение использует Web Serial API для связи с Pixel Buds Pro. Это позволяет пользователям управлять различными настройками своих Pixel Buds Pro, такими как активное управление шумом, эквалайзер, обнаружение наушников и обновления прошивки.

Чтобы попробовать приложение Pixel Buds Pro Web Companion, посетите mypixelbuds.google.com на устройстве ChromeOS (скоро появятся и другие платформы).

Снимок экрана приложения Pixel Buds Pro Web Companion.
Приложение Pixel Buds Pro Web Companion.

Ресурсы

Благодарности

Спасибо Рейли Гранту, Томасу Штайнеру, Бену Морсу и Винсенту Шейбу за их обзоры. Героическое изображение Мика Баумайстера на Unsplash .