Bluetooth Low Energy (BLE) στην Ανάπτυξη Κινητών: Τι Είναι, Πρωτόκολλα και Πώς Λειτουργεί

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

Το Bluetooth Low Energy (BLE) είναι ένα πρότυπο ασύρματης επικοινωνίας βελτιστοποιημένο για τη μετάδοση μικρών όγκων δεδομένων με ελάχιστη κατανάλωση ενέργειας. Σύμφωνα με το Bluetooth SIG, 2025, η τεχνολογία χρησιμοποιείται σε περισσότερες από 5 δισεκατομμύρια συσκευές παγκοσμίως. Το GATT (Generic Attribute Profile) οργανώνει τα δεδομένα σε μια ιεραρχία Service → Characteristic → Descriptor, η οποία αποτελεί τη βάση όλων των εφαρμογών BLE για iOS και Android.

Βασικά Σημεία

  • GATT — πρωτόκολλο ανταλλαγής δεδομένων στο Bluetooth Low Energy με ιεραρχία Service → Characteristic → Descriptor
  • Core Bluetooth — το πλαίσιο της Apple για εργασία με BLE στο iOS, βασισμένο σε CBCentralManager και CBPeripheral
  • BluetoothGatt — το κύριο API για συνδέσεις BLE στο Android μέσω BluetoothLeScanner
  • iBeacon — πρωτόκολλο BLE φάρων της Apple με εγγενή υποστήριξη μέσω CLLocationManager στο iOS
  • Bonding — μόνιμη κρυπτογραφημένη σύνδεση που εξαλείφει την επαναλαμβανόμενη σάρωση και σύζευξη

Τι είναι το Bluetooth Low Energy (BLE) και πώς λειτουργεί;

Το Bluetooth Low Energy (BLE) λειτουργεί με μοντέλο πελάτη-εξυπηρετητή με δύο ρόλους: Central (κινητή συσκευή) και Peripheral (συσκευή). Το Central σαρώνει τον αέρα και ξεκινά τη σύνδεση, ενώ το Peripheral μεταδίδει δεδομένα. Σε αντίθεση με το κλασικό Bluetooth, το BLE δεν έχει σχεδιαστεί για ροές ήχου — ο σκοπός του είναι να μεταδίδει μικρά πακέτα με ελάχιστη κατανάλωση ενέργειας. Σύμφωνα με το Bluetooth SIG Core Specification 5.4 (2025), το BLE υποστηρίζει ταχύτητες έως 2 Mbps με ρεύμα μικρότερο από 15 mA σε ενεργή λειτουργία.

Ιεραρχία GATT: Service, Characteristic, Descriptor

Το GATT (Generic Attribute Profile) καθορίζει τη δομή δεδομένων του Bluetooth Low Energy. Service είναι μια λογική ομάδα χαρακτηριστικών (π.χ., Heart Rate Service 0x180D). Characteristic είναι ένα σημείο δεδομένων με συγκεκριμένη τιμή. Descriptor είναι μεταδεδομένα χαρακτηριστικού, συμπεριλαμβανομένου του CCCD για διαχείριση ειδοποιήσεων. Κάθε στοιχείο έχει ένα UUID — 16-bit για τυπικά προφίλ Bluetooth SIG ή 128-bit για προσαρμοσμένα.

Το Bluetooth Low Energy σε εφαρμογές κινητών χρησιμοποιεί αυτήν την ιεραρχία για να οργανώσει την ανταλλαγή δεδομένων μεταξύ ενός smartphone και περιφερειακών. Η σωστή κατανόηση του GATT είναι η βάση για την ανάπτυξη εφαρμογών BLE και στις δύο πλατφόρμες. Ο προγραμματιστής πρέπει να γνωρίζει τα UUID των υπηρεσιών και χαρακτηριστικών της συσκευής, καθώς και τις ιδιότητες κάθε χαρακτηριστικού (read, write, notify, indicate).

Advertising Data και Scan Response

Οι συσκευές BLE μεταδίδουν διαφημιστικά πακέτα (advertising packets) για εντοπισμό. Advertising Data περιέχει το όνομα της συσκευής, UUID υπηρεσιών, RSSI και Manufacturer Specific Data. Το μέγεθος του διαφημιστικού πακέτου περιορίζεται σε 31 byte. Για τη μετάδοση πρόσθετων δεδομένων, χρησιμοποιείται το Scan Response — ένα δεύτερο πακέτο που ζητά η κεντρική συσκευή μετά τον εντοπισμό.

BLE στο iOS: Core Bluetooth, CBCentralManager, CBPeripheral

Στο iOS, το πλαίσιο Core Bluetooth διαχειρίζεται το Bluetooth Low Energy. Το CBCentralManager διαχειρίζεται τη σάρωση και τη σύνδεση, το CBPeripheral αντιπροσωπεύει μια απομακρυσμένη συσκευή BLE. Η διαδικασία είναι τυπική: αρχικοποίηση CBCentralManager, έλεγχος κατάστασης poweredOn, έναρξη scanForPeripherals, σύνδεση και ανακάλυψη υπηρεσιών. Το Core Bluetooth διαχειρίζεται αυτόματα την τροφοδοσία της μονάδας ραδιοφώνου — αν το BLE δεν χρησιμοποιείται, απενεργοποιείται.

Το BLE στην ανάπτυξη κινητών στο iOS απαιτεί τη λήψη υπόψη των λειτουργιών παρασκηνίου. Η λειτουργία παρασκηνίου του Core Bluetooth ενεργοποιείται μέσω των Capabilities του έργου (Uses Bluetooth LE accessories). Στο παρασκήνιο, η εφαρμογή μπορεί να λαμβάνει ειδοποιήσεις από χαρακτηριστικά, αλλά η σάρωση είναι περιορισμένη — το σύστημα την επανεκκινεί μόνο όταν η συσκευή κινείται. Για το iBeacon, η σάρωση παρασκηνίου λειτουργεί πιο ενεργά μέσω CLLocationManager.

Παράδειγμα σάρωσης BLE σε Swift

swift
import CoreBluetooth

class DeviceScanner: NSObject, CBCentralManagerDelegate {
    var centralManager: CBCentralManager!

    func start() {
        centralManager = CBCentralManager(delegate: self, queue: nil)
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        guard central.state == .poweredOn else { return }
        central.scanForPeripherals(withServices: nil, options: nil)
    }

    func centralManager(_ central: CBCentralManager,
                        didDiscover peripheral: CBPeripheral,
                        advertisementData: [String: Any],
                        rssi RSSI: NSNumber) {
        print("Βρέθηκε: \(peripheral.name ?? "unknown")")
    }
}

Σε αυτό το παράδειγμα, το CBCentralManagerDelegate χειρίζεται όλα τα συμβάντα σύνδεσης BLE. Η μέθοδος centralManagerDidUpdateState ελέγχει εάν το Bluetooth είναι ενεργοποιημένο στην κινητή συσκευή. Μετά την επιτυχή αρχικοποίηση, ξεκινά η σάρωση. Το callback didDiscover καλείται για κάθε συσκευή που βρέθηκε.

Σύνδεση και ανάγνωση χαρακτηριστικών στο Core Bluetooth

Μετά την ανακάλυψη μιας συσκευής, πρέπει να κληθούν τα connect και discoverServices. Το CBPeripheralDelegate παρέχει μεθόδους για κάθε βήμα: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor. Κάθε μέθοδος είναι ασύγχρονη — τα δεδομένα φτάνουν μέσω callbacks εκπροσώπου. Το RSSI (Received Signal Strength Indicator) δείχνει το επίπεδο σήματος: όσο πιο κοντά είναι η τιμή στο 0, τόσο ισχυρότερο είναι το σήμα.

BLE στο Android: BluetoothAdapter, BluetoothGatt, BluetoothLeScanner

Στο Android, το Bluetooth Low Energy υλοποιείται μέσω του πακέτου android.bluetooth. BluetoothAdapter είναι το σημείο εισόδου για όλες τις λειτουργίες BLE. Το BluetoothLeScanner ξεκινά τη σάρωση με callbacks ScanCallback. Μετά την ανακάλυψη μιας συσκευής, δημιουργείται BluetoothGatt — μια σύνδεση με το περιφερειακό. Το BluetoothGattCallback χειρίζεται συμβάντα: σύνδεση, ανακάλυψη υπηρεσιών, ανάγνωση χαρακτηριστικών, αλλαγές RSSI.

Το Bluetooth Low Energy σε εφαρμογές κινητών στο Android απαιτεί ρητές άδειες BLUETOOTH_SCAN, BLUETOOTH_CONNECT και ACCESS_FINE_LOCATION. Από το Android 12, οι άδειες είναι ξεχωριστές: BLUETOOTH_SCAN για σάρωση, BLUETOOTH_CONNECT για σύνδεση. Η ACCESS_FINE_LOCATION απαιτείται μόνο για σάρωση ορισμένων τύπων συσκευών. Χωρίς αυτές τις άδειες, η εφαρμογή δεν μπορεί να λειτουργήσει με BLE.

Παράδειγμα σάρωσης BLE σε Kotlin

kotlin
class BLEScanner(private val bluetoothAdapter: BluetoothAdapter) {

    fun startScan() {
        val scanner = bluetoothAdapter.bluetoothLeScanner
        val settings = ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
            .build()
        scanner.startScan(null, settings, scanCallback)
    }

    private val scanCallback = object : ScanCallback() {
        override fun onScanResult(callbackType: Int, result: ScanResult) {
            val device = result.device
            val rssi = result.rssi
            Log.d("BLE", "Συσκευή: ${device.name}, RSSI: $rssi")
        }
    }
}

Το ScanSettings επιτρέπει τη διαμόρφωση της λειτουργίας σάρωσης: LOW_POWER για εξοικονόμηση μπαταρίας, BALANCED για τυπικές εργασίες, LOW_LATENCY για μέγιστη ταχύτητα εντοπισμού. ScanFilter περιορίζει την αναζήτηση ανά UUID υπηρεσίας, όνομα συσκευής ή διεύθυνση MAC. Το φιλτράρισμα μειώνει την κατανάλωση ενέργειας και επιταχύνει τον εντοπισμό της επιθυμητής συσκευής.

BluetoothGatt: ανάγνωση και ειδοποιήσεις στο Android

Μετά τη δημιουργία BluetoothGatt μέσω connectGatt, η εφαρμογή καλεί discoverServices. Το BluetoothGattCallback περιέχει onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged. Για να λαμβάνει ειδοποιήσεις σχετικά με αλλαγές χαρακτηριστικών, πρέπει να κληθεί setCharacteristicNotification. Η διαδικασία απαιτεί προσοχή: κάθε λειτουργία GATT είναι ασύγχρονη και το αποτέλεσμα έρχεται σε ξεχωριστό callback.

iBeacon, Bonding και Advertising Data στο οικοσύστημα BLE

Το iBeacon είναι τεχνολογία της Apple για φάρους BLE που μεταδίδουν UUID, Major και Minor. Η συσκευή-φάρος εκπέμπει ένα διαφημιστικό πακέτο και η εφαρμογή κινητού καθορίζει την τοποθεσία και απόσταση βάσει αυτών των δεδομένων. Στο iOS, το iBeacon υποστηρίζεται εγγενώς μέσω CLLocationManager. Στο Android απαιτείται βιβλιοθήκη τρίτου μέρους (π.χ., AltBeacon ή Android iBeacon Library).

Bonding είναι η διαδικασία δημιουργίας μόνιμης ασφαλούς σύνδεσης μεταξύ συσκευών BLE. Μετά το Bonding, τα κλειδιά κρυπτογράφησης αποθηκεύονται και οι συσκευές συνδέονται αυτόματα όταν έρθουν ξανά κοντά. Στο iOS, το bonding διαχειρίζεται αυτόματα από το σύστημα. Στο Android — μέσω BluetoothDevice.createBond(). Το Bonding είναι σημαντικό για φορητές συσκευές και ιχνηλάτες γυμναστικής που απαιτούν γρήγορη επανασύνδεση.

Διαφημιστικά πακέτα και Manufacturer Specific Data

Το Advertising Data είναι ένας βασικός μηχανισμός εντοπισμού στο Bluetooth Low Energy. Οι κατασκευαστές συσκευών μπορούν να προσθέσουν Manufacturer Specific Data στο διαφημιστικό πακέτο για μετάδοση προσαρμοσμένων δεδομένων. Η μορφή πακέτου περιλαμβάνει ένα Company Identifier (2 byte) και αυθαίρετα δεδομένα. Στο iOS, το CBCentralManager δέχεται μια σειρά από UUID υπηρεσιών για φιλτράρισμα — αυτό εξοικονομεί μπαταρία. Στο Android, το ScanFilter λειτουργεί με την ίδια αρχή.

Σύγκριση iOS και Android για ανάπτυξη BLE

ΠαράμετροςiOS (Core Bluetooth)Android (BluetoothGatt)
ΔιαχειριστήςCBCentralManagerBluetoothLeScanner
Σύνδεσηconnect(to:)connectGatt()
ΥπηρεσίεςdiscoverServices()discoverServices()
ΑνάγνωσηreadValue(for:)readCharacteristic()
ΕιδοποιήσειςsetNotifyValue(_:for:)setCharacteristicNotification()
ΆδειεςΑυτόματεςBLUETOOTH_SCAN, BLUETOOTH_CONNECT
iBeaconCLLocationManager (εγγενές)AltBeacon / βιβλιοθήκες

Βελτιστοποίηση BLE: MTU, Connection Interval και λειτουργία παρασκηνίου

MTU (Maximum Transmission Unit) είναι το μέγιστο μέγεθος ενός μόνο πακέτου δεδομένων Bluetooth Low Energy. Από προεπιλογή, το MTU είναι 23 byte (3 byte κεφαλίδα + 20 byte δεδομένα). Η αύξηση του MTU σε 512 byte επιταχύνει σημαντικά τη μετάδοση κατά την ανταλλαγή διαμορφώσεων ή αρχείων καταγραφής. Στο iOS, το maximumWriteValueLength δείχνει το διαθέσιμο MTU. Στο Android, για αύξηση του MTU χρησιμοποιείται το requestMtu().

Connection Interval είναι η συχνότητα με την οποία η κεντρική συσκευή ερωτά το περιφερειακό. Όσο μικρότερο είναι το διάστημα, τόσο μεγαλύτερη είναι η ταχύτητα μετάδοσης, αλλά και η κατανάλωση ενέργειας. Τυπικές τιμές κυμαίνονται από 7,5 ms έως 4 δευτερόλεπτα. Για ιχνηλάτες γυμναστικής, 100 ms είναι αρκετά· για ήχο — 7,5 ms. Το BLE στην ανάπτυξη κινητών απαιτεί ισορροπία μεταξύ ταχύτητας μετάδοσης και διάρκειας ζωής μπαταρίας της συσκευής.

Λειτουργία παρασκηνίου σε iOS και Android

Το iOS υποστηρίζει BLE σε λειτουργία παρασκηνίου μέσω Background Modes, αλλά με περιορισμούς. Μια εφαρμογή στο παρασκήνιο λαμβάνει ειδοποιήσεις από χαρακτηριστικά αλλά δεν μπορεί να σαρώνει ενεργά. Το σύστημα επανεκκινεί τη σάρωση όταν αλλάζει η τοποθεσία της συσκευής. Στο Android, η σάρωση παρασκηνίου απαιτεί Foreground Service με μόνιμη ειδοποίηση. Χωρίς αυτό, το κινητό σύστημα θα τερματίσει τη διαδικασία κατά την ελαχιστοποίηση της εφαρμογής.

Πρακτικές συστάσεις βελτιστοποίησης

Για αξιόπιστη λειτουργία BLE σε εφαρμογές κινητών, ακολουθήστε αυτούς τους κανόνες. Χρησιμοποιήστε notify αντί polling — ένα χαρακτηριστικό με ειδοποιήσεις στέλνει δεδομένα όταν αλλάζει, εξοικονομώντας μπαταρία. Ορίστε το βέλτιστο MTU στην αρχή της σύνδεσης. Φιλτράρετε συσκευές ανά UUID υπηρεσίας κατά τη σάρωση. Ελέγξτε τη συμβατότητα στοίβας BLE σε διαφορετικά μοντέλα — οι κατασκευαστές (Xiaomi, Huawei, Samsung) κάνουν αλλαγές που επηρεάζουν τη συμπεριφορά του Bluetooth.

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

Σε τι διαφέρει το BLE από το κλασικό Bluetooth;

Το Bluetooth Low Energy (BLE) είναι βελτιστοποιημένο για περιοδική μετάδοση μικρών πακέτων με χαμηλή κατανάλωση ενέργειας. Το κλασικό Bluetooth έχει σχεδιαστεί για ροές ήχου και συνεχή μετάδοση μεγάλων όγκων δεδομένων.

Τι είναι το GATT στο Bluetooth Low Energy;

Το GATT (Generic Attribute Profile) είναι ένα πρωτόκολλο ανταλλαγής δεδομένων στο BLE που καθορίζει την ιεραρχία Service → Characteristic → Descriptor. Το GATT χρησιμοποιείται για ανάγνωση, εγγραφή και λήψη ειδοποιήσεων από συσκευές BLE.

Γιατί το Android απαιτεί άδεια ACCESS_FINE_LOCATION για BLE;

Πριν από το Android 12, η σάρωση BLE μπορούσε να χρησιμοποιηθεί για τον προσδιορισμό τοποθεσίας, οπότε η Google συνδύασε αυτές τις άδειες. Από το Android 12, εισήχθη ξεχωριστή άδεια BLUETOOTH_SCAN χωρίς σύνδεση με την τοποθεσία.

Πώς να αυξήσετε την ταχύτητα μεταφοράς δεδομένων BLE;

Αυξήστε το MTU μέσω requestMtu() στο Android και maximumWriteValueLength στο iOS. Το Connection Interval επηρεάζει επίσης την ταχύτητα — όσο μικρότερο είναι, τόσο ταχύτερη είναι η μεταφορά. Ο βέλτιστος συνδυασμός προσφέρει βελτίωση έως και 10 φορές.

Τι είναι το Bonding στο BLE;

Bonding είναι η διαδικασία δημιουργίας μόνιμης ασφαλούς σύνδεσης μεταξύ συσκευών BLE. Μετά το Bonding, τα κλειδιά κρυπτογράφησης αποθηκεύονται και οι συσκευές συνδέονται αυτόματα χωρίς επαναλαμβανόμενη αναζήτηση.

Σύνοψη

  • Bluetooth Low Energy — πρότυπο ασύρματης επικοινωνίας για IoT με ελάχιστη κατανάλωση ενέργειας και ταχύτητα έως 2 Mbps
  • GATT οργανώνει δεδομένα σε ιεραρχία Service → Characteristic → Descriptor με UUID για κάθε στοιχείο
  • Core Bluetooth — το πλαίσιο της Apple για BLE στο iOS με CBCentralManager, CBPeripheral και λειτουργίες παρασκηνίου
  • BluetoothGatt — το κύριο Android API με BluetoothAdapter, BluetoothLeScanner και ρητές άδειες BLUETOOTH_SCAN
  • iBeacon — τεχνολογία BLE φάρων με εγγενή υποστήριξη στο iOS μέσω CLLocationManager
  • Bonding επιτρέπει αυτόματη επανασύνδεση μετά την αποθήκευση κλειδιών κρυπτογράφησης
  • Το Bluetooth Low Energy σε εφαρμογές κινητών απαιτεί τη λήψη υπόψη των MTU, Connection Interval και περιορισμών παρασκηνίου πλατφόρμας

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

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

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