Serial por Bluetooth na Web

François Beaufort
François Beaufort

A API Web Bluetooth e a API Web Serial permitem que os apps da Web se comuniquem com dispositivos Bluetooth de baixa energia (BLE) e dispositivos seriais, respectivamente. Embora muitos desenvolvedores Web já estejam usando essas APIs com grande sucesso, também há uma demanda crescente por compatibilidade com dispositivos Bluetooth Classic.

Agora, a API Web Serial oferece suporte à comunicação com serviços RFCOMM em dispositivos Bluetooth Classic pareados, incluindo o Perfil de porta serial (SPP, na sigla em inglês) no Chrome 117 em computadores. Isso abre novas possibilidades para desenvolvedores Web e usuários. Confira alguns dispositivos reais que podem se beneficiar disso:

  • Os Pixel Buds Pro e outros fones de ouvido sem fio usam RFCOMM para gerenciar configurações de áudio e atualizações de firmware.
  • Os sistemas móveis de ponto de venda usam o Bluetooth SPP para se comunicar com impressoras de recibos.
  • Os leitores de tag RFID do gado usam Bluetooth SPP para registrar os movimentos dos animais.

O protocolo Bluetooth RFCOMM

Volte aos anos 90. Basta colocar o seu Palm Pilot no compartimento para sincronizar o seu calendário para o dia seguinte. Não seria ótimo se você pudesse fazer isso sem fio? Com essa nova tecnologia "Bluetooth", você pode se livrar de todos os fios bagunçados. Redes sem fio são o futuro! Só há um problema: tudo o que existe foi projetado para se conectar com um cabo RS-232. Portanto, o Bluetooth usa o protocolo de comunicação com radiofrequência (RFCOMM, na sigla em inglês) para fornecer essa interface a todos os softwares e hardwares existentes.

Até hoje, os serviços RFCOMM são amplamente utilizados em hardwares novos e existentes. Ela permite atender a requisitos específicos de latência e largura de banda que ainda não foram atendidos pelo Bluetooth Low Energy. É por isso que desenvolvemos uma integração entre o Web Serial, uma API de conexão a dispositivos seriais, e o Bluetooth, para permitir o acesso a esses serviços RFCOMM legados antes que os fabricantes finalmente migrem para o Bluetooth Low Energy, e os desenvolvedores possam usar a API Web Bluetooth.

Mudanças na API Web Serial

A partir do Chrome 117 para computadores, os desenvolvedores Web podem se comunicar de maneira confiável com dispositivos Bluetooth Classic pareados por serviços RFCOMM usando a API Web Serial. Isso foi possível graças às seguintes atualizações da API Web Serial:

  • O Chrome agora enumera dispositivos Bluetooth pareados que expõem uma interface serial usando o perfil padronizado de porta serial clássica do Bluetooth.
  • Agora o Chrome pode se comunicar com a interface serial mesmo que o sistema operacional não tenha criado um nó de dispositivo especificamente por uma porta serial emulada.
  • Agora o Chrome pode se comunicar com um serviço de porta não serial que expõe uma interface serial RFCOMM. Consulte IDs de classe de serviço não padrão.

Saiba como usar a API Web Serial no artigo Ler e gravar em uma porta serial. Este artigo pressupõe que você tem um conhecimento básico sobre Bluetooth e foca nas mudanças em série sobre Bluetooth.

Sem especificar nenhum filtro, chamar navigator.serial.requestPort() permite que os usuários selecionem portas seriais não Bluetooth, portas seriais Bluetooth já mapeadas e quaisquer portas seriais não mapeadas fornecidas pelo perfil de porta serial clássico do Bluetooth clássico.

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

Embora a maioria dos dispositivos exponha a comunicação baseada em SPP por meio do perfil padronizado de porta serial clássica Bluetooth, alguns usam serviços personalizados baseados em RFCOMM. Esses dispositivos têm um ID de classe de serviço que não está no intervalo padrão de UUID do Bluetooth.

Você precisa transmitir a lista allowedBluetoothServiceClassIds para navigator.serial.requestPort() para acessar esses serviços personalizados baseados em RFCOMM, conforme mostrado no exemplo abaixo.

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

Todos os IDs de classe de serviço que usam o Bluetooth SIG Base UUID (ou seja, todos os UUIDs que terminam em "-0000-1000-8000-00805f9b34fb") são bloqueados, exceto o ID do perfil de porta serial, já que o Chrome não oferece suporte a serviços do Bluetooth Classic, como áudio e vídeo.

Também é possível usar a chave de filtro bluetoothServiceClassId ao chamar navigator.serial.requestPort() para solicitar ao usuário uma lista de portas seriais Bluetooth filtradas identificadas por IDs de classe de serviço. Veja o exemplo a seguir.

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 a porta serial fizer parte de um dispositivo Bluetooth, uma nova chave bluetoothServiceClassId contendo o ID da classe de serviço associado ao canal RFCOMM a que a porta está conectada estará disponível nas informações da porta serial retornadas chamando port.getInfo(). Se a porta serial estiver mapeada, ela retornará "00001101-0000-1000-8000-00805f9b34fb" ou 0x1101 na forma abreviada.

const { bluetoothServiceClassId } = port.getInfo();

Exemplo de caso de uso: controlar os Pixel Buds Pro

O app complementar da Web dos Pixel Buds Pro é um novo app da Web que permite aos usuários controlar os Pixel Buds Pro em qualquer dispositivo com um navegador da Web. Ele foi criado com tecnologias de Progressive Web Apps para oferecer uma experiência de carregamento instantâneo e pode, opcionalmente, ser instalado junto com outros apps do sistema operacional.

O app usa a API Web Serial para se comunicar com os Pixel Buds Pro. Isso permite que os usuários controlem várias configurações nos Pixel Buds Pro, como controle ativo de ruído, equalizador, sensor no ouvido e atualizações de firmware.

Para testar o app complementar Web Pixel Buds Pro, acesse mypixelbuds.google.com em um dispositivo ChromeOS (outras plataformas serão adicionadas em breve).

Captura de tela do app Web Companion Pixel Buds Pro.
App complementar da Web dos Pixel Buds Pro.

Recursos

Agradecimentos

Agradecemos a Reilly Grant, Thomas Steiner, Ben Morss e Vincent Scheib pelas avaliações. Imagem principal de Mika Baumeister no Unsplash.