Service UUID: τι είναι, μορφή και πού εφαρμόζεται

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-07-14 Χρόνος ανάγνωσης: 8 λεπ

Service UUID — είναι ένα μοναδικό αναγνωριστικό 16 ή 128 bit Bluetooth Low Energy (BLE) που ορίζει κατηγορηματικά μια λειτουργική υπηρεσία σε μια συσκευή. Η Bluetooth SIG έχει εκχωρήσει τυπικά 16-bit UUID για κοινές υπηρεσίες όπως Battery Service (0x180F), Device Information (0x180A) και Heart Rate (0x180D), γεγονός που απλοποιεί τη διαλειτουργικότητα μεταξύ πλατφορμών. Σύμφωνα με το Bluetooth Core Specification 5.4 (2023), οι προσαρμοσμένες υπηρεσίες τρίτων προγραμματιστών υποχρεούνται να χρησιμοποιούν 128-bit UUID, των οποίων η μορφή εγγυάται παγκόσμια μοναδικότητα χωρίς κεντρικό μητρώο. Η σωστή δήλωση του Service UUID είναι το πρώτο βήμα για τη σωστή λειτουργία του διακομιστή GATT στην περιφερειακή συσκευή.

Κύρια σημεία

  • Service UUID — αναγνωριστικό υπηρεσίας BLE, το οποίο μπορεί να είναι 16-bit (τυπικό) ή 128-bit (προσαρμοσμένο).
  • Η Bluetooth SIG έχει εκχωρήσει περισσότερα από 60 τυπικά UUID για κοινές υπηρεσίες — Battery, Heart Rate, Device Information και άλλες.
  • Τα 128-bit UUID δημιουργούνται από τον προγραμματιστή και εγγυώνται παγκόσμια μοναδικότητα της υπηρεσίας χωρίς εγγραφή σε κεντρικό φορέα.
  • Κατά τη σάρωση, το Central ανιχνεύει τις υπηρεσίες του Peripheral βάσει του Service UUID τους, το οποίο καθορίζει τη συμβατότητα των συσκευών.
  • Ένας διακομιστής GATT μπορεί να δηλώσει πολλαπλές υπηρεσίες με διαφορετικά UUID — κάθε υπηρεσία περιέχει τα δικά της χαρακτηριστικά.

Τι είναι το Service UUID στο BLE;

Service UUID — είναι ένα αναγνωριστικό που εκχωρείται σε μια υπηρεσία GATT Bluetooth Low Energy για μοναδική αναγνώριση από άλλες συσκευές. Στην αρχιτεκτονική BLE, κάθε υπηρεσία αντιπροσωπεύει μια λογική ομάδα χαρακτηριστικών που ενώνονται από μια κοινή λειτουργία. Για παράδειγμα, η υπηρεσία Battery Service περιέχει το χαρακτηριστικό Battery Level, το οποίο μεταδίδει το τρέχον επίπεδο φόρτισης της μπαταρίας.

Η Bluetooth SIG (Special Interest Group) διαχειρίζεται το μητρώο τυπικών 16-bit UUID που εκχωρούνται στις πιο κοινές υπηρεσίες. Αυτό επιτρέπει σε συσκευές διαφορετικών κατασκευαστών να αναγνωρίζουν η μία τις υπηρεσίες της άλλης χωρίς προηγούμενη διαμόρφωση. Ένας ιχνηλάτης φυσικής κατάστασης οποιασδήποτε μάρκας μπορεί να δηλώσει το Heart Rate Service με UUID 0x180D, και οποιοδήποτε smartphone θα καταλάβει ότι πρόκειται για υπηρεσία καρδιακών παλμών.

Σύμφωνα με το Bluetooth Core Specification 5.4 (2023), το εύρος των 16-bit UUID (0x0000–0xFFFF) χωρίζεται σε δύο μέρη: από 0x0001 έως 0xFFFE — τυπικές υπηρεσίες Bluetooth SIG, και το 0xFFFF είναι δεσμευμένο. Εάν ένας προγραμματιστής χρειάζεται μια μοναδική υπηρεσία που δεν υπάρχει στο μητρώο SIG, χρησιμοποιεί ένα 128-bit UUID.

Η διαφορά μεταξύ τυπικού και προσαρμοσμένου UUID δεν είναι μόνο στο μήκος: τα 16-bit UUID εξοικονομούν χρόνο μετάδοσης του πακέτου διαφήμισης, καθώς μεταδίδονται ως 2 byte αντί για 16 byte. Για συσκευές με αυστηρούς περιορισμούς στο μέγεθος του πακέτου advertising (έως 31 byte), αυτό είναι κρίσιμο.

Τυπικά και προσαρμοσμένα UUID

Τυπικά 16-bit UUID καλύπτουν τις κύριες κατηγορίες συσκευών BLE: ιατρικοί αισθητήρες, ιχνηλάτες φυσικής κατάστασης, φορητά ηλεκτρονικά και αξεσουάρ. Εάν μια συσκευή υλοποιεί μια τυπική λειτουργία — συνιστάται στον προγραμματιστή να χρησιμοποιήσει το αντίστοιχο UUID από το μητρώο Bluetooth SIG για μέγιστη συμβατότητα.

Ακολουθούν μερικά παραδείγματα τυπικών UUID υπηρεσιών:

UUID (hex)Όνομα υπηρεσίαςΣκοπός
0x1800Generic AccessΔιαχείριση πρόσβασης, όνομα συσκευής, εξωτερική εμφάνιση
0x180ADevice InformationΚατασκευαστής, μοντέλο, σειριακός αριθμός, έκδοση λογισμικού
0x180DHeart RateΜέτρηση παλμού, θέση αισθητήρα, ενέργεια μπαταρίας
0x180FBattery ServiceΕπίπεδο φόρτισης μπαταρίας σε ποσοστό
0x181AEnvironmental SensingΘερμοκρασία, υγρασία, πίεση, φωτισμός
0x181CUser DataΗλικία, βάρος, ύψος, φύλο, παλμός ηρεμίας

Προσαρμοσμένα 128-bit UUID είναι απαραίτητα όταν η συσκευή παρέχει μοναδική λειτουργικότητα. Για παράδειγμα, ένας κατασκευαστής έξυπνης κλειδαριάς δημιουργεί τη δική του υπηρεσία Lock Control με UUID της μορφής XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Ένα τέτοιο UUID εγγυάται ότι δεν θα έρθει σε σύγκρουση με άλλες υπηρεσίες, καθώς ο χώρος των 128-bit τιμών είναι πρακτικά ανεξάντλητος.

Μορφή 128-bit UUID

128-bit UUID γράφεται στην τυπική μορφή UUID RFC 4122: οκτώ δεκαεξαδικοί χαρακτήρες, παύλα, τέσσερις, παύλα, τέσσερις, παύλα, τέσσερις, παύλα, δώδεκα χαρακτήρες. Για BLE χρησιμοποιείται η έκδοση όπου το βασικό μέρος του UUID Bluetooth SIG έχει σταθερά bits.

Η Bluetooth SIG ορίζει το βασικό UUID: 0000XXXX-0000-1000-8000-00805F9B34FB. Για τυπικές 16-bit υπηρεσίες, σε αυτή τη μάσκα αντικαθίσταται η τιμή UUID: για παράδειγμα, το 0x180F γίνεται 0000180F-0000-1000-8000-00805F9B34FB. Οι προσαρμοσμένες υπηρεσίες χρησιμοποιούν ένα εντελώς ανεξάρτητο UUID, που δημιουργείται από τον προγραμματιστή.

Κατά τη δημιουργία προσαρμοσμένου UUID μπορείτε να χρησιμοποιήσετε οποιαδήποτε γεννήτρια UUID (UUID v4). Ένα τυχαίο UUID v4 παρέχει 122 bits εντροπίας, καθιστώντας τις συγκρούσεις πρακτικά αδύνατες. Μην χρησιμοποιείτε τροποποιημένη έκδοση του βασικού UUID Bluetooth SIG για προσαρμοσμένες υπηρεσίες — αυτό παραβιάζει τις προδιαγραφές.

Πώς να δηλώσετε μια υπηρεσία με UUID στον κώδικα

Δήλωση υπηρεσίας με UUID εκτελείται στην πλευρά του Peripheral κατά τη δημιουργία του διακομιστή GATT. Στο iOS χρησιμοποιείται το Core Bluetooth, στο Android — το android.bluetooth.le. Ας εξετάσουμε και τις δύο προσεγγίσεις.

iOS: Core Bluetooth

Στο Swift, η υπηρεσία δημιουργείται μέσω CBMutableService με καθορισμό UUID, μετά το οποίο προστίθενται χαρακτηριστικά μέσω CBMutableCharacteristic.

swift
import CoreBluetooth

// Τυπικό 16-bit UUID
let batteryServiceUUID = CBUUID("180F")

// Προσαρμοσμένο 128-bit UUID
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")

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

// Προσθήκη χαρακτηριστικών
service.characteristics = [characteristic]

// Δημοσίευση υπηρεσίας μέσω peripheralManager
peripheralManager.add(service)

Android: Bluetooth GATT Server

Στο Android, η υπηρεσία καταχωρείται μέσω BluetoothGattServer και BluetoothGattService. Το UUID μεταβιβάζεται ως συμβολοσειρά στο java.util.UUID.fromString.

java
import android.bluetooth.*;

// Προσαρμοσμένο 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
);

// Προσθήκη χαρακτηριστικών
service.addCharacteristic(characteristic);

// Εγγραφή στον διακομιστή GATT
gattServer.addService(service);

Σάρωση υπηρεσιών βάσει UUID

Σάρωση βάσει Service UUID επιτρέπει στο Central να βρίσκει συσκευές που προσφέρουν την απαιτούμενη υπηρεσία χωρίς σύνδεση σε όλες τις ανιχνευμένες Peripheral. Το πακέτο διαφήμισης BLE μπορεί να περιέχει μια λίστα UUID υπηρεσιών, επιτρέποντας στο Central να φιλτράρει συσκευές στο στάδιο της σάρωσης.

Στο iOS, το CBCentralManager σαρώνει συσκευές με φίλτρο βάσει UUID υπηρεσίας. Αυτό μειώνει την κατανάλωση ενέργειας και επιταχύνει την ανίχνευση των απαιτούμενων συσκευών.

swift
import CoreBluetooth

let centralManager = CBCentralManager()

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

// Ο delegate λαμβάνει μόνο συσκευές Heart Rate Service
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // το peripheral έχει μόνο συσκευές με UUID 0x180D
}

Στο Android, το φιλτράρισμα βάσει UUID υποστηρίζεται επίσης μέσω ScanFilter.Builder. Αυτός είναι ένας αποτελεσματικός τρόπος για να περιορίσετε το εύρος αναζήτησης χωρίς σύνδεση σε κάθε συσκευή.

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

Πολλαπλές υπηρεσίες σε μία συσκευή

Μία συσκευή BLE μπορεί να δηλώσει πολλαπλές υπηρεσίες ταυτόχρονα. Για παράδειγμα, ένα βραχιόλι φυσικής κατάστασης μπορεί να περιέχει Battery Service (0x180F), Heart Rate Service (0x180D) και μια προσαρμοσμένη υπηρεσία για συγχρονισμό δεδομένων με το cloud. Κάθε υπηρεσία έχει το δικό της UUID και το δικό της σύνολο χαρακτηριστικών.

Σε περίπτωση πολλαπλών υπηρεσιών, είναι σημαντικό να λαμβάνεται υπόψη ο περιορισμός του πακέτου διαφήμισης. Το πακέτο διαφήμισης BLE μπορεί να περιέχει έως 31 byte δεδομένων. Εάν τα UUID των υπηρεσιών καταλαμβάνουν πολύ χώρο, ορισμένα από αυτά μπορεί να μην χωρούν στο πακέτο διαφήμισης. Σε αυτήν την περίπτωση, χρησιμοποιείται το scan response — το δεύτερο πακέτο που αποστέλλεται κατόπιν αιτήματος του Central.

Σύμφωνα με το Bluetooth Core Specification 5.4 (2023), ο μέγιστος αριθμός κύριων υπηρεσιών σε έναν διακομιστή GATT δεν περιορίζεται από τις προδιαγραφές, αλλά στην πράξη περιορίζεται από τη μνήμη της συσκευής και τις απαιτήσεις απόδοσης. Για ενσωματωμένες συσκευές με 256 KB μνήμης flash, συνιστώνται όχι περισσότερες από 5–10 υπηρεσίες.

Συχνές ερωτήσεις

Σε τι διαφέρει το 16-bit UUID από το 128-bit UUID;

Τα 16-bit UUID έχουν δεσμευτεί από την Bluetooth SIG για τυπικές υπηρεσίες και καταλαμβάνουν 2 byte στο πακέτο διαφήμισης. Τα 128-bit UUID χρησιμοποιούνται για προσαρμοσμένες υπηρεσίες και καταλαμβάνουν 16 byte. Η επιλογή εξαρτάται από τον τύπο υπηρεσίας: η τυπική λειτουργικότητα χρησιμοποιεί 16-bit UUID, η μοναδική — 128-bit UUID.

Πώς να δημιουργήσετε ένα προσαρμοσμένο 128-bit UUID για υπηρεσία BLE;

Χρησιμοποιήστε UUID v4 — ένα τυχαίο UUID που δημιουργείται από διαδικτυακά εργαλεία, την εντολή τερματικού uuidgen ή το API της γλώσσας προγραμματισμού σας. Παράδειγμα: UUID.fromString(UUID.randomUUID().toString()) σε Java ή UUID() σε Swift.

Χρειάζεται να καταχωρήσω το προσαρμοσμένο UUID στην Bluetooth SIG;

Όχι, δεν απαιτείται εγγραφή. Η Bluetooth SIG καταχωρεί μόνο 16-bit UUID. Τα προσαρμοσμένα 128-bit UUID δημιουργούνται ανεξάρτητα από τον προγραμματιστή και εγγυώνται μοναδικότητα χάρη στον τεράστιο χώρο διευθύνσεων (2^128 συνδυασμοί).

Μπορεί μια υπηρεσία να περιέχει πολλαπλά χαρακτηριστικά;

Ναι, μια τυπική υπηρεσία GATT μπορεί να περιέχει απεριόριστο αριθμό χαρακτηριστικών. Για παράδειγμα, η Battery Service μπορεί να περιέχει Battery Level (0x2A19) και Battery Power State (0x2A1A). Κάθε χαρακτηριστικό έχει το δικό του UUID και σύνολο ιδιοτήτων.

Τι συμβαίνει εάν δύο συσκευές χρησιμοποιούν το ίδιο προσαρμοσμένο UUID;

Εάν τα UUID συμπίπτουν, το Central δεν θα μπορεί να διακρίνει τη μία υπηρεσία από την άλλη χωρίς πρόσθετες πληροφορίες. Η πιθανότητα σύγκρουσης τυχαίων UUID v4 είναι αμελητέα — περίπου 5,3 × 10^−37. Χρησιμοποιήστε γεννήτρια τυχαίων UUID, μην αντιγράφετε UUID από παραδείγματα.

Σύνοψη

  • Service UUID — το παγκόσμιο αναγνωριστικό μιας υπηρεσίας BLE, το οποίο μπορεί να είναι 16-bit (τυπικό) ή 128-bit (προσαρμοσμένο).
  • Η Bluetooth SIG έχει εκχωρήσει περισσότερα από 60 τυπικά UUID — χρησιμοποιήστε τα για συμβατότητα με συσκευές άλλων κατασκευαστών.
  • Τα 128-bit UUID δημιουργούνται από τον προγραμματιστή μέσω UUID v4 και εγγυώνται μοναδικότητα χωρίς κεντρικό μητρώο.
  • Κατά τη σάρωση, το Central φιλτράρει συσκευές βάσει Service UUID, μειώνοντας την κατανάλωση ενέργειας και επιταχύνοντας την αναζήτηση.
  • Μία συσκευή μπορεί να δηλώσει πολλαπλές υπηρεσίες με διαφορετικά UUID — ο αριθμός περιορίζεται από τη μνήμη και το πακέτο διαφήμισης.
  • Σε iOS και Android, οι υπηρεσίες δηλώνονται μέσω CBMutableService και BluetoothGattService αντίστοιχα με καθορισμό UUID.
  • Η σωστή επιλογή UUID επηρεάζει τη συμβατότητα, το μέγεθος του πακέτου διαφήμισης και την ορθή λειτουργία του προφίλ GATT.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης