Bluetooth
Procure dispositivos Bluetooth Low Energy próximos, inspecione a intensidade do sinal e os dados de anúncio, navegue pelos serviços e características GATT e visualize dados em tempo real dos periféricos ligados.
Visão geral
A ferramenta Bluetooth utiliza o framework CoreBluetooth da Apple para atuar como um central BLE (Bluetooth Low Energy) e procurar periféricos próximos. Exibe todos os dispositivos descobertos, juntamente com a intensidade do sinal em tempo real (RSSI), dados de anúncio e estado da ligação. Pode ligar-se a periféricos conectáveis para navegar pelos seus serviços e características GATT, ler valores, subscrever notificações e inspecionar dados do fabricante.
Índice
- Ecrã de Visão Geral
- Ecrã de Detalhes do Dispositivo
- Permissões e Requisitos
- Detalhes Técnicos
- Notas e Limitações
- Resolução de Problemas
Ecrã de Visão Geral
O ecrã de visão geral é a vista principal da ferramenta Bluetooth. Contém uma barra de pesquisa, um cartão de estado com controlos de pesquisa e uma lista rolável de dispositivos descobertos.
Barra de Pesquisa
Um campo de texto no topo do ecrã filtra a lista de dispositivos pelo nome. Ao escrever uma consulta, a lista é imediatamente reduzida aos dispositivos cujo nome anunciado ou nome do periférico contém o texto pesquisado (sem distinção entre maiúsculas e minúsculas). Aparece um botão para limpar quando o campo não está vazio.
Cartão de Estado do Bluetooth
O cartão de estado exibe:
- Etiqueta Estado do Bluetooth com o estado atual do rádio, codificado por cores:
- Ativo (verde) — o Bluetooth está ativo e pronto para pesquisar.
- Desligado (vermelho) — o rádio Bluetooth está desligado.
- Não autorizado (laranja) — o utilizador negou permissão Bluetooth para a app.
- Não suportado (vermelho) — o hardware do dispositivo não suporta Bluetooth.
- Desconhecido / A reiniciar (cinzento) — o sistema ainda está a determinar o estado do Bluetooth.
- Um botão de controlo de pesquisa (visível apenas quando o Bluetooth está Ativo):
- Parar Pesquisa (vermelho) — para a pesquisa ativa.
- Iniciar Pesquisa (verde) — inicia a pesquisa de periféricos próximos.
A pesquisa inicia automaticamente quando a ferramenta é aberta e o Bluetooth está ativo.
Lista de Dispositivos
Os dispositivos descobertos aparecem numa lista rolável, ordenada por RSSI (sinal mais forte primeiro). A lista atualiza em tempo real à medida que novos dispositivos são encontrados ou os dispositivos existentes atualizam os seus dados de anúncio.
Linha de Dispositivo
Cada dispositivo é apresentado como um cartão contendo:
- Um ícone Bluetooth dentro de um emblema circular. Um arco branco sobrepõe o círculo, preenchendo proporcionalmente à intensidade do sinal do dispositivo (0–100%).
- Nome do dispositivo — o nome local anunciado ou nome do periférico. Dispositivos que não transmitem nome aparecem como
[No Name]. - RSSI — a intensidade do sinal recebido em dB (ex.:
RSSI: -43 dB). - Um indicador de estado no canto inferior esquerdo, mostrando um dos seguintes:
- Ligado (verde) — o dispositivo está atualmente ligado.
- Conectável (azul) — o dispositivo anuncia que aceita ligações.
- Serviços: N — o número de serviços GATT anunciados pelo dispositivo (mostrado quando existem serviços mas o dispositivo ainda não está ligado).
- (sem etiqueta) — o dispositivo não é conectável e não anuncia serviços.
- Um indicador à direita:
- Um ícone verde de visto se o dispositivo estiver ligado.
- Um chevron (
>) se o dispositivo for conectável (toque para abrir detalhes). - Texto Não Conectável se o dispositivo não aceitar ligações.
Toque em qualquer linha de dispositivo para navegar para o Ecrã de Detalhes do Dispositivo.
Estados Vazios
A visão geral mostra estados vazios contextuais:
- A pesquisar — um ícone de lupa com animação de carregamento enquanto a pesquisa inicial está em progresso e ainda não foram encontrados dispositivos.
- Bluetooth desligado / Não suportado — um ícone Bluetooth riscado com o estado atual e um convite para ativar o Bluetooth.
- Pesquisa Parada — um ícone Bluetooth com um botão Iniciar Pesquisa quando o Bluetooth está ligado mas a pesquisa foi parada manualmente e não há dispositivos na lista.
Ecrã de Detalhes do Dispositivo
Ao tocar numa linha de dispositivo abre-se um ecrã dedicado de detalhes. O ecrã está dividido numa área de cabeçalho, um indicador de intensidade do sinal e três separadores de conteúdo.
Cabeçalho e Ligação
O cabeçalho contém:
- Um botão de voltar (
< Devices) para regressar ao ecrã de visão geral. - O nome do dispositivo exibido em destaque.
- Um indicador de estado da ligação — um ponto colorido ao lado de uma etiqueta:
- Ligado (verde)
- A ligar (laranja)
- Desligado (vermelho)
- A desligar (laranja)
- Um botão Ligar / Desligar (apenas mostrado para dispositivos conectáveis):
- Ligar (azul) — inicia uma ligação BLE. Um spinner de carregamento é mostrado enquanto a ligação está a ser estabelecida.
- A ligar... (azul, desativado) — exibido durante a tentativa de ligação.
- Desligar (vermelho) — termina a ligação ativa.
Quando a ligação é estabelecida, a ferramenta descobre automaticamente todos os serviços GATT e as suas características. Características legíveis são lidas imediatamente, e características que suportam notificações são subscritas automaticamente.
Indicador de Intensidade do Sinal
A secção de intensidade do sinal fornece uma visão detalhada e em tempo real do sinal rádio do dispositivo:
-
Indicador circular — um arco que se preenche de 0% a 100% com um gradiente angular (vermelho a laranja a amarelo a verde). O valor atual do RSSI em dBm é exibido no centro.
-
Distância aproximada — uma estimativa legível derivada do valor RSSI:
Intervalo RSSI Etiqueta -30 a -50 dBm Muito Perto -51 a -65 dBm Perto -66 a -80 dBm Médio -81 a -90 dBm Longe Abaixo de -90 dBm Muito Longe -
Barras de sinal — um indicador de 5 barras que se preenche com base na percentagem da intensidade do sinal.
-
Qualidade do sinal — uma etiqueta de texto: Excelente (>80%), Boa (>60%), Razoável (>40%), Fraca (>20%) ou Muito Fraca (<=20%).
-
RSSI — o valor bruto em dBm.
-
Potência TX — o nível de potência de transmissão em dBm, se o dispositivo o anunciar. Este valor representa a intensidade do sinal a 1 metro do transmissor e pode ser usado para estimar a distância.
-
Histórico do Sinal — um gráfico de barras deslizante com as últimas 20 leituras de RSSI, codificado por cores (verde >= -60, amarelo >= -75, vermelho < -75). Ajuda a visualizar a estabilidade do sinal ao longo do tempo.
Separador de Informação
O separador Informação exibe informações gerais sobre o dispositivo, organizadas em linhas chave-valor:
| Campo | Descrição |
|---|---|
| Nome | O nome anunciado ou do periférico (ou [No Name]). |
| Identificador | O UUID do periférico atribuído pelo CoreBluetooth. Este é um identificador local e não é o endereço MAC real do dispositivo. |
| RSSI | Intensidade do sinal recebido atual em dB. |
| Potência TX | Potência de transmissão em dBm (apenas mostrado se anunciada pelo dispositivo). |
| Conectável | Se o dispositivo aceita ligações BLE (Sim / Não). |
| Estado | Estado atual da ligação (Ligado, A ligar, Desligado, A desligar). |
| Descoberto | Timestamp quando o dispositivo foi visto pela primeira vez durante esta sessão de pesquisa. |
| Última Atualização | Timestamp da atualização mais recente do anúncio ou RSSI. |
Abaixo das linhas chave-valor, aparecem duas secções adicionais quando o dispositivo fornece os dados correspondentes:
- Serviços Anunciados — uma lista de UUIDs de serviços GATT que o dispositivo inclui nos seus pacotes de anúncio. Serviços padrão conhecidos são mostrados com o seu nome legível ao lado do UUID (ex.:
180F (Battery Service),180A (Device Information)). Veja Serviços Reconhecidos para a lista completa. - Dados do Fabricante — os dados brutos específicos do fabricante do anúncio, exibidos como uma string hexadecimal. Os dois primeiros bytes codificam o identificador da empresa Bluetooth SIG (little-endian).
Separador de Serviços
O separador Serviços está disponível apenas quando o dispositivo está ligado. Mostra a árvore completa de serviços e características GATT descobertos durante a ligação.
Cada serviço é exibido como uma linha expansível:
- Um ícone colorido indicando a categoria do serviço:
- Azul — Serviços genéricos (Generic Access
1800, Generic Attribute1801) - Verde — Battery Service (
180F) - Laranja — Device Information (
180A) - Roxo — Serviços específicos do fornecedor (UUIDs começando com
FE) - Cinzento — Outros / serviços desconhecidos
- Azul — Serviços genéricos (Generic Access
- O nome do serviço (resolvido a partir do UUID para serviços conhecidos) e a string UUID bruta.
- Um emblema mostrando o número de características pertencentes a esse serviço.
- Um chevron que roda quando o serviço está expandido.
Serviços Reconhecidos
| UUID | Nome do Serviço |
|---|---|
1800 | Generic Access |
1801 | Generic Attribute |
180A | Device Information |
180F | Battery Service |
1812 | HID (Human Interface Device) |
1813 | Scan Parameters |
1819 | Location and Navigation |
181C | User Data |
FE59 | Apple Notification Center |
Expandir um serviço revela as suas características. Cada linha de característica mostra:
- Um ícone colorido baseado na propriedade principal (roxo para leitura+escrita, azul para só leitura, verde para só escrita, laranja para só notificação, cinzento caso contrário).
- O nome da característica (resolvido a partir do UUID para características GATT conhecidas) e a string UUID bruta.
- Etiquetas de propriedade — pequenas etiquetas coloridas para cada propriedade suportada:
- Read (azul) — o valor pode ser lido sob demanda.
- Write (verde) — o valor pode ser escrito com confirmação.
- Write No Response (verde claro) — o valor pode ser escrito sem confirmação.
- Notify (laranja) — a característica pode enviar atualizações ao central.
- Indicate (laranja claro) — como Notify mas com confirmação.
- Auth (roxo) — a característica requer escritas assinadas autenticadas.
- Um botão olho para alternar (mostrado quando a característica tem um valor). Ao tocar, revela o valor atual da característica, exibido em múltiplos formatos:
- Hex — a sequência bruta de bytes.
- String — uma interpretação UTF-8, se os bytes formarem texto válido.
- Numérico — interpretação automática baseada no comprimento dos bytes:
- 1 byte: valor UInt8
- 2 bytes: valor UInt16
- 4 bytes: valor UInt32 e valor Float
Características Reconhecidas
| UUID | Nome da Característica |
|---|---|
2A00 | Device Name |
2A01 | Appearance |
2A04 | Peripheral Preferred Connection Parameters |
2A05 | Service Changed |
2A19 | Battery Level |
2A23 | System ID |
2A24 | Model Number String |
2A25 | Serial Number String |
2A26 | Firmware Revision String |
2A27 | Hardware Revision String |
2A28 | Software Revision String |
2A29 | Manufacturer Name String |
2A2A | IEEE 11073-20601 Regulatory Certification Data List |
2A50 | PnP ID |
Separador de Dados
O separador Dados mostra dados interpretados em tempo real do dispositivo ligado. Se o dispositivo não estiver ligado, é exibida uma mensagem com um botão Ligar (para dispositivos conectáveis) ou uma mensagem informativa.
Quando ligado, o separador mostra até três cartões:
-
Dados do Fabricante — a carga útil específica do fabricante do anúncio:
- ID do Fabricante — resolvido a partir dos dois primeiros bytes (little-endian) dos dados do fabricante. IDs conhecidos incluem Apple (
0x004C), Microsoft (0x0006), Samsung (0x0075), Xiaomi (0x038F) e Bosch (0x01D7). IDs desconhecidos são mostrados em hex (ex.:ID: 0x1234). - Dados Brutos — o despejo hexadecimal completo dos bytes dos dados do fabricante.
- Visualização de bytes — um gráfico de barras horizontal onde cada barra representa um byte. A altura da barra é proporcional ao valor do byte (0–255), fornecendo uma impressão digital visual rápida dos dados.
- ID do Fabricante — resolvido a partir dos dois primeiros bytes (little-endian) dos dados do fabricante. IDs conhecidos incluem Apple (
-
Valores das Características — uma lista de todas as características que têm um valor legível. Cada entrada mostra:
- O nome da característica (ou UUID se desconhecido).
- O valor interpretado (como byte, UInt16, UInt32/Float, string UTF-8 ou hex, dependendo do comprimento dos dados).
- Um pequeno gráfico de barras de bytes para valores até 8 bytes, com barras codificadas por cor conforme magnitude (azul < 30%, verde < 60%, amarelo < 80%, vermelho >= 80%).
- Os valores atualizam automaticamente para características que suportam notificações.
-
Informação da Ligação — metadados de tempo e sinal:
- Descoberto — a hora em que o dispositivo foi visto pela primeira vez, com o tempo decorrido desde a descoberta.
- Última Atualização — a hora da atualização de dados mais recente, com Potência TX se disponível.
Permissões e Requisitos
- Permissão Bluetooth — o CoreBluetooth requer que o utilizador conceda acesso ao Bluetooth. Se a permissão for negada, o Lirum mostra um ecrã de permissões com um botão para abrir as Definições do iOS para que o utilizador possa reativar o acesso.
- Rádio Bluetooth — se o Bluetooth estiver desligado, a ferramenta permanece acessível mas os controlos de pesquisa ficam desativados e um estado vazio convida o utilizador a ligar o Bluetooth. Neste caso, não é mostrado um pedido de permissão.
- A permissão Bluetooth é gerida pelo sistema; não existe um botão explícito para "pedir permissão". O pedido do sistema aparece automaticamente na primeira vez que o CoreBluetooth é inicializado.
Detalhes Técnicos
- A ferramenta atua como um Central BLE usando
CBCentralManager. Pesquisa todos os periféricos próximos (scanForPeripherals(withServices: nil)), ou seja, descobre dispositivos independentemente dos serviços que anunciem. - Os valores de RSSI (Indicador de Intensidade do Sinal Recebido) tipicamente variam entre -30 dBm (muito forte, dispositivo muito próximo) e -100 dBm (muito fraco, dispositivo distante ou obstruído). A ferramenta normaliza este intervalo para uma escala de 0–100% usando a fórmula:
(RSSI + 100) / 70. - Para dispositivos ligados, o RSSI é consultado a cada 2 segundos usando
readRSSI(). Um filtro de ruído suprime atualizações inferiores a 2 dB para reduzir tremores visuais. - Na ligação, a ferramenta chama
discoverServices(nil)para enumerar todos os serviços GATT, depoisdiscoverCharacteristics(nil, for:)em cada serviço. Características legíveis são lidas automaticamente viareadValue(for:), e características com capacidade de notificação são subscritas viasetNotifyValue(true, for:). - A Potência TX (
CBAdvertisementDataTxPowerLevelKey) representa a intensidade do sinal a 1 metro do transmissor. Quando ambos Potência TX e RSSI são conhecidos, a diferença pode ser usada para estimar a perda de percurso e a distância aproximada. - Os Dados do Fabricante (
CBAdvertisementDataManufacturerDataKey) seguem o formato Bluetooth SIG: os dois primeiros bytes são o identificador da empresa em ordem little-endian, seguidos pelos bytes da carga útil específica do fornecedor. - O identificador do periférico mostrado no separador Informação é um UUID atribuído pelo CoreBluetooth no dispositivo local. É estável entre lançamentos da app para o mesmo dispositivo mas não é o endereço MAC Bluetooth real (que o iOS não expõe).
Notas e Limitações
- O que pode ver depende do que cada periférico anuncia e do que o iOS expõe via CoreBluetooth. Alguns dispositivos anunciam dados mínimos.
- Muitos dispositivos aparecem como
[No Name]porque não incluem um nome local nos seus pacotes de anúncio. - As estimativas de distância aproximada são orientações baseadas em limiares de RSSI. As distâncias reais variam significativamente dependendo do ambiente, obstáculos, orientação da antena e potência de transmissão.
- Nem todos os dispositivos conectáveis se ligam com sucesso. Alguns requerem emparelhamento prévio através das Definições do iOS, e alguns podem rejeitar ligações de centrais desconhecidas.
- Dispositivos Bluetooth clássicos (não BLE) não são visíveis através do CoreBluetooth e não aparecem nos resultados da pesquisa.
- Os valores RSSI podem flutuar rapidamente devido a interferência multipercurso, absorção corporal e outros fatores ambientais. O gráfico de histórico do sinal ajuda a suavizar visualmente estas variações.
Resolução de Problemas
- Nenhum dispositivo encontrado — certifique-se de que o Bluetooth está ligado, permaneça no ecrã Bluetooth por alguns segundos e toque em Iniciar Pesquisa se a pesquisa tiver sido parada.
- Permissão negada — toque no botão Abrir Definições no ecrã de permissões e reative o acesso ao Bluetooth para o Lirum nas Definições de Privacidade do iOS.
- Falha na ligação — o dispositivo pode requerer emparelhamento nas Definições do iOS primeiro, pode não suportar ligações de apps de terceiros, ou pode ter saído do alcance.
- Separador de serviços vazio — alguns dispositivos não expõem serviços ou atrasam a descoberta de serviços. Aguarde alguns segundos após a ligação. Se não aparecerem serviços, o dispositivo pode não suportar perfis GATT padrão.
- Valores das características mostram apenas hex — a ferramenta tenta interpretar valores como texto UTF-8 e tipos numéricos comuns. Se nenhuma destas interpretações se aplicar, é mostrado o despejo hexadecimal bruto.