Peripheral — είναι μια συσκευή στην αρχιτεκτονική Bluetooth Low Energy που διαφημίζει τις υπηρεσίες της μέσω πακέτων advertising και περιμένει σύνδεση από το Central. Στο οικοσύστημα IoT, το Peripheral είναι συνήθως μια συσκευή με περιορισμένη κατανάλωση ενέργειας: αισθητήρας θερμοκρασίας, έξυπνη λάμπα, βραχιόλι γυμναστικής, beacon. Το Bluetooth Core Specification 5.4 (2023) ορίζει το πρωτόκολλο διαφήμισης: το Peripheral στέλνει περιοδικά πακέτα advertising που περιέχουν το όνομα της συσκευής, τη λίστα υπηρεσιών και δεδομένα χρήστη, ενώ το Central σαρώνει αυτά τα πακέτα και αποφασίζει αν θα συνδεθεί. Μετά τη δημιουργία σύνδεσης, το Peripheral λειτουργεί ως διακομιστής GATT, παρέχοντας υπηρεσίες και χαρακτηριστικά για ανάγνωση και εγγραφή.
Κύρια σημεία
Peripheral — είναι μια συσκευή BLE που υλοποιεί διακομιστή GATT και διαφημίζει τις δυνατότητές της μέσω καναλιών advertising. Σε αντίθεση με το Central, που αναζητά ενεργά συσκευές, το Peripheral περιμένει παθητικά σύνδεση. Πρόκειται για ένα ασύμμετρο μοντέλο, βελτιστοποιημένο για ενεργειακή απόδοση συσκευών με μπαταρία.
Το Peripheral μπορεί να βρίσκεται σε διάφορες λειτουργίες: advertising (διαφήμιση), connected (συνδεδεμένο με Central), sleeping (ύπνος με απενεργοποιημένη διαφήμιση). Στη λειτουργία advertising, το Peripheral στέλνει περιοδικά σύντομα πακέτα δεδομένων, καταναλώνοντας ελάχιστη ενέργεια. Μετά τη σύνδεση, το Peripheral μεταβαίνει σε λειτουργία connected, όπου ανταλλάσσει δεδομένα με το Central σύμφωνα με το συμφωνημένο connection interval.
Σύμφωνα με το Bluetooth Core Specification 5.4 (2023), μια συσκευή μπορεί δυναμικά να εναλλάσσεται μεταξύ των ρόλων Peripheral και Central, αλλά κάθε στιγμή, για μία σύνδεση, ο ρόλος είναι σταθερός. Ένα τυπικό σενάριο: ο αισθητήρας IoT λειτουργεί συνεχώς στο ρόλο Peripheral, και το smartphone διαχειρίζεται τη σύνδεση ως Central.
Είναι σημαντικό για τον προγραμματιστή να κατανοήσει: το Peripheral καθορίζει ποιες υπηρεσίες και χαρακτηριστικά είναι διαθέσιμα και διαχειρίζεται την πρόσβαση σε αυτά. Η δομή του διακομιστή GATT στο Peripheral καθορίζει ποια δεδομένα μπορεί να διαβάσει το Central και ποιες εντολές μπορεί να γράψει.
Advertising (διαφήμιση) — είναι ο μηχανισμός με τον οποίο το Peripheral ανακοινώνει την παρουσία του. Το Peripheral στέλνει πακέτα advertising σε τρία αποκλειστικά κανάλια (37, 38, 39) με διάστημα από 20 ms έως 10.24 δευτερόλεπτα. Κάθε πακέτο διαφήμισης περιέχει σταθερές πληροφορίες και μπορεί να περιλαμβάνει προαιρετικά δεδομένα.
Υπάρχουν δύο τύποι πακέτων διαφήμισης: advertising PDU (κύριο πακέτο) και scan response PDU (απάντηση σε αίτημα Central). Το κύριο πακέτο περιέχει υποχρεωτικά πεδία: τύπο πακέτου, διεύθυνση αποστολέα, δεδομένα. Εάν το Central στείλει αίτημα σάρωσης (scan request), το Peripheral απαντά με ένα πρόσθετο πακέτο που περιέχει πληρέστερες πληροφορίες — για παράδειγμα, το πλήρες όνομα της συσκευής.
Οι παράμετροι advertising επηρεάζουν την ταχύτητα ανίχνευσης και την κατανάλωση ενέργειας. Advertising interval — ο χρόνος μεταξύ αποστολής πακέτων. Όσο μικρότερο είναι το διάστημα, τόσο γρηγορότερα το Central ανιχνεύει τη συσκευή, αλλά τόσο περισσότερη ενέργεια καταναλώνει το Peripheral. Συνιστώμενο διάστημα: 100–1000 ms για τις περισσότερες συσκευές.
| Παράμετρος | Εύρος | Επίπτωση | Σύσταση |
|---|---|---|---|
| Advertising Interval | 20 ms – 10.24 s | Ταχύτητα ανίχνευσης, ενέργεια | 100–1000 ms για ισορροπία |
| Advertising Channels | 37, 38, 39 | Αξιοπιστία ανίχνευσης | Και τα 3 κανάλια υποχρεωτικά |
| Tx Power | −20 – +10 dBm | Εμβέλεια, παρεμβολές | 0 dBm για εσωτερικό, +4 dBm για εξωτερικό |
| Advertising Timeout | 0 – 180 δευτερόλεπτα | Διάρκεια διαφήμισης | 0 (άπειρο) για beacons |
Το πακέτο διαφήμισης BLE έχει όριο 31 byte για το advertising PDU και επιπλέον 31 byte για το scan response. Μέσα στο πακέτο, τα δεδομένα οργανώνονται σε μορφή AD Structure (Advertising Data Structure): κάθε πεδίο έχει τύπο (1 byte), μήκος (1 byte) και τιμή.
Οι πιο συχνά χρησιμοποιούμενοι AD Type: Flags (0x01) — λειτουργίες σύνδεσης και ανίχνευσης, Local Name (0x08 ή 0x09) — όνομα συσκευής, Service UUID List (0x02–0x07) — λίστα UUID υπηρεσιών, Manufacturer Specific Data (0xFF) — δεδομένα κατασκευαστή. Η σωστή συσκευασία δεδομένων σε ένα πακέτο 31 byte είναι σημαντικό καθήκον για τον προγραμματιστή ενσωματωμένων συσκευών.
Για συσκευές που χρειάζεται να μεταδώσουν περισσότερα δεδομένα, υπάρχει το extended advertising (BLE 5.0+), το οποίο αυξάνει το μέγεθος του πακέτου διαφήμισης σε 251 byte και προσθέτει νέους τύπους πακέτων. Το extended advertising υποστηρίζει επίσης κωδικοποιημένα κανάλια (coded PHY) για αύξηση της εμβέλειας έως 1 km σε ανοιχτό χώρο.
Κατά το σχεδιασμό του πακέτου διαφήμισης, λάβετε υπόψη: όσο περισσότερα δεδομένα στο πακέτο advertising, τόσο μεγαλύτερη η πιθανότητα σύγκρουσης με άλλες συσκευές. Για γρήγορη ανίχνευση, συνιστάται η τοποθέτηση μόνο κρίσιμων δεδομένων (Service UUID) στο advertising PDU και των πρόσθετων δεδομένων — στο scan response.
Ο διακομιστής GATT στο Peripheral περιέχει όλες τις υπηρεσίες και χαρακτηριστικά που το Central μπορεί να ανακαλύψει και με τα οποία μπορεί να αλληλεπιδράσει. Μετά τη σύνδεση, το Central ανακαλύπτει υπηρεσίες (discover services), στη συνέχεια χαρακτηριστικά (discover characteristics) και αλληλεπιδρά μαζί τους μέσω του πρωτοκόλλου GATT.
Το Peripheral ως διακομιστής GATT πρέπει να επεξεργάζεται σωστά τα αιτήματα από το Central: ανάγνωση (read request), εγγραφή (write request), ειδοποιήσεις (notification) και επιβεβαιωμένες ειδοποιήσεις (indication). Κάθε αίτημα διέρχεται από τον πίνακα GATT, όπου κάθε χαρακτηριστικό (υπηρεσία, χαρακτηριστικό, περιγραφέας) αντιστοιχεί σε ένα Handle — μια 16-bit διεύθυνση.
Ο προγραμματιστής του Peripheral καθορίζει τα δικαιώματα πρόσβασης για κάθε χαρακτηριστικό: μόνο ανάγνωση, μόνο εγγραφή, ανάγνωση και εγγραφή, με ή χωρίς κρυπτογράφηση. Για εμπιστευτικά δεδομένα (προσωπικές πληροφορίες, ιατρικές παραμέτρους) συνιστάται η απαίτηση κρυπτογράφησης μέσω MITM Protection.
CBPeripheralManager — η κλάση Core Bluetooth για την υλοποίηση του ρόλου Peripheral στο iOS. Διαχειρίζεται τον διακομιστή GATT, δημοσιεύει υπηρεσίες και χαρακτηριστικά, επεξεργάζεται αιτήματα από το Central. Σε αντίθεση με το CBCentralManager, το CBPeripheralManager δεν σαρώνει — μόνο διαφημίζει και εξυπηρετεί συνδέσεις.
Τα κύρια βήματα υλοποίησης Peripheral στο iOS: αρχικοποίηση του CBPeripheralManager, προσθήκη υπηρεσιών μέσω add, έναρξη διαφήμισης μέσω startAdvertising, επεξεργασία αιτημάτων από το Central μέσω του εκπροσώπου CBPeripheralManagerDelegate.
import CoreBluetooth
class BLEPeripheralManager: NSObject, CBPeripheralManagerDelegate {
private var peripheralManager: CBPeripheralManager!
func startAdvertising() {
let advertisementData: [String: Any] = [
CBAdvertisementDataLocalNameKey: "BLE Sensor",
CBAdvertisementDataServiceUUIDsKey: [
CBUUID("180F")
]
]
peripheralManager.startAdvertising(advertisementData)
}
func peripheralManagerDidUpdateState(
_ peripheral: CBPeripheralManager
) {
if peripheral.state == .poweredOn {
startAdvertising()
}
}
}
Το iOS επιτρέπει στο Peripheral να λειτουργεί σε λειτουργία παρασκηνίου όταν το κλειδί bluetooth-peripheral είναι παρόν στο Background Modes. Στο παρασκήνιο, το iOS μπορεί να διαφημίζει με περιορισμένο σύνολο δεδομένων και να εξυπηρετεί συνδέσεις. Για μακροχρόνια διαφήμιση (πάνω από 180 δευτερόλεπτα), χρησιμοποιήστε την επιλογή CBAdvertisementDataWaitForResponseFromCentral για εξοικονόμηση ενέργειας.
Android παρέχει το BluetoothLeAdvertiser για εργασία στο ρόλο Peripheral (από API 21). Το API επιτρέπει την έναρξη διαφήμισης με παραμέτρους που μπορούν να ρυθμιστούν: ισχύς πομπού, διάστημα διαφήμισης, δεδομένα πακέτου. Το Android υποστηρίζει επίσης extended advertising (BLE 5.0) σε συμβατές συσκευές.
import android.bluetooth.le.*;
private BluetoothLeAdvertiser advertiser;
public void startPeripheral() {
BluetoothAdapter adapter =
BluetoothAdapter.getDefaultAdapter();
advertiser = adapter.getBluetoothLeAdvertiser();
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(
new ParcelUuid(
UUID.fromString("0000180F-0000-1000-8000-00805F9B34FB")
)
)
.build();
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER)
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
.build();
advertiser.startAdvertising(
settings, data, advertiseCallback
);
}
Στο Android, η υποστήριξη για Peripheral εξαρτάται από τον κατασκευαστή και την έκδοση OS. Δεν υποστηρίζουν όλες οι συσκευές το BluetoothLeAdvertiser — ελέγξτε μέσω adapter.isMultipleAdvertisementSupported(). Από το Android 10, για εργασία στο ρόλο Peripheral απαιτείται άδεια BLUETOOTH_ADVERTISE, καθώς και αίτημα χρόνου εκτέλεσης για εφαρμογές με target SDK 31+.
Ενεργειακή απόδοση — το βασικό πλεονέκτημα του BLE, και το Peripheral παίζει κύριο ρόλο σε αυτό. Η συσκευή μπορεί να λειτουργήσει από μπαταρία CR2032 (220 mAh) για περισσότερο από ένα χρόνο χάρη στη βελτιστοποιημένη κατανάλωση ενέργειας. Το Peripheral περνά το μεγαλύτερο μέρος του χρόνου σε λειτουργία ύπνου με απενεργοποιημένη διαφήμιση, ξυπνώντας μόνο για να στείλει ένα πακέτο διαφήμισης ή να επεξεργαστεί ένα αίτημα από το Central.
Η κατανάλωση ενέργειας του Peripheral σε διάφορες λειτουργίες: λειτουργία ύπνου (deep sleep) — 1–5 µA, idle με ενεργοποιημένο χρονοδιακόπτη — 10–50 µA, advertising — 5–15 mA (κατά τη διάρκεια αποστολής πακέτου), connected — 5–10 mA (κατά τη διάρκεια connection event). Με advertising interval 1000 ms και διάρκεια πακέτου 4 ms, το μέσο ρεύμα είναι περίπου 50–100 µA.
Σύμφωνα με την Texas Instruments Application Report (SWRA478, 2024), η βελτιστοποίηση του advertising interval από 100 ms σε 1000 ms μειώνει τη μέση κατανάλωση ενέργειας κατά 90%. Πρόσθετη εξοικονόμηση επιτυγχάνεται με τη χρήση slave latency (παράλειψη connection events), μείωση του Tx Power σε μικρές αποστάσεις και απενεργοποίηση της διαφήμισης μετά τη σύνδεση (connectable advertising).
Συχνές Ερωτήσεις
Ναι, μέσω του μηχανισμού ειδοποιήσεων (Notify/Indicate). Αν και ο εκκινητής της σύνδεσης είναι πάντα το Central, μετά τη σύνδεση το Peripheral μπορεί να στείλει δεδομένα μέσω ειδοποιήσεων GATT χωρίς ρητό αίτημα από το Central. Για αυτό, το Central πρέπει να εγγραφεί εκ των προτέρων μέσω CCCD.
Η διάρκεια διαφήμισης δεν περιορίζεται από την προδιαγραφή, αλλά στην πράξη περιορίζεται από την ενέργεια της μπαταρίας. Στο iOS, το Peripheral μπορεί να διαφημίζεται στο παρασκήνιο όχι περισσότερο από 180 δευτερόλεπτα ανά συνεδρία χωρίς πρόσθετες ρυθμίσεις. Στο Android, η διαφήμιση μπορεί να λειτουργεί απεριόριστα, αλλά μειώνει σημαντικά τον χρόνο αυτόνομης λειτουργίας.
Αυξήστε το advertising interval (συνιστάται 500–1000 ms), χρησιμοποιήστε slave latency για παράλειψη connection events, απενεργοποιήστε τη διαφήμιση μετά τη σύνδεση και επιλέξτε την ελάχιστη Tx Power που επαρκεί για σταθερή επικοινωνία στην απαιτούμενη απόσταση.
Non-connectable advertising — λειτουργία κατά την οποία το Peripheral διαφημίζεται αλλά δεν δέχεται αιτήματα σύνδεσης. Χρησιμοποιείται για beacons που μόνο μεταδίδουν δεδομένα (π.χ. αναγνωριστικό καταστήματος) χωρίς δημιουργία αμφίδρομης σύνδεσης. Εξοικονομεί ενέργεια σε σύγκριση με το connectable advertising.
Σε 31 byte μπορούν να συμπεριληφθούν: σημαίες (3 byte), όνομα συσκευής (έως 28 byte σε συντομευμένη μορφή), λίστα UUID υπηρεσιών (2–16 byte ανά UUID), δεδομένα κατασκευαστή (έως 26 byte). Βέλτιστη στρατηγική — τοποθετήστε τα UUID υπηρεσιών στο advertising PDU για φιλτράρισμα και το πλήρες όνομα στο scan response.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης