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-битов за стандартни профили на Bluetooth SIG или 128-битов за персонализирани.

Bluetooth Low Energy в мобилните приложения използва тази йерархия за организиране на обмена на данни между смартфон и периферни устройства. Правилното разбиране на GATT е основата за разработване на BLE приложения на двете платформи. Разработчикът трябва да знае UUID на услугите и характеристиките на устройството, както и свойствата на всяка характеристика (read, write, notify, indicate).

Advertising Data и Scan Response

BLE устройствата предават рекламни пакети (advertising packets) за откриване. Advertising Data съдържа името на устройството, UUID на услугите, RSSI и Manufacturer Specific Data. Размерът на рекламния пакет е ограничен до 31 байта. За предаване на допълнителни данни се използва 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. Всеки метод е асинхронен — данните пристигат чрез делегирани callback-и. RSSI (Received Signal Strength Indicator) показва нивото на сигнала: колкото по-близка е стойността до 0, толкова по-силен е сигналът.

BLE на Android: BluetoothAdapter, BluetoothGatt, BluetoothLeScanner

На Android Bluetooth Low Energy се имплементира чрез пакета android.bluetooth. BluetoothAdapter е входната точка за всички BLE операции. BluetoothLeScanner стартира сканиране с callback-и 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 байта) и произволни данни. На 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 байта (3 байта заглавка + 20 байта данни). Увеличаването на MTU до 512 байта значително ускорява предаването при обмяна на конфигурации или логове. На 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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта