Service UUID: qué es, formato y dónde se aplica

Autor: IT Sectr Publicado: 2026-07-14 Tiempo de lectura: 8 min

Service UUID es un identificador único de 16 o 128 bits de Bluetooth Low Energy (BLE) que define inequívocamente un servicio funcional en un dispositivo. Bluetooth SIG ha asignado UUID estándar de 16 bits para servicios comunes como Battery Service (0x180F), Device Information (0x180A) y Heart Rate (0x180D), simplificando la compatibilidad multiplataforma. Según la Bluetooth Core Specification 5.4 (2023), los servicios personalizados de desarrolladores externos deben usar UUID de 128 bits, cuyo formato garantiza la unicidad global sin un registro central. La declaración correcta de Service UUID es el primer paso para el funcionamiento correcto del servidor GATT en un dispositivo periférico.

Puntos clave

  • Service UUID es un identificador de servicio BLE que puede ser de 16 bits (estándar) o de 128 bits (personalizado).
  • Bluetooth SIG ha asignado más de 60 UUID estándar para servicios comunes: Battery, Heart Rate, Device Information y otros.
  • Los UUID de 128 bits los genera el desarrollador y garantizan la unicidad global del servicio sin registro en un organismo central.
  • Al escanear, el Central detecta los servicios del Peripheral por su Service UUID, lo que determina la compatibilidad de los dispositivos.
  • Un solo servidor GATT puede declarar varios servicios con diferentes UUID; cada servicio contiene sus propias características.

¿Qué es Service UUID en BLE?

Service UUID es un identificador asignado a un servicio GATT de Bluetooth Low Energy para su reconocimiento inequívoco por otros dispositivos. En la arquitectura BLE, cada servicio representa un grupo lógico de características unidas por una función común. Por ejemplo, Battery Service contiene la característica Battery Level, que transmite la carga actual de la batería.

Bluetooth SIG (Special Interest Group) gestiona el registro de UUID de 16 bits estándar asignados a los servicios más comunes. Esto permite que dispositivos de diferentes fabricantes reconozcan los servicios entre sí sin configuración previa. Un rastreador de fitness de cualquier marca puede declarar Heart Rate Service con UUID 0x180D, y cualquier teléfono inteligente entenderá que es un servicio de frecuencia cardíaca.

Según Bluetooth Core Specification 5.4 (2023), el rango de UUID de 16 bits (0x0000–0xFFFF) se divide en dos partes: de 0x0001 a 0xFFFE son servicios estándar de Bluetooth SIG, y 0xFFFF está reservado. Si un desarrollador necesita un servicio único que no esté en el registro SIG, usa un UUID de 128 bits.

La diferencia entre UUID estándar y personalizado no solo está en la longitud: los UUID de 16 bits ahorran tiempo de transmisión en el paquete de publicidad, ya que se transmiten como 2 bytes en lugar de 16 bytes. Para dispositivos con restricciones estrictas de tamaño del paquete de publicidad (hasta 31 bytes), esto es crítico.

UUID estándar y personalizados

Los UUID estándar de 16 bits cubren las principales categorías de dispositivos BLE: sensores médicos, rastreadores de fitness, electrónica portátil y accesorios. Si un dispositivo implementa una función estándar, se recomienda al desarrollador usar el UUID correspondiente del registro Bluetooth SIG para la máxima compatibilidad.

Aquí hay algunos ejemplos de UUID de servicio estándar:

UUID (hex)Nombre del servicioPropósito
0x1800Generic AccessControl de acceso, nombre del dispositivo, apariencia
0x180ADevice InformationFabricante, modelo, número de serie, versión de firmware
0x180DHeart RateMedición de pulso, ubicación del sensor, energía de la batería
0x180FBattery ServiceNivel de carga de la batería en porcentaje
0x181AEnvironmental SensingTemperatura, humedad, presión, iluminancia
0x181CUser DataEdad, peso, altura, sexo, pulso en reposo

Los UUID personalizados de 128 bits son necesarios cuando un dispositivo proporciona una funcionalidad única. Por ejemplo, un fabricante de cerraduras inteligentes crea su propio servicio Lock Control con un UUID como XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Dicho UUID no entrará en conflicto con otros servicios, ya que el espacio de valores de 128 bits es prácticamente inagotable.

Formato de UUID de 128 bits

Un UUID de 128 bits se escribe en el formato estándar UUID RFC 4122: ocho caracteres hexadecimales, guión, cuatro, guión, cuatro, guión, cuatro, guión, doce caracteres. Para BLE se usa una versión donde la parte base del UUID de Bluetooth SIG tiene bits fijos.

Bluetooth SIG define el UUID base: 0000XXXX-0000-1000-8000-00805F9B34FB. Para servicios estándar de 16 bits, el valor del UUID se sustituye en esta máscara: por ejemplo, 0x180F se convierte en 0000180F-0000-1000-8000-00805F9B34FB. Los servicios personalizados usan un UUID completamente independiente generado por el desarrollador.

Al crear un UUID personalizado, puede usar cualquier generador de UUID (UUID v4). Un UUID v4 aleatorio proporciona 122 bits de entropía, lo que hace que las colisiones sean prácticamente imposibles. No use una versión modificada del UUID base de Bluetooth SIG para servicios personalizados: esto viola la especificación.

Cómo declarar un servicio con UUID en código

Declarar un servicio con un UUID se realiza en el lado Peripheral al crear un servidor GATT. En iOS se usa Core Bluetooth, en Android android.bluetooth.le. Veamos ambos enfoques.

iOS: Core Bluetooth

En Swift, un servicio se crea mediante CBMutableService especificando el UUID, después se le agregan características mediante 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

En Android, el servicio se registra a través de BluetoothGattServer y BluetoothGattService. El UUID se pasa como cadena mediante 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);

Escaneo de servicios por UUID

El escaneo por Service UUID permite que el Central encuentre dispositivos que proporcionan el servicio necesario sin conectarse a todos los Peripherals descubiertos. Un paquete de publicidad BLE puede contener una lista de UUID de servicios, lo que permite al Central filtrar dispositivos en la etapa de escaneo.

En iOS, CBCentralManager escanea dispositivos con un filtro por UUID de servicio. Esto reduce el consumo de energía y acelera la detección de los dispositivos necesarios.

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
}

En Android, el filtrado por UUID también se admite mediante ScanFilter.Builder. Esta es una forma eficiente de reducir la búsqueda sin conectarse 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
);

Varios servicios en un mismo dispositivo

Un único dispositivo BLE puede declarar varios servicios simultáneamente. Por ejemplo, una pulsera de fitness puede contener Battery Service (0x180F), Heart Rate Service (0x180D) y un servicio personalizado para sincronizar datos con la nube. Cada servicio tiene su propio UUID y su propio conjunto de características.

Con múltiples servicios, es importante considerar la limitación del paquete de publicidad. Un paquete de publicidad BLE puede contener hasta 31 bytes de datos. Si los UUID de servicio ocupan demasiado espacio, algunos pueden no caber en el paquete de publicidad. En este caso, se usa scan response: un segundo paquete que se envía a solicitud del Central.

Según Bluetooth Core Specification 5.4 (2023), el número máximo de servicios primarios en un solo servidor GATT no está limitado por la especificación, pero en la práctica está limitado por la memoria del dispositivo y los requisitos de rendimiento. Para dispositivos integrados con 256 KB de memoria flash, se recomiendan no más de 5–10 servicios.

Preguntas frecuentes

¿Cuál es la diferencia entre un UUID de 16 bits y uno de 128 bits?

Los UUID de 16 bits están reservados por Bluetooth SIG para servicios estándar y ocupan 2 bytes en el paquete de publicidad. Los UUID de 128 bits se usan para servicios personalizados y ocupan 16 bytes. La elección depende del tipo de servicio: la funcionalidad estándar usa un UUID de 16 bits, la funcionalidad única usa un UUID de 128 bits.

¿Cómo generar un UUID personalizado de 128 bits para un servicio BLE?

Use UUID v4: un UUID aleatorio que se genera con herramientas en línea, el comando de terminal uuidgen o la API de su lenguaje de programación. Ejemplo: UUID.fromString(UUID.randomUUID().toString()) en Java o UUID() en Swift.

¿Es necesario registrar un UUID personalizado en Bluetooth SIG?

No, no se requiere registro. Bluetooth SIG solo registra UUID de 16 bits. Los UUID personalizados de 128 bits los genera el desarrollador de forma independiente y garantizan la unicidad gracias al enorme espacio de direcciones (combinaciones de 2^128).

¿Puede un solo servicio contener varias características?

Sí, un servicio GATT estándar puede contener una cantidad ilimitada de características. Por ejemplo, Battery Service puede contener Battery Level (0x2A19) y Battery Power State (0x2A1A). Cada característica tiene su propio UUID y conjunto de propiedades.

¿Qué sucede si dos dispositivos usan el mismo UUID personalizado?

Si los UUID coinciden, el Central no puede distinguir un servicio de otro sin información adicional. La probabilidad de colisión de UUID v4 aleatorios es insignificantemente pequeña: aproximadamente 5.3 × 10^−37. Use un generador de UUID aleatorio, no copie UUID de ejemplos.

Resumen

  • Service UUID es un identificador global de servicio BLE que puede ser de 16 bits (estándar) o de 128 bits (personalizado).
  • Bluetooth SIG ha asignado más de 60 UUID estándar úselos para la compatibilidad con dispositivos de otros fabricantes.
  • Los UUID de 128 bits los crea el desarrollador mediante UUID v4 y garantizan la unicidad sin un registro central.
  • Al escanear, el Central filtra dispositivos por Service UUID, lo que reduce el consumo de energía y acelera la búsqueda.
  • Un solo dispositivo puede declarar varios servicios con diferentes UUID: la cantidad está limitada por la memoria y el paquete de publicidad.
  • En iOS y Android, los servicios se declaran mediante CBMutableService y BluetoothGattService respectivamente, especificando el UUID.
  • La selección correcta del UUID afecta la compatibilidad, el tamaño del paquete de publicidad y el funcionamiento correcto del perfil GATT.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también