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 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 Serial da Web oferece suporte à comunicação com serviços RFCOMM em dispositivos Bluetooth Classic pareados, incluindo o Perfil de porta serial (SPP) no Chrome 117 para computadores. Isso abre novas possibilidades para desenvolvedores e usuários da Web. 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 de ponto de venda móveis usam o SPP do Bluetooth para se comunicar com impressoras de recibo.
  • Os leitores de tags RFID de gado usam o SPP do Bluetooth para registrar os movimentos dos animais.

O protocolo RFCOMM do Bluetooth

Pense nos anos 90. Você coloca o Palm Pilot no carregador para sincronizar a agenda do dia seguinte. Não seria bom 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! Há apenas um problema: tudo que existe é projetado para se conectar com um cabo RS-232. Portanto, o Bluetooth usa o protocolo comunicação por radiofrequência (RFCOMM) 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. Ele permite atender a requisitos específicos de latência e largura de banda que não são atendidos pelo Bluetooth de baixa energia até o momento. Por isso, desenvolvemos uma integração entre a Web Serial, uma API para conexão com dispositivos seriais, e o Bluetooth, para permitir o acesso a esses serviços RFCOMM legados antes que os fabricantes migrem para o Bluetooth de baixa energia e 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 com dispositivos Bluetooth Classic pareados por meio de serviços RFCOMM usando a API Serial da Web. 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 de porta serial Bluetooth Classic padronizado.
  • Agora o Chrome pode se comunicar com a interface serial mesmo que o sistema operacional não tenha criado um nó de dispositivo por uma porta serial emulada.
  • O Chrome agora 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 por Bluetooth.

Sem especificar filtros, a chamada navigator.serial.requestPort() permite que os usuários selecionem portas seriais não Bluetooth, portas seriais Bluetooth que já foram mapeadas e qualquer porta serial não mapeada fornecida pelo perfil de porta serial Bluetooth Classic 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 pelo perfil de porta serial Bluetooth Classic 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 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 UUID de base do Bluetooth SIG (ou seja, todos os UUIDs que terminam em "-0000-1000-8000-00805f9b34fb") são bloqueados, exceto o ID do perfil da porta serial, porque 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 abaixo.

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 ao qual a porta está conectada estará disponível nas informações da porta serial retornadas ao chamar port.getInfo(). Se a porta serial estiver mapeada, ela vai 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 para 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 é criado usando tecnologias de Progressive Web Apps para 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 para Pixel Buds Pro, acesse mypixelbuds.google.com em um dispositivo ChromeOS (outras plataformas em breve).

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

Recursos

Agradecimentos

Agradecemos a Reilly Grant, Thomas Steiner, Ben Morss e Vincent Scheib pelas avaliações.