Central — είναι μια συσκευή στην αρχιτεκτονική Bluetooth Low Energy που εκκινεί τη σάρωση, δημιουργεί σύνδεση και διαχειρίζεται την ανταλλαγή δεδομένων με περιφερειακές συσκευές. Στο πλαίσιο της ανάπτυξης εφαρμογών για κινητά, το Central είναι ένα smartphone ή tablet σε iOS ή Android που συνδέεται με αισθητήρες BLE, ιχνηλάτες fitness και έξυπνα αξεσουάρ. Σύμφωνα με το Bluetooth Core Specification 5.4 (2023), το Central μπορεί να υποστηρίζει ταυτόχρονα έως 7 συνδέσεις με διαφορετικά Peripheral, αν και ο πραγματικός περιορισμός εξαρτάται από τον κατασκευαστή του chip και την έκδοση του λειτουργικού συστήματος. Το Core Bluetooth στο iOS και το android.bluetooth.le στο Android παρέχουν πλήρες API για τη διαχείριση του ρόλου Central.
Βασικά σημεία
Central — είναι ένας πελάτης GATT στην αρχιτεκτονική Bluetooth Low Energy που εκκινεί όλες τις επικοινωνίες. Σε αντίθεση με το Peripheral, που περιμένει παθητικά σύνδεση και διαφημίζει τις υπηρεσίες του, το Central σαρώνει ενεργά τον αέρα, ανιχνεύει διαφημιστικά πακέτα και εκκινεί τη σύνδεση.
Το ασύμμετρο μοντέλο Central-Peripheral είναι ένα θεμελιώδες χαρακτηριστικό του BLE. Το Central διαχειρίζεται τη λογική της αλληλεπίδρασης: αποφασίζει σε ποια συσκευή να συνδεθεί, ποιες υπηρεσίες να εξετάσει, ποια χαρακτηριστικά να διαβάσει και να γράψει. Peripheral εκτελεί το ρόλο του διακομιστή δεδομένων — αποθηκεύει υπηρεσίες και χαρακτηριστικά, αλλά δεν εκκινεί συνδέσεις.
Σύμφωνα με το Bluetooth Core Specification 5.4 (2023), μια συσκευή μπορεί ταυτόχρονα να είναι Central και Peripheral (dual role). Για παράδειγμα, ένα smartphone μπορεί να είναι Central για ένα fitness bracelet και Peripheral για ένα άλλο smartphone που μεταφέρει αρχεία. Ωστόσο, η ταυτόχρονη λειτουργία και στους δύο ρόλους αυξάνει την κατανάλωση ενέργειας και την πολυπλοκότητα διαχείρισης συνδέσεων.
Στο οικοσύστημα ανάπτυξης για κινητά, ο ρόλος Central είναι το πιο συνηθισμένο σενάριο. Η εφαρμογή στο smartphone αναζητά συσκευές BLE (αισθητήρες, ακουστικά, βραχιόλια), συνδέεται σε αυτές και λαμβάνει δεδομένα. Ο προγραμματιστής χρησιμοποιεί το API του λειτουργικού συστήματος για να εργαστεί με το Central: CBCentralManager στο iOS, BluetoothLeScanner και BluetoothGatt στο Android.
Σάρωση — είναι το πρώτο στάδιο εργασίας του Central. Η συσκευή ακούει τα ραδιοκανάλια BLE (37, 38, 39) για να ανιχνεύσει διαφημιστικά πακέτα που στέλνονται περιοδικά από το Peripheral. Κάθε διαφημιστικό πακέτο περιέχει το όνομα της συσκευής, μια λίστα UUID υπηρεσιών και δεδομένα χρήστη.
Το Central μπορεί να λειτουργήσει σε δύο λειτουργίες σάρωσης: passive scanning (μόνο λήψη διαφημιστικών πακέτων) και active scanning (αποστολή αιτήματος σάρωσης για λήψη πρόσθετων δεδομένων μέσω scan response). Το passive scanning εξοικονομεί ενέργεια αλλά δίνει λιγότερες πληροφορίες. Το active scanning επιτρέπει τη λήψη πλήρων δεδομένων του διαφημιστικού πακέτου, συμπεριλαμβανομένου του ονόματος συσκευής και της πλήρους λίστας υπηρεσιών.
Το φιλτράρισμα βάσει UUID — μια σημαντική βελτιστοποίηση. Το Central μπορεί να σαρώνει μόνο συσκευές με συγκεκριμένο Service UUID, αγνοώντας τις υπόλοιπες. Αυτό όχι μόνο εξοικονομεί ενέργεια, αλλά και απλοποιεί τη λογική της εφαρμογής: ο delegate λαμβάνει μόνο σχετικές συσκευές.
import CoreBluetooth
class BLECentralManager: NSObject, CBCentralManagerDelegate {
private var centralManager: CBCentralManager!
override init() {
super.init()
centralManager = CBCentralManager(
delegate: self,
queue: nil
)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
central.scanForPeripherals(
withServices: nil,
options: [
CBCentralManagerScanOptionAllowDuplicatesKey: false
]
)
}
}
}
Διαχείριση συνδέσεων — η κύρια ευθύνη του Central. Μετά την ανίχνευση κατάλληλου Peripheral, το Central εκκινεί τη σύνδεση. Η σύνδεση BLE δημιουργείται μέσω της διαδικασίας εγκατάστασης σύνδεσης, η οποία περιλαμβάνει ανταλλαγή παραμέτρων: connection interval, slave latency και supervision timeout.
Το connection interval καθορίζει πόσο συχνά το Central και το Peripheral ανταλλάσσουν δεδομένα μετά τη σύνδεση. Το διάστημα μπορεί να είναι από 7.5 ms έως 4 δευτερόλεπτα. Όσο μικρότερο είναι το διάστημα, τόσο μεγαλύτερο είναι το εύρος ζώνης, αλλά και η κατανάλωση ενέργειας. Slave latency επιτρέπει στο Peripheral να παραλείπει πολλά γεγονότα σύνδεσης για εξοικονόμηση ενέργειας. Supervision timeout — ο μέγιστος χρόνος χωρίς απόκριση, μετά τον οποίο η σύνδεση θεωρείται χαμένη.
Το Central είναι υπεύθυνο για την αποσύνδεση μετά την ολοκλήρωση της ανταλλαγής δεδομένων. Οι συσκευές BLE συνήθως δεν διατηρούν τη σύνδεση μόνιμα — το Central συνδέεται, λαμβάνει δεδομένα και αποσυνδέεται. Αυτό είναι ένα τυπικό μοτίβο για αισθητήρες IoT: το Central σαρώνει, βρίσκει έναν αισθητήρα θερμοκρασίας, συνδέεται, διαβάζει την τιμή και αποσυνδέεται.
| Παράμετρος | Εύρος | Σκοπός | Σύσταση |
|---|---|---|---|
| Connection Interval | 7.5 ms – 4 s | Συχνότητα ανταλλαγής δεδομένων | 30–50 ms για ροές, 1–4 s για σπάνια δεδομένα |
| Slave Latency | 0–499 συμβάντα | Παράλειψη συμβάντων από το Peripheral | 4–10 για εξοικονόμηση ενέργειας αισθητήρα |
| Supervision Timeout | 100 ms – 32 s | Timeout απώλειας σύνδεσης | 6–10 δευτερόλεπτα για τα περισσότερα σενάρια |
| MTU | 23–517 bytes | Μέγεθος πακέτου ATT | Ζητήστε το μέγιστο κατά τη σύνδεση |
Core Bluetooth — το πλαίσιο της Apple για εργασία με BLE σε iOS και macOS. Η κλάση CBCentralManager παρέχει πλήρες API για την υλοποίηση του ρόλου Central: σάρωση, σύνδεση, διαχείριση συνδέσεων. Η εργασία με το Central στο iOS βασίζεται στο μοντέλο delegate: το CBCentralManagerDelegate λαμβάνει συμβάντα αλλαγής κατάστασης, ανίχνευσης συσκευών και αποτελεσμάτων σύνδεσης.
Τα κύρια βήματα εργασίας του Central στο iOS: αρχικοποίηση CBCentralManager, έλεγχος κατάστασης Bluetooth, έναρξη σάρωσης, επεξεργασία ανιχνευμένων συσκευών μέσω delegate, σύνδεση στο επιλεγμένο Peripheral, ανίχνευση υπηρεσιών και χαρακτηριστικών, ανταλλαγή δεδομένων.
// Σύνδεση με το ανιχνευμένο Peripheral
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// Διατήρηση αναφοράς στο peripheral και σύνδεση
discoveredPeripheral = peripheral
central.connect(peripheral, options: nil)
}
// Επιτυχής σύνδεση
func centralManager(
_ central: CBCentralManager,
didConnect peripheral: CBPeripheral
) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}
Το iOS περιορίζει την εργασία BLE στο παρασκήνιο: σε λειτουργία παρασκηνίου, η εφαρμογή μπορεί να σαρώνει μόνο με συγκεκριμένα κλειδιά στο Info.plist, και οι συνδεδεμένες συσκευές μπορούν να ειδοποιούν το Central για αλλαγές δεδομένων. Για κρίσιμες εφαρμογές (ιατρικές συσκευές) χρησιμοποιήστε Background Modes με το κλειδί bluetooth-central.
Android παρέχει το API BluetoothLeScanner για σάρωση συσκευών BLE και BluetoothGatt για διαχείριση συνδέσεων. Από το Android 5.0 (API 21), το BluetoothLeScanner αντικατέστησε το παρωχημένο startLeScan. Το API απαιτεί άδειες BLUETOOTH, BLUETOOTH_ADMIN και ACCESS_FINE_LOCATION (ή ACCESS_BACKGROUND_LOCATION για Android 10+).
import android.bluetooth.le.*;
import android.bluetooth.*;
private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;
// Ρύθμιση σάρωσης
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
// Έναρξη σάρωσης
scanner.startScan(null, settings, new ScanCallback() {
@Override
public void onScanResult(
int callbackType,
ScanResult result
) {
BluetoothDevice device = result.getDevice();
// Σύνδεση με συσκευή
bluetoothGatt = device.connectGatt(
context, false, gattCallback
);
}
});
Στο Android είναι σημαντικό να λαμβάνονται υπόψη οι περιορισμοί σάρωσης: από το Android 7 (API 24), η σάρωση δεν μπορεί να ξεκινήσει περισσότερες από 5 φορές σε 30 δευτερόλεπτα σε εφαρμογές που δεν χρησιμοποιούν Location. Το Android 12+ απαιτεί άδειες BLUETOOTH_SCAN, BLUETOOTH_CONNECT και ADVERTISE, καθώς και runtime αίτηση αυτών των αδειών.
Η κατανάλωση ενέργειας του Central είναι υψηλότερη από αυτή του Peripheral λόγω της ανάγκης συνεχούς σάρωσης των ραδιοκαναλιών. Το Central λαμβάνει δεδομένα μέσω πακέτων BLE, τα επεξεργάζεται, διαχειρίζεται συνδέσεις και συχνά εκτελεί υπολογισμούς στον επεξεργαστή της εφαρμογής. Σύμφωνα με το Bluetooth SIG, η σάρωση καταναλώνει από 30 mA έως 100 mA ανάλογα με τη λειτουργία.
Υπάρχουν διάφορες στρατηγικές εξοικονόμησης ενέργειας για το Central. Σάρωση διαστήματος — η πιο αποτελεσματική μέθοδος: το Central σαρώνει σε σύντομα παράθυρα (scan window) με μεγάλες παύσεις (scan interval). Για παράδειγμα, με scan window 30 ms και scan interval 1000 ms, η κατανάλωση ενέργειας μειώνεται κατά 97% σε σύγκριση με τη συνεχή σάρωση.
Πρόσθετη βελτιστοποίηση — φιλτράρισμα βάσει UUID. Το Central επεξεργάζεται ταχύτερα μόνο σχετικά διαφημιστικά πακέτα, αγνοώντας τα υπόλοιπα. Αυτό μειώνει το φορτίο του επεξεργαστή και αυξάνει τη διάρκεια ζωής της μπαταρίας της συσκευής. Επίσης, συνιστάται η διακοπή της σάρωσης αμέσως μετά την ανίχνευση της επιθυμητής συσκευής και η μη διατήρηση της σύνδεσης περισσότερο από το απαραίτητο.
Συχνές ερωτήσεις
Ναι, το BLE υποστηρίζει dual role: μια συσκευή μπορεί ταυτόχρονα να είναι Central για ορισμένες συσκευές και Peripheral για άλλες. Για παράδειγμα, ένα smartphone διαβάζει δεδομένα από έναν αισθητήρα (ως Central) και ταυτόχρονα διαφημίζει τη δική του υπηρεσία (ως Peripheral) για μεταφορά δεδομένων σε άλλη συσκευή.
Η προδιαγραφή BLE ορίζει όριο 7 συνδέσεων για ένα Central. Στην πράξη, ο περιορισμός εξαρτάται από τον κατασκευαστή του chip: τα chips Nordic nRF52840 υποστηρίζουν έως 20 συνδέσεις, ενώ ορισμένοι φθηνοί προσαρμογείς Bluetooth — όχι περισσότερες από 3–4.
Οι λόγοι μπορεί να είναι διάφοροι: ο αισθητήρας δεν διαφημίζεται (δεν είναι σε λειτουργία advertising), το φίλτρο UUID είναι πολύ αυστηρό, το Bluetooth στο smartphone είναι απενεργοποιημένο, λείπουν οι απαραίτητες άδειες (Location στο Android) ή ο αισθητήρας είναι εκτός εμβέλειας (συνιστάται έως 10 μέτρα σε εσωτερικό χώρο).
Όχι απαραίτητα. Για πολλά σενάρια χρησιμοποιείται το μοτίβο connect-and-read: το Central σαρώνει, συνδέεται, διαβάζει τα απαραίτητα δεδομένα και αποσυνδέεται. Η μόνιμη σύνδεση χρειάζεται μόνο για δεδομένα ροής (σφυγμός, ΗΚΓ) ή έλεγχο συσκευής σε πραγματικό χρόνο.
Χρησιμοποιήστε σάρωση διαστήματος με αναλογία scan window 30–50 ms και scan interval 500–1000 ms. Φιλτράρετε συσκευές βάσει UUID για να επεξεργάζεστε μόνο σχετικά διαφημιστικά πακέτα. Διακόψτε τη σάρωση αμέσως μετά την ανίχνευση του επιθυμητού Peripheral.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης