Advertising Data στο BLE: δομή και τύποι δεδομένων

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

Advertising Data — είναι δομημένα δεδομένα που η συσκευή BLE μεταδίδει σε διαφημιστικά πακέτα για να ταυτοποιήσει τον εαυτό της και τις υπηρεσίες της. Το Bluetooth Core Specification 5.4 (2023) ορίζει τη μορφή AD Structure: κάθε στοιχείο περιέχει μήκος (1 byte), τύπο (1 byte) και τιμή (έως 29 bytes). Η προδιαγραφή περιγράφει συνολικά πάνω από 30 τύπους AD — από Flags και Local Name έως Service UUID και Manufacturer Specific Data. Η σωστή συσκευασία των advertising data είναι κρίσιμη για τη συμβατότητα της συσκευής με iOS, Android και άλλες πλατφόρμες, και καθορίζει την ταχύτητα ανίχνευσης και την ενεργειακή απόδοση της διαφήμισης.

Κύρια σημεία

  • AD Structure — μορφή δεδομένων στο διαφημιστικό πακέτο BLE: μήκος (1 byte), τύπος (1 byte), τιμή (έως 29 bytes).
  • Το διαφημιστικό πακέτο περιορίζεται σε 31 bytes, το scan response — επιπλέον 31 bytes για πρόσθετα δεδομένα.
  • Flags (0x01) — υποχρεωτικός τύπος AD που καθορίζει τις λειτουργίες LE Limited Discoverable και BR/EDR Not Supported.
  • Το Service UUID μεταδίδεται σε συντομευμένη (2 bytes) ή πλήρη (16 bytes) μορφή.
  • Manufacturer Specific Data (0xFF) — ευέλικτος τύπος για οποιαδήποτε προσαρμοσμένα δεδομένα κατασκευαστή.

Τι είναι τα Advertising Data;

Advertising Data — είναι ένα δομημένο σύνολο πεδίων που η συσκευή BLE μεταδίδει σε διαφημιστικά πακέτα για να αναγνωρίσει και να περιγράψει τις δυνατότητές της. Το Central, σαρώνοντας το κανάλι, διαβάζει αυτά τα δεδομένα και λαμβάνει μια απόφαση: να συνδεθεί στη συσκευή, να την αγνοήσει ή να ζητήσει πρόσθετες πληροφορίες μέσω Scan Response.

Τα δεδομένα οργανώνονται σύμφωνα με την αρχή TLV (Type-Length-Value): κάθε στοιχείο AD αποτελείται από τρία πεδία. Length (1 byte) — μήκος Value + Type (δηλαδή το συνολικό μήκος του στοιχείου μείον 1 byte για Length). Type (1 byte) — αναγνωριστικό τύπου δεδομένων από το Bluetooth Assigned Numbers. Value (N bytes) — περιεχόμενο ανάλογα με τον τύπο.

Το τυπικό διαφημιστικό πακέτο μπορεί να περιέχει έως 31 bytes δεδομένων AD. Εάν αυτό δεν είναι αρκετό, χρησιμοποιείται Scan Response (επιπλέον 31 bytes) ή Extended Advertising (BLE 5.0, έως 251 bytes). Τα πρώτα bytes του διαφημιστικού πακέτου είναι δεσμευμένα για την κεφαλίδα PDU και τη διεύθυνση της συσκευής — το ωφέλιμο φορτίο AD ξεκινά από μια μετατόπιση.

Μορφή AD Structure

Κάθε στοιχείο AD στο διαφημιστικό πακέτο ξεκινά με το πεδίο Length (1 byte). Η τιμή Length υποδεικνύει τον αριθμό των bytes που ακολουθούν μετά το Length — δηλαδή Type + Value. Για παράδειγμα, ένα στοιχείο με Length=3 σημαίνει ότι μετά το Length ακολουθούν 1 byte Type και 2 bytes Value. Το πακέτο τελειώνει όταν το άθροισμα των μηκών όλων των στοιχείων φτάσει το μέγεθος των διαφημιστικών δεδομένων.

ΠεδίοΜέγεθοςΠεριγραφή
Length1 byteΜήκος Type + Value (χωρίς το Length)
Type (AD Type)1 byteΑναγνωριστικό τύπου δεδομένων κατά Bluetooth SIG
Value0–29 bytesΔεδομένα συγκεκριμένου τύπου

Ο αναλυτής του Central διαβάζει την ακολουθία στοιχείων AD ξεκινώντας από το πρώτο byte μετά την κεφαλίδα. Εάν Length=0, το στοιχείο αγνοείται και ο αναλυτής προχωρά στο επόμενο byte. Διπλότυποι τύποι AD — πολλαπλά στοιχεία με το ίδιο Type σε ένα πακέτο — επιτρέπονται, αλλά το Central μπορεί να επεξεργαστεί μόνο το πρώτο ή το τελευταίο ανάλογα με την υλοποίηση της στοίβας.

Σημαντικός κανόνας: το άθροισμα όλων των Length(+1) στο πακέτο δεν πρέπει να υπερβαίνει το μέγεθος των διαφημιστικών δεδομένων (31 bytes για το διαφημιστικό PDU). Εάν τα δεδομένα δεν χωρούν, πρέπει να τεθούν προτεραιότητες — ποιοι τύποι AD είναι κρίσιμοι για την πρωτογενή ανίχνευση και ποιοι μπορούν να μεταφερθούν στο Scan Response.

Flags (0x01): υποχρεωτικός τύπος AD

Flags (AD Type 0x01) — υποχρεωτικό στοιχείο στο διαφημιστικό πακέτο κάθε συσκευής BLE. Καταλαμβάνει 3 bytes: Length (0x02), Type (0x01), Value (1 byte bit σημαίες). Οι σημαίες καθορίζουν τις λειτουργίες ανίχνευσης και τις δυνατότητες της συσκευής. Το Core Specification συνιστά τη συμπερίληψη των Flags σε κάθε διαφημιστικό πακέτο.

Κύριες σημαίες: LE Limited Discoverable Mode (bit 0) — η συσκευή είναι ανιχνεύσιμη για περιορισμένο χρόνο, LE General Discoverable Mode (bit 1) — η συσκευή είναι μόνιμα ανιχνεύσιμη, BR/EDR Not Supported (bit 2) — η συσκευή υποστηρίζει μόνο LE, Simultaneous LE and BR/EDR (bit 3) — υποστήριξη και των δύο λειτουργιών. Για καθαρά BLE συσκευές, υποχρεωτικός συνδυασμός: LE General Discoverable + BR/EDR Not Supported.

Η λανθασμένη τιμή Flags είναι μία από τις συχνές αιτίες για τις οποίες μια συσκευή δεν ανιχνεύεται σε iOS ή Android. Για παράδειγμα, εάν η σημαία BR/EDR Not Supported δεν είναι ορισμένη, το iOS μπορεί να επιχειρήσει σύνδεση μέσω κλασικού Bluetooth αντί για BLE. Ελέγχετε την τιμή Flags κατά τον εντοπισμό σφαλμάτων του διαφημιστικού πακέτου με αναλυτή Bluetooth (nRF Connect, Wireshark).

Local Name: όνομα συσκευής

Local Name (AD Type 0x08 ή 0x09) — το εμφανιζόμενο όνομα της συσκευής BLE. Τύπος 0x08 (Shortened Local Name) — συντομευμένο όνομα, χρησιμοποιείται όταν το πλήρες όνομα δεν χωράει στο διαφημιστικό πακέτο. Τύπος 0x09 (Complete Local Name) — πλήρες όνομα της συσκευής. Το μέγιστο μήκος ονόματος είναι 248 bytes, αλλά στο τυπικό διαφημιστικό πακέτο δεν είναι διαθέσιμα περισσότερα από 28 bytes.

Εάν το όνομα της συσκευής υπερβαίνει τον διαθέσιμο χώρο στο διαφημιστικό πακέτο, συνιστάται: τοποθετήστε το συντομευμένο όνομα στο διαφημιστικό PDU (τύπος 0x08) και το πλήρες όνομα στο Scan Response (τύπος 0x09). Το iOS εμφανίζει το όνομα από το διαφημιστικό πακέτο κατά τη σάρωση και το πλήρες όνομα γίνεται διαθέσιμο μετά τη σύνδεση ή το Scan Response.

Κατά την επιλογή ονόματος συσκευής, λάβετε υπόψη: ένα πολύ μεγάλο όνομα καταλαμβάνει χώρο που θα μπορούσε να χρησιμοποιηθεί για Service UUID ή άλλα σημαντικά δεδομένα. Το συνιστώμενο μήκος ονόματος είναι 8–16 χαρακτήρες. Αποφύγετε μη τυπικούς χαρακτήρες και κενά — ορισμένες στοίβες BLE μπορεί να τα επεξεργαστούν λανθασμένα.

Service UUID: αναγνώριση υπηρεσιών

Service UUID (AD Type 0x02–0x07) — ένας από τους πιο σημαντικούς τύπους AD, που επιτρέπει στο Central να καθορίσει ποιες υπηρεσίες παρέχει η συσκευή χωρίς σύνδεση σε αυτήν. Το Bluetooth SIG ορίζει πολλές μορφές μετάδοσης UUID ανάλογα με το μέγεθος: 0x02 (Incomplete 16-bit), 0x03 (Complete 16-bit), 0x04 (Incomplete 32-bit), 0x05 (Complete 32-bit), 0x06 (Incomplete 128-bit), 0x07 (Complete 128-bit).

16-bit UUID (2 bytes) — τυπικές υπηρεσίες Bluetooth SIG, για παράδειγμα 0x180F (Battery Service), 0x180A (Device Information). 128-bit UUID (16 bytes) — προσαρμοσμένες υπηρεσίες που ορίζονται από τον προγραμματιστή. Το 16-bit UUID καταλαμβάνει μόνο 4 bytes στο AD (Length + Type + 2 bytes UUID), ενώ το 128-bit — 18 bytes. Εάν πολλά προσαρμοσμένα UUID πρέπει να μεταδοθούν σε ένα πακέτο, ενδέχεται να μην χωρέσουν σε 31 bytes.

Συνιστάται η χρήση τύπου Incomplete (0x02/0x04/0x06) εάν δεν μεταδίδονται όλα τα UUID της συσκευής, αλλά μόνο τα πιο σημαντικά για φιλτράρισμα. Η πλήρης λίστα UUID μεταδίδεται μέσω Scan Response ή GATT Discovery μετά τη σύνδεση. Αυτό εξοικονομεί χώρο στο διαφημιστικό πακέτο για άλλους τύπους AD.

Manufacturer Specific Data

Manufacturer Specific Data (AD Type 0xFF) — ο πιο ευέλικτος τύπος AD, που προορίζεται για τη μετάδοση προσαρμοσμένων δεδομένων κατασκευαστή. Τα πρώτα 2 bytes του Value είναι το Company Identifier Code, που εκχωρείται από το Bluetooth SIG (για παράδειγμα, 0x004C για Apple, 0x0075 για Samsung). Τα υπόλοιπα bytes είναι αυθαίρετα δεδομένα σε μορφή που ορίζεται από τον κατασκευαστή.

Η Apple χρησιμοποιεί Manufacturer Data για iBeacon: Company ID (0x004C), τύπος Beacon (0x0215), UUID (16 bytes), Major (2 bytes), Minor (2 bytes), TX Power (1 byte). Η Google χρησιμοποιεί ανάλογη μορφή για το Eddystone. Οι κατασκευαστές συσκευών IoT συχνά τοποθετούν στο Manufacturer Data μετρήσεις αισθητήρων ή κατάσταση συσκευής.

js
// Ανάλυση Manufacturer Specific Data στο Central
function parseManufacturerData(data) {
    const view = new DataView(data.buffer);

    // Κωδικός αναγνώρισης εταιρείας (πρώτα 2 bytes)
    const companyId = view.getUint16(0, true);

    // Έλεγχος για Apple iBeacon
    if (companyId === 0x004C) {
        return parseIBeacon(view);
    }

    return null;
}

Κατά τη χρήση Manufacturer Data, είναι σημαντικό να τηρείται ο περιορισμός μεγέθους: 31 bytes για ολόκληρο το διαφημιστικό πακέτο μείον τους υποχρεωτικούς τύπους AD. Για το Apple iBeacon, ολόκληρο το πακέτο καταλαμβάνει 30 bytes, αφήνοντας χώρο μόνο για Flags (3 bytes). Για το Eddystone — έως 31 bytes. Οι συμπαγείς προσαρμοσμένες μορφές μπορούν να περιλαμβάνουν θερμοκρασία, υγρασία ή πίεση σε 4–8 bytes.

Στρατηγική συσκευασίας δεδομένων

Η σωστή συσκευασία advertising data — είναι η τέχνη της τοποθέτησης μέγιστων χρήσιμων πληροφοριών στον περιορισμένο χώρο των 31 bytes. Η στρατηγική εξαρτάται από τον προορισμό της συσκευής: ένας φάρος χρειάζεται αναγνωριστικό, ένας αισθητήρας IoT χρειάζεται μετρήσεις, ένα fitness tracker χρειάζεται όνομα και UUID υπηρεσιών. Γενική αρχή: όσο πιο γρήγορα πρέπει να λάβει απόφαση το Central, τόσο πιο κρίσιμα δεδομένα πρέπει να βρίσκονται στο διαφημιστικό PDU.

Συνιστώμενη στρατηγική: διαφημιστικό PDU (πρώτα 31 bytes) — Flags (3 bytes) + ένα 16-bit Service UUID (4 bytes) + συντομευμένο όνομα (έως 12 χαρακτήρες = 14 bytes) + Manufacturer Data (έως 10 bytes). Scan Response (δεύτερα 31 bytes) — πλήρες όνομα (υπόλοιπο) + πρόσθετα Service UUID + TX Power Level (3 bytes). Αυτή η κατανομή επιτρέπει στο Central να φιλτράρει γρήγορα συσκευές κατά UUID.

ΠροτεραιότηταΤύπος ADΜέγεθοςΤοποθετήστε σε
1 (υποχρεωτικό)Flags (0x01)3 bytesΔιαφημιστικό PDU
2 (φιλτράρισμα)Service UUID (0x02–0x03)4+ bytesΔιαφημιστικό PDU
3 (αναγνώριση)Local Name (0x08–0x09)2+ bytesΔιαφημιστικό PDU (συντομευμένο)
4 (πρόσθετο)TX Power Level (0x0A)3 bytesScan Response
5 (προσαρμοσμένο)Manufacturer Data (0xFF)4+ bytesΔιαφημιστικό PDU / Scan Response
6 (πλήρη δεδομένα)Υπόλοιπα UUIDΑνά μέγεθοςScan Response

Ο εντοπισμός σφαλμάτων advertising data είναι υποχρεωτικό στάδιο ανάπτυξης συσκευής BLE. Χρησιμοποιήστε το nRF Connect (Nordic Semiconductor) ή το Wireshark με αναλυτή Bluetooth για προβολή ακατέργαστων δεδομένων πακέτου. Ελέγξτε ότι όλοι οι τύποι AD έχουν σωστό Length, ότι το άθροισμα μηκών δεν υπερβαίνει 31 bytes και ότι τα Flags έχουν οριστεί σωστά για το σενάριο χρήσης σας.

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

Τι συμβαίνει εάν το άθροισμα στοιχείων AD υπερβαίνει τα 31 bytes;

Η στοίβα Bluetooth Controller θα απορρίψει τα δεδομένα που υπερβαίνουν το όριο ή δεν θα στείλει το πακέτο. Ελέγχετε το συνολικό μήκος των στοιχείων AD κατά τη σύνθεση του διαφημιστικού πακέτου. Εάν τα δεδομένα δεν χωρούν — μεταφέρετε μέρος στο Scan Response ή χρησιμοποιήστε Extended Advertising (BLE 5.0) με όριο 251 bytes.

Μπορούν να μεταδοθούν μετρήσεις αισθητήρων στο διαφημιστικό πακέτο;

Ναι, μέσω Manufacturer Specific Data (0xFF). Συσκευάστε τις μετρήσεις σε 4–8 bytes: για παράδειγμα, θερμοκρασία (2 bytes σε μορφή fixed-point), υγρασία (2 bytes), τάση μπαταρίας (2 bytes). Αυτή η προσέγγιση επιτρέπει στο Central να διαβάζει δεδομένα χωρίς σύνδεση, εξοικονομώντας ενέργεια.

Ποιον τύπο AD να χρησιμοποιήσω για προσαρμοσμένες υπηρεσίες;

Για προσαρμοσμένες υπηρεσίες, χρησιμοποιήστε 128-bit UUID (AD Type 0x06–0x07). Εάν το UUID δεν χωράει στο διαφημιστικό PDU (16 bytes για ένα UUID), μεταφέρετέ το στο Scan Response ή χρησιμοποιήστε συντομευμένη μορφή Incomplete (0x06) για να υποδείξετε μόνο τα πρώτα ένα ή δύο UUID.

Ποια είναι η διαφορά μεταξύ Complete και Incomplete τύπων Service UUID;

Complete — στο πακέτο αναφέρονται όλα τα UUID υπηρεσιών της συσκευής. Incomplete — μόνο ένα μέρος των UUID (συνήθως τα πιο σημαντικά). Το Central δεν μπορεί να βασιστεί στο Incomplete ως πλήρη λίστα, αλλά το χρησιμοποιεί για γρήγορο φιλτράρισμα. Η πλήρης λίστα είναι διαθέσιμη μετά το GATT Discovery.

Γιατί το iOS δεν βλέπει τη συσκευή μου BLE;

Συχνή αιτία — λανθασμένο Flags (0x01). Βεβαιωθείτε ότι το bit BR/EDR Not Supported είναι ορισμένο. Δεύτερη αιτία — απουσία Service UUID στο διαφημιστικό πακέτο (το iOS φιλτράρει κατά UUID). Τρίτη — η συσκευή διαφημίζεται πολύ σπάνια (το iOS αναμένει διάστημα όχι μεγαλύτερο από 1000 ms).

Σύνοψη

  • Advertising Data — δομημένα δεδομένα σε μορφή AD Structure (Length-Type-Value), που μεταδίδονται σε διαφημιστικά πακέτα BLE.
  • Το τυπικό διαφημιστικό πακέτο περιέχει έως 31 bytes δεδομένων, το Scan Response — επιπλέον 31 bytes για πρόσθετες πληροφορίες.
  • Flags (0x01) — υποχρεωτικός τύπος AD που καθορίζει τις λειτουργίες ανίχνευσης. Για συσκευές BLE, το BR/EDR Not Supported είναι υποχρεωτικό.
  • Το Service UUID μεταδίδεται σε μορφή 16-bit (2 bytes) ή 128-bit (16 bytes), Complete ή Incomplete — ανάλογα με τον διαθέσιμο χώρο.
  • Manufacturer Specific Data (0xFF) — ευέλικτος τύπος για προσαρμοσμένα δεδομένα, που χρησιμοποιείται σε φάρους iBeacon, Eddystone και συσκευές IoT.
  • Στρατηγική συσκευασίας: υποχρεωτικοί τύποι AD (Flags, Service UUID, συντομευμένο όνομα) — στο διαφημιστικό PDU, πρόσθετοι — στο Scan Response.
  • Ο εντοπισμός σφαλμάτων advertising data μέσω nRF Connect ή Wireshark — υποχρεωτικό στάδιο ανάπτυξης για έλεγχο ορθότητας της δομής AD.

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

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

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

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