Service UUID: o que é, formato e onde é aplicado

Autor: IT Sectr Publicado: 2026-07-14 Tempo de leitura: 8 min

Service UUID é um identificador único de 16 ou 128 bits do Bluetooth Low Energy (BLE) que define inequivocamente um serviço funcional em um dispositivo. O Bluetooth SIG alocou UUIDs padrão de 16 bits para serviços comuns como Battery Service (0x180F), Device Information (0x180A) e Heart Rate (0x180D), simplificando a compatibilidade entre plataformas. De acordo com a Bluetooth Core Specification 5.4 (2023), serviços personalizados de desenvolvedores terceiros devem usar UUIDs de 128 bits, cujo formato garante exclusividade global sem um registro central. A declaração correta do Service UUID é o primeiro passo para o funcionamento correto do servidor GATT em um dispositivo periférico.

Principais pontos

  • Service UUID é um identificador de serviço BLE que pode ser de 16 bits (padrão) ou 128 bits (personalizado).
  • O Bluetooth SIG alocou mais de 60 UUIDs padrão para serviços comuns — Battery, Heart Rate, Device Information e outros.
  • UUIDs de 128 bits são gerados pelo desenvolvedor e garantem a exclusividade global do serviço sem registro em um órgão central.
  • Ao escanear, o Central detecta os serviços do Peripheral pelo seu Service UUID, o que determina a compatibilidade dos dispositivos.
  • Um único servidor GATT pode declarar vários serviços com diferentes UUIDs — cada serviço contém suas próprias características.

O que é Service UUID em BLE?

Service UUID é um identificador atribuído a um serviço GATT do Bluetooth Low Energy para seu reconhecimento inequívoco por outros dispositivos. Na arquitetura BLE, cada serviço representa um grupo lógico de características unidas por uma função comum. Por exemplo, o Battery Service contém a característica Battery Level, que transmite a carga atual da bateria.

O Bluetooth SIG (Special Interest Group) gerencia o registro de UUIDs de 16 bits padrão atribuídos aos serviços mais comuns. Isso permite que dispositivos de diferentes fabricantes reconheçam os serviços uns dos outros sem configuração prévia. Um rastreador fitness de qualquer marca pode declarar um Heart Rate Service com UUID 0x180D, e qualquer smartphone entenderá que é um serviço de frequência cardíaca.

De acordo com a Bluetooth Core Specification 5.4 (2023), o intervalo de UUIDs de 16 bits (0x0000–0xFFFF) é dividido em duas partes: de 0x0001 a 0xFFFE são serviços padrão do Bluetooth SIG, e 0xFFFF é reservado. Se um desenvolvedor precisar de um serviço único que não está no registro SIG, ele usa um UUID de 128 bits.

A diferença entre UUIDs padrão e personalizados não está apenas no comprimento: UUIDs de 16 bits economizam tempo de transmissão no pacote de anúncio, pois são transmitidos como 2 bytes em vez de 16 bytes. Para dispositivos com restrições rigorosas de tamanho do pacote de anúncio (até 31 bytes), isso é crítico.

UUIDs padrão e personalizados

Os UUIDs padrão de 16 bits cobrem as principais categorias de dispositivos BLE: sensores médicos, rastreadores fitness, eletrônicos vestíveis e acessórios. Se um dispositivo implementa uma função padrão, o desenvolvedor é recomendado a usar o UUID correspondente do registro Bluetooth SIG para máxima compatibilidade.

Aqui estão alguns exemplos de UUIDs de serviço padrão:

UUID (hex)Nome do serviçoFinalidade
0x1800Generic AccessControle de acesso, nome do dispositivo, aparência
0x180ADevice InformationFabricante, modelo, número de série, versão do firmware
0x180DHeart RateMedição de pulso, localização do sensor, energia da bateria
0x180FBattery ServiceNível de carga da bateria em porcentagem
0x181AEnvironmental SensingTemperatura, umidade, pressão, iluminância
0x181CUser DataIdade, peso, altura, sexo, pulso em repouso

Os UUIDs personalizados de 128 bits são necessários quando um dispositivo fornece funcionalidade única. Por exemplo, um fabricante de fechaduras inteligentes cria seu próprio serviço Lock Control com um UUID como XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Tal UUID não entrará em conflito com outros serviços, pois o espaço de valores de 128 bits é praticamente inesgotável.

Formato do UUID de 128 bits

Um UUID de 128 bits é escrito no formato padrão UUID RFC 4122: oito caracteres hexadecimais, hífen, quatro, hífen, quatro, hífen, quatro, hífen, doze caracteres. Para BLE, é usada uma versão onde a parte base do UUID do Bluetooth SIG tem bits fixos.

O Bluetooth SIG define o UUID base: 0000XXXX-0000-1000-8000-00805F9B34FB. Para serviços padrão de 16 bits, o valor do UUID é substituído nesta máscara: por exemplo, 0x180F se torna 0000180F-0000-1000-8000-00805F9B34FB. Serviços personalizados usam um UUID completamente independente gerado pelo desenvolvedor.

Ao criar um UUID personalizado, você pode usar qualquer gerador de UUID (UUID v4). Um UUID v4 aleatório fornece 122 bits de entropia, tornando colisões praticamente impossíveis. Não use uma versão modificada do UUID base do Bluetooth SIG para serviços personalizados — isso viola a especificação.

Como declarar um serviço com UUID no código

Declarar um serviço com um UUID é feito no lado Peripheral ao criar um servidor GATT. No iOS, usa-se Core Bluetooth; no Android, android.bluetooth.le. Vamos analisar ambas as abordagens.

iOS: Core Bluetooth

Em Swift, um serviço é criado via CBMutableService especificando o UUID, após o que características são adicionadas a ele via CBMutableCharacteristic.

swift
import CoreBluetooth

// Standard 16-bit UUID
let batteryServiceUUID = CBUUID("180F")

// Custom 128-bit UUID
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")

let service = CBMutableService(
    type: customServiceUUID,
    primary: true
)

// Add characteristics
service.characteristics = [characteristic]

// Publish service via peripheralManager
peripheralManager.add(service)

Android: Bluetooth GATT Server

No Android, o serviço é registrado via BluetoothGattServer e BluetoothGattService. O UUID é passado como string via java.util.UUID.fromString.

java
import android.bluetooth.*;

// Custom service UUID
private static final UUID CUSTOM_SERVICE_UUID =
    UUID.fromString("E20A39F4-73F5-4BC4-A12F-17D1AD07A961");

BluetoothGattService service = new BluetoothGattService(
    CUSTOM_SERVICE_UUID,
    BluetoothGattService.SERVICE_TYPE_PRIMARY
);

// Add characteristics
service.addCharacteristic(characteristic);

// Register on GATT server
gattServer.addService(service);

Escaneamento de serviços por UUID

O escaneamento por Service UUID permite que o Central encontre dispositivos que fornecem o serviço necessário sem se conectar a todos os Peripherals descobertos. Um pacote de anúncio BLE pode conter uma lista de UUIDs de serviços, permitindo que o Central filtre dispositivos na etapa de escaneamento.

No iOS, o CBCentralManager escaneia dispositivos com um filtro por UUID de serviço. Isso reduz o consumo de energia e acelera a descoberta dos dispositivos necessários.

swift
import CoreBluetooth

let centralManager = CBCentralManager()

func scanForHeartRateMonitor() {
    let services: [CBUUID] = [
        CBUUID("180D") // Heart Rate Service
    ]
    centralManager.scanForPeripherals(
        withServices: services,
        options: nil
    )
}

// Delegate receives only Heart Rate Service devices
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // peripheral has only devices with UUID 0x180D
}

No Android, a filtragem por UUID também é suportada via ScanFilter.Builder. Esta é uma forma eficiente de restringir a busca sem se conectar a cada dispositivo.

java
import android.bluetooth.le.*;

ScanFilter filter = new ScanFilter.Builder()
    .setServiceUuid(
        new ParcelUuid(
            UUID.fromString("0000180D-0000-1000-8000-00805F9B34FB")
        )
    )
    .build();

BluetoothLeScanner scanner = bluetoothAdapter.getBluetoothLeScanner();
scanner.startScan(
    Collections.singletonList(filter),
    scanSettings,
    scanCallback
);

Vários serviços em um único dispositivo

Um único dispositivo BLE pode declarar vários serviços simultaneamente. Por exemplo, uma pulseira fitness pode conter Battery Service (0x180F), Heart Rate Service (0x180D) e um serviço personalizado para sincronizar dados com a nuvem. Cada serviço tem seu próprio UUID e seu próprio conjunto de características.

Com múltiplos serviços, é importante considerar a limitação do pacote de anúncio. Um pacote de anúncio BLE pode conter até 31 bytes de dados. Se os UUIDs de serviço ocuparem muito espaço, alguns podem não caber no pacote de anúncio. Neste caso, usa-se o scan response — um segundo pacote enviado a pedido do Central.

De acordo com a Bluetooth Core Specification 5.4 (2023), o número máximo de serviços primários em um único servidor GATT não é limitado pela especificação, mas na prática é limitado pela memória do dispositivo e requisitos de desempenho. Para dispositivos embarcados com 256 KB de memória flash, recomenda-se no máximo 5–10 serviços.

Perguntas frequentes

Qual a diferença entre um UUID de 16 bits e um de 128 bits?

Os UUIDs de 16 bits são reservados pelo Bluetooth SIG para serviços padrão e ocupam 2 bytes no pacote de anúncio. UUIDs de 128 bits são usados para serviços personalizados e ocupam 16 bytes. A escolha depende do tipo de serviço: funcionalidade padrão usa um UUID de 16 bits, funcionalidade única usa um UUID de 128 bits.

Como gerar um UUID personalizado de 128 bits para um serviço BLE?

Use UUID v4 — um UUID aleatório gerado por ferramentas online, comando de terminal uuidgen ou API da sua linguagem de programação. Exemplo: UUID.fromString(UUID.randomUUID().toString()) em Java ou UUID() em Swift.

É necessário registrar um UUID personalizado no Bluetooth SIG?

Não, o registro não é necessário. O Bluetooth SIG registra apenas UUIDs de 16 bits. UUIDs personalizados de 128 bits são gerados pelo desenvolvedor de forma independente e garantem exclusividade através do vasto espaço de endereços (2^128 combinações).

Um único serviço pode conter várias características?

Sim, um serviço GATT padrão pode conter um número ilimitado de características. Por exemplo, o Battery Service pode conter Battery Level (0x2A19) e Battery Power State (0x2A1A). Cada característica tem seu próprio UUID e conjunto de propriedades.

O que acontece se dois dispositivos usarem o mesmo UUID personalizado?

Se os UUIDs coincidirem, o Central não consegue distinguir um serviço do outro sem informações adicionais. A probabilidade de colisão de UUID v4 aleatórios é extremamente pequena — aproximadamente 5,3 × 10^−37. Use um gerador de UUID aleatório, não copie UUIDs de exemplos.

Resumo

  • Service UUID é um identificador global de serviço BLE que pode ser de 16 bits (padrão) ou 128 bits (personalizado).
  • O Bluetooth SIG alocou mais de 60 UUIDs padrão — use-os para compatibilidade com dispositivos de outros fabricantes.
  • UUIDs de 128 bits são criados pelo desenvolvedor via UUID v4 e garantem exclusividade sem um registro central.
  • Ao escanear, o Central filtra dispositivos por Service UUID, o que reduz o consumo de energia e acelera a busca.
  • Um único dispositivo pode declarar vários serviços com diferentes UUIDs — a quantidade é limitada pela memória e pelo pacote de anúncio.
  • No iOS e Android, os serviços são declarados via CBMutableService e BluetoothGattService respectivamente, especificando o UUID.
  • A seleção correta do UUID afeta a compatibilidade, o tamanho do pacote de anúncio e a operação correta do perfil GATT.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também