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 com muito sucesso, há uma demanda crescente por suporte a 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 Bluetooth SPP para se comunicar com impressoras de recibos.
- 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 cabos bagunçados. A conexão sem fio é 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 usados 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 podem se comunicar com dispositivos Bluetooth Classic pareados por meio de serviços RFCOMM usando a API Serial da Web. Isso foi possível com as seguintes atualizações na 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ê tenha conhecimento básico sobre Bluetooth e se concentra nas mudanças da serialização por Bluetooth.
Sem especificar filtros, a chamada navigator.serial.requestPort()
permite que os usuários selecionem portas seriais que não sã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.
É necessário 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 mostrar 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, detecção 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).
Recursos
Agradecimentos
Agradecemos a Reilly Grant, Thomas Steiner, Ben Morss e Vincent Scheib pelas avaliações.