Serial por Bluetooth na Web

Francisco 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 seriais, respectivamente. Embora muitos desenvolvedores da Web já estejam usando essas APIs para ter sucesso, também há uma demanda crescente por suporte para dispositivos Bluetooth Classic.

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

  • Os Pixel Buds Pro e outros fones de ouvido sem fio usam o RFCOMM para gerenciar as 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 tags RFID para animais usam Bluetooth SPP para registrar os movimentos dos animais.

O protocolo Bluetooth RFCOMM

Volte ao final dos anos 90. Basta colocar o Palm Pilot na estação para sincronizar sua agenda para o dia seguinte. Não seria bom se você pudesse fazer isso sem fio? Com essa nova tecnologia "Bluetooth", você pode se livrar de toda a bagunça dos cabos. A rede sem fio é o futuro! Há apenas um problema, tudo o que existe foi projetado para ser conectado com um cabo RS-232. Portanto, o Bluetooth usa o protocolo de comunicação de radiofrequência (RFCOMM, na sigla em inglês) para fornecer essa interface a todo o software e hardware existentes.

Até hoje, os serviços RFCOMM são amplamente utilizados em hardwares novos e existentes. Ele 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 a 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 eventualmente migrem para o Bluetooth Low Energy e que os desenvolvedores possam usar a API Web Bluetooth.

Mudanças na API Web Serial

A partir do Chrome 117 para computadores, os desenvolvedores da Web agora podem se comunicar de forma 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 os dispositivos Bluetooth pareados que expõem uma interface serial usando o perfil de porta serial clássico padronizado do Bluetooth.
  • O Chrome agora 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 os IDs de classe de serviço não padrão.

Você pode aprender a usar a API Web Serial no artigo Ler e gravar em uma porta serial. Este artigo pressupõe que você tenha conhecimento básico sobre Bluetooth e se concentra nas alterações de série por Bluetooth.

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

// 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 de porta serial Bluetooth clássico padronizado, 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 UUID padrão do Bluetooth.

Você precisa transmitir a lista de allowedBluetoothServiceClassIds para navigator.serial.requestPort() se quiser 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") estão bloqueados, exceto o ID de perfil de porta serial, porque o Chrome não oferece suporte a serviços Bluetooth clássicos, como áudio e vídeo.

Também é possível usar a chave de filtro bluetoothServiceClassId ao chamar navigator.serial.requestPort() para exibir 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 que os usuários controlem os Pixel Buds Pro em qualquer dispositivo com um navegador da Web. Ele é criado com as tecnologias de Progressive Web Apps para proporcionar uma experiência de carregamento instantâneo e pode ser instalado 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 da Web dos Pixel Buds Pro, acesse mypixelbuds.google.com em um dispositivo ChromeOS. Outras plataformas vão ser lançadas em breve.

Captura de tela do app complementar da Web dos Pixel Buds Pro.
App complementar da Web para os 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 (links em inglês).