Service UUID : définition, format et domaines d'application

Auteur : IT Sectr Publié le : 2026-07-14 Temps de lecture : 8 min

Service UUID est un identifiant unique 16 ou 128 bits du Bluetooth Low Energy (BLE) qui définit sans ambiguïté un service fonctionnel sur un périphérique. Le Bluetooth SIG a alloué des UUID standard 16 bits pour les services courants tels que Battery Service (0x180F), Device Information (0x180A) et Heart Rate (0x180D), simplifiant ainsi la compatibilité multiplateforme. Selon la Bluetooth Core Specification 5.4 (2023), les services personnalisés des développeurs tiers doivent utiliser des UUID 128 bits, dont le format garantit l'unicité mondiale sans registre central. La déclaration correcte du Service UUID est la première étape vers le fonctionnement correct du serveur GATT sur un périphérique.

Points clés

  • Service UUID est un identifiant de service BLE qui peut être 16 bits (standard) ou 128 bits (personnalisé).
  • Le Bluetooth SIG a alloué plus de 60 UUID standard pour les services courants — Battery, Heart Rate, Device Information et autres.
  • Les UUID 128 bits sont générés par le développeur et garantissent l'unicité mondiale du service sans enregistrement auprès d'un organisme central.
  • Lors du scan, le Central détecte les services du Peripheral par leur Service UUID, ce qui détermine la compatibilité des appareils.
  • Un seul serveur GATT peut déclarer plusieurs services avec des UUID différents — chaque service contient ses propres caractéristiques.

Qu'est-ce qu'un Service UUID en BLE ?

Service UUID est un identifiant attribué à un service GATT Bluetooth Low Energy pour sa reconnaissance sans ambiguïté par d'autres appareils. Dans l'architecture BLE, chaque service représente un groupe logique de caractéristiques unies par une fonction commune. Par exemple, Battery Service contient la caractéristique Battery Level qui transmet le niveau de charge actuel de la batterie.

Le Bluetooth SIG (Special Interest Group) gère le registre des UUID 16 bits standard attribués aux services les plus courants. Cela permet aux appareils de différents fabricants de reconnaître les services les uns des autres sans configuration préalable. Un tracker fitness de n'importe quelle marque peut déclarer un Heart Rate Service avec l'UUID 0x180D, et n'importe quel smartphone comprendra qu'il s'agit d'un service de fréquence cardiaque.

Selon la Bluetooth Core Specification 5.4 (2023), la plage des UUID 16 bits (0x0000–0xFFFF) est divisée en deux parties : de 0x0001 à 0xFFFE sont les services standard Bluetooth SIG, et 0xFFFF est réservé. Si un développeur a besoin d'un service unique qui n'est pas dans le registre SIG, il utilise un UUID 128 bits.

La différence entre les UUID standard et personnalisés ne réside pas seulement dans la longueur : les UUID 16 bits économisent du temps d'antenne dans le paquet de publicité, car ils sont transmis sur 2 octets au lieu de 16. Pour les appareils ayant des restrictions strictes sur la taille du paquet de publicité (jusqu'à 31 octets), c'est crucial.

UUID standard et personnalisés

Les UUID standard 16 bits couvrent les principales catégories d'appareils BLE : capteurs médicaux, trackers fitness, électronique portable et accessoires. Si un appareil implémente une fonction standard, il est recommandé au développeur d'utiliser l'UUID correspondant du registre Bluetooth SIG pour une compatibilité maximale.

Voici quelques exemples d'UUID de service standard :

UUID (hex)Nom du serviceObjectif
0x1800Generic AccessContrôle d'accès, nom de l'appareil, apparence
0x180ADevice InformationFabricant, modèle, numéro de série, version du firmware
0x180DHeart RateMesure du pouls, emplacement du capteur, énergie de la batterie
0x180FBattery ServiceNiveau de charge de la batterie en pourcentage
0x181AEnvironmental SensingTempérature, humidité, pression, éclairement
0x181CUser DataÂge, poids, taille, sexe, pouls au repos

Les UUID personnalisés 128 bits sont nécessaires lorsqu'un appareil offre des fonctionnalités uniques. Par exemple, un fabricant de serrures intelligentes crée son propre service Lock Control avec un UUID au format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Un tel UUID ne peut pas entrer en conflit avec d'autres services, car l'espace des valeurs 128 bits est pratiquement inépuisable.

Format d'un UUID 128 bits

Un UUID 128 bits s'écrit au format standard UUID RFC 4122 : huit caractères hexadécimaux, un trait d'union, quatre, trait d'union, quatre, trait d'union, quatre, trait d'union, douze caractères. Pour BLE, on utilise une version où la partie de base de l'UUID Bluetooth SIG a des bits fixes.

Le Bluetooth SIG définit l'UUID de base : 0000XXXX-0000-1000-8000-00805F9B34FB. Pour les services standard 16 bits, la valeur de l'UUID est substituée dans ce masque : par exemple, 0x180F devient 0000180F-0000-1000-8000-00805F9B34FB. Les services personnalisés utilisent un UUID complètement indépendant généré par le développeur.

Lors de la création d'un UUID personnalisé, vous pouvez utiliser n'importe quel générateur d'UUID (UUID v4). Un UUID v4 aléatoire fournit 122 bits d'entropie, rendant les collisions pratiquement impossibles. N'utilisez pas une version modifiée de l'UUID de base Bluetooth SIG pour les services personnalisés — cela viole la spécification.

Comment déclarer un service avec UUID dans le code

La déclaration d'un service avec un UUID se fait côté Peripheral lors de la création d'un serveur GATT. Sous iOS, Core Bluetooth est utilisé ; sous Android, android.bluetooth.le. Examinons les deux approches.

iOS : Core Bluetooth

En Swift, un service est créé via CBMutableService en spécifiant l'UUID, après quoi des caractéristiques lui sont ajoutées 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 : Serveur GATT Bluetooth

Sous Android, le service est enregistré via BluetoothGattServer et BluetoothGattService. L'UUID est passé comme chaîne 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);

Scan des services par UUID

Le scan par Service UUID permet au Central de trouver les appareils fournissant le service nécessaire sans se connecter à tous les Peripherals découverts. Un paquet de publicité BLE peut contenir une liste d'UUID de services, ce qui permet au Central de filtrer les appareils dès l'étape de scan.

Sous iOS, CBCentralManager scanne les appareils avec un filtre par UUID de service. Cela réduit la consommation d'énergie et accélère la découverte des appareils nécessaires.

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
}

Sous Android, le filtrage par UUID est également pris en charge via ScanFilter.Builder. C'est un moyen efficace de restreindre la recherche sans se connecter à chaque appareil.

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
);

Plusieurs services sur un seul appareil

Un seul appareil BLE peut déclarer plusieurs services simultanément. Par exemple, un bracelet fitness peut contenir Battery Service (0x180F), Heart Rate Service (0x180D) et un service personnalisé pour synchroniser les données avec le cloud. Chaque service a son propre UUID et son propre ensemble de caractéristiques.

Avec plusieurs services, il est important de prendre en compte la limitation du paquet de publicité. Un paquet de publicité BLE peut contenir jusqu'à 31 octets de données. Si les UUID des services prennent trop de place, certains peuvent ne pas tenir dans le paquet de publicité. Dans ce cas, on utilise la scan response — un second paquet envoyé à la demande du Central.

Selon la Bluetooth Core Specification 5.4 (2023), le nombre maximal de services primaires sur un seul serveur GATT n'est pas limité par la spécification, mais en pratique il est limité par la mémoire de l'appareil et les exigences de performance. Pour les appareils embarqués avec 256 Ko de mémoire flash, pas plus de 5 à 10 services sont recommandés.

Foire aux questions

Quelle est la différence entre un UUID 16 bits et un UUID 128 bits ?

Les UUID 16 bits sont réservés par le Bluetooth SIG pour les services standard et occupent 2 octets dans le paquet de publicité. Les UUID 128 bits sont utilisés pour les services personnalisés et occupent 16 octets. Le choix dépend du type de service : une fonctionnalité standard utilise un UUID 16 bits, une fonctionnalité unique utilise un UUID 128 bits.

Comment générer un UUID personnalisé 128 bits pour un service BLE ?

Utilisez UUID v4 — un UUID aléatoire généré par des outils en ligne, la commande terminale uuidgen ou l'API de votre langage de programmation. Exemple : UUID.fromString(UUID.randomUUID().toString()) en Java ou UUID() en Swift.

Est-il nécessaire d'enregistrer un UUID personnalisé auprès du Bluetooth SIG ?

Non, l'enregistrement n'est pas requis. Le Bluetooth SIG n'enregistre que les UUID 16 bits. Les UUID personnalisés 128 bits sont générés indépendamment par le développeur et garantissent l'unicité grâce au vaste espace d'adressage (2^128 combinaisons).

Un seul service peut-il contenir plusieurs caractéristiques ?

Oui, un service GATT standard peut contenir un nombre illimité de caractéristiques. Par exemple, Battery Service peut contenir Battery Level (0x2A19) et Battery Power State (0x2A1A). Chaque caractéristique a son propre UUID et son propre ensemble de propriétés.

Que se passe-t-il si deux appareils utilisent le même UUID personnalisé ?

Si les UUID coïncident, le Central ne peut pas distinguer un service d'un autre sans informations supplémentaires. La probabilité de collision d'un UUID v4 aléatoire est négligeable — environ 5,3 × 10^−37. Utilisez un générateur d'UUID aléatoire, ne copiez pas les UUID depuis des exemples.

Résumé

  • Service UUID est un identifiant global de service BLE qui peut être 16 bits (standard) ou 128 bits (personnalisé).
  • Le Bluetooth SIG a alloué plus de 60 UUID standard — utilisez-les pour la compatibilité avec les appareils d'autres fabricants.
  • Les UUID 128 bits sont créés par le développeur via UUID v4 et garantissent l'unicité sans registre central.
  • Lors du scan, le Central filtre les appareils par Service UUID, ce qui réduit la consommation d'énergie et accélère la recherche.
  • Un seul appareil peut déclarer plusieurs services avec des UUID différents — le nombre est limité par la mémoire et le paquet de publicité.
  • Sous iOS et Android, les services sont déclarés via CBMutableService et BluetoothGattService respectivement, en spécifiant l'UUID.
  • Le bon choix d'UUID affecte la compatibilité, la taille du paquet de publicité et le fonctionnement correct du profil GATT.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi