Bluetooth и Bluetooth Low Energy — стандарты беспроводной связи для передачи данных на короткие расстояния. Bluetooth Classic (BR/EDR) обеспечивает стабильный потоковый канал для аудио и файлов, а BLE оптимизирован для энергоэффективной работы с датчиками и периферией. По данным Bluetooth SIG, 2025, ежегодно отгружается более 5 миллиардов устройств с поддержкой BLE — стандарт стал основой IoT, носимой электроники и мобильных аксессуаров.
Главное
Bluetooth — это стандарт беспроводной персональной сети (WPAN), работающий в ISM-диапазоне 2.4 ГГц и предназначенный для связи устройств на расстоянии до 100 метров. Спецификация IEEE 802.15.1 определяет физический и MAC-уровни, а стек Bluetooth SIG — профили верхнего уровня для конкретных сценариев: аудиогарнитуры (HSP), передачи файлов (OPP), ввода с клавиатуры (HID).
Стандарт разделился на две ветви с версии 4.0 (2010 год): Bluetooth Classic (BR/EDR — Basic Rate / Enhanced Data Rate) и Bluetooth Low Energy (BLE, ранее Bluetooth Smart). Classic ориентирован на непрерывные потоки — аудиозвонки, музыку, файлы. BLE создан для приложений, где данные передаются короткими пакетами с паузами в десятки секунд или минут — пульсометры, метки, датчики температуры.
По данным Bluetooth SIG (2025), 99% новых смартфонов поддерживают обе версии, а экосистема BLE насчитывает более 15 типов профилей от Blood Pressure до Environmental Sensing.
Выбор между Classic и BLE определяется сценарием: для потоковой передачи аудио подходит только Classic, для опроса датчика раз в час — только BLE. BR/EDR использует 79 каналов с шагом 1 МГц и адаптивную частотную модуляцию (AFH), обеспечивая устойчивость к помехам Wi-Fi.
| Параметр | Bluetooth Classic (BR/EDR) | Bluetooth Low Energy (BLE) |
|---|---|---|
| Скорость передачи | 1–3 Мбит/с (EDR) | 125 кбит/с – 2 Мбит/с (LE 2M PHY) |
| Пиковый ток | 10–30 мА | 5–15 мА |
| Время выхода в эфир | ~100 мс | ~3 мс |
| Топология | Piconet (1 master, до 7 slaves) | Broadcaster / Observer / Peripheral / Central |
| Профили | HFP, A2DP, HSP, SPP, OPP | GATT-based (HRS, BLS, CTS и др.) |
| Типичные устройства | Гарнитуры, колонки, автомобильные hands-free | Фитнес-браслеты, метки, пульсометры, IoT-сенсоры |
| Совместимость | Не совместим с BLE на физическом уровне | Двухрежимные чипы поддерживают оба стека |
BLE 5.x добавил LE Coded PHY для увеличения дальности до 1 км (на открытой местности) и LE Audio с LC3-кодеком — новая версия постепенно размывает границу между Classic и BLE для аудиосценариев.
Стек BLE разделён на три уровня: Controller (физический и link-уровни), Host (L2CAP, ATT, GATT, Security Manager) и Application (реализация профиля в приложении). Такое разделение позволяет производителю чипа реализовать Controller в firmware, а разработчику мобильного приложения — работать только с GATT-абстракциями.
Link Layer (LL) управляет временем эфира: устройство переключается между состояниями Standby, Advertising, Scanning, Initiating и Connection. В Connected-состоянии Central и Peripheral договариваются о connection interval — частоте, с которой обмениваются пакетами данных. Типичный интервал — 7.5–1000 мс; чем чаще обмен, тем выше пропускная способность и больше энергопотребление.
Security Manager (SM) реализует шифрование AES-128 с обменом ключами через протокол pairing. Различают три режима: Just Works (без ввода PIN), Passkey Entry (6-значный код на экране) и OOB (NFC или QR). Для носимых устройств обычно используется Just Works, для медицинских — OOB с дополнительной верификацией.
По данным Bluetooth Core Specification 5.4 (2023), время установки защищённого соединения в режиме LE Secure Connections не превышает 300 мс при connection interval 30 мс.
Протокол ATT (Attribute Protocol) — базовая транспортная модель, в которой сервер (периферийное устройство) хранит атрибуты, а клиент (смартфон) читает или записывает их. GATT (Generic Attribute Profile) надстраивает над ATT иерархию: Service → Characteristic → Descriptor.
Каждый сервис — это логическая группа характеристик, описывающая одну функцию устройства: Heart Rate Service (UUID 0x180D) содержит характеристику Heart Rate Measurement (UUID 0x2A37) с Descriptor Client Characteristic Configuration (0x2902), управляющим нотификациями. Разработчик мобильного приложения получает список сервисов через discoverServices(), затем находит нужную характеристику по UUID и подписывается на уведомления.
BLE использует 16-битные UUID для стандартизированных сервисов Bluetooth SIG и 128-битные UUID для кастомных сервисов производителя. Например, чехол-трекер может определить сервис A000-… с характеристикой для передачи уровня заряда своей батареи.
private val gattCallback = object BluetoothGattCallback() {
override fun onServicesDiscovered(
gatt: BluetoothGatt, status: Int
) {
val service = gatt.getService(UUID.fromString("0000180d-0000-1000-8000-00805f9b34fb"))
val char = service?.getCharacteristic(
UUID.fromString("00002a37-0000-1000-8000-00805f9b34fb")
)
gatt.setCharacteristicNotification(char, true)
}
override fun onCharacteristicChanged(
gatt: BluetoothGatt, char: BluetoothGattCharacteristic
) {
val heartRate = char.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, 1)
updateUi("Пульс: $heartRate уд/мин")
}
}
В примере приложение находит сервис Heart Rate по стандартному UUID Bluetooth SIG, получает характеристику измерения пульса и подписывается на её нотификации — при каждом изменении пульса периферийное устройство отправляет данные без явного запроса от Central.
Advertising — ключевой механизм BLE, при котором Peripheral-устройство периодически отправляет широковещательные пакеты (advertising PDUs) на трёх первичных каналах (37, 38, 39). Центральное устройство сканирует эти каналы, получает advertising-данные и может инициировать соединение.
Advertising-пакет содержит до 31 байта полезной нагрузки: flags, TX power level, local name, UUID сервисов, manufacturer-specific data. Этого достаточно для передачи показаний датчика без установки соединения — режим Connectionless (Broadcaster-тип). Для постоянной передачи данных (например, температуры раз в минуту) используется соединение с connection interval до 1000 мс.
На мобильной платформе сканирование запускается через startScan() (Android) или scanForPeripherals() (iOS). Фильтрация по UUID сервиса позволяет не тратить энергию на обработку всех видимых устройств — приложение получает callback только для интересующих меток или датчиков.
import CoreBluetooth
class ScannerViewController: UIViewController {
private var centralManager: CBCentralManager!
override func viewDidLoad() {
centralManager = CBCentralManager(
delegate: self, queue: nil
)
}
func centralManagerDidUpdateState(central: CBCentralManager) {
if central.state == .poweredOn {
centralManager.scanForPeripherals(
withServices: nil, options: nil
)
}
}
func centralManager(
central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String : Any],
rssi RSSI: NSNumber
) {
if let name = advertisementData[CBAdvertisementDataLocalNameKey] {
print("Найдено устройство: \(name)")
}
}
}
После обнаружения устройства Central вызывает connect(), передавая объект CBPeripheral. Connection-параметры (interval, latency, supervision timeout) согласуются на уровне Link Layer — разработчик не управляет ими напрямую, но может влиять через requestConnectionPriority на Android.
Обе мобильные платформы предоставляют нативные API для работы с BLE. Core Bluetooth (iOS) использует делегатный подход: центральный менеджер инициирует операции, а периферийный объект сообщает о результатах через делегатные методы. android.bluetooth (Android) построен на callback-интерфейсах и поддерживает параллельные GATT-операции с несколькими устройствами.
Ключевые различия между платформами:
По данным тестов Bluetooth SIG (2024), время соединения BLE смартфона с фитнес-браслетом составляет в среднем 150–300 мс на Android и 100–250 мс на iOS — разница обусловлена политиками управления радиочастотным модулем.
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
class BleService {
final FlutterBluePlus fbp = FlutterBluePlus();
Future<void> scanAndConnect(String deviceName) async {
await fbp.startScan(timeout: Duration(seconds: 15));
await for (final result in fbp.scanResults) {
if (result.device.advName == deviceName) {
await fbp.stopScan();
await result.device.connect();
break;
}
}
}
}
Flutter-разработчик получает единый API-интерфейс, под капотом которого flutter_blue_plus транслирует вызовы в нативные android.bluetooth или Core Bluetooth. Такой подход сокращает время разработки приложения для работы с BLE-периферией на обеих платформах.
Часто задаваемые вопросы
Bluetooth Classic (BR/EDR) предназначен для непрерывной потоковой передачи — аудиозвонки, музыка, передача файлов. BLE оптимизирован для коротких пакетов данных с минимальным энергопотреблением — датчики, метки, фитнес-трекеры. Classic потребляет 10–30 мА, BLE — 5–15 мА в пике.
На физическом уровне они несовместимы — разная модуляция и канальная карта. Однако большинство современных чипов являются двухрежимными (dual-mode) и реализуют оба стека. Смартфон с двухрежимным чипом может одновременно общаться с Classic-гарнитурой и BLE-трекером.
Connection interval — промежуток времени между двумя пакетами данных в установленном соединении. Значение варьируется от 7.5 мс до 4 секунд. Чем меньше интервал, тем выше пропускная способность и больше энергопотребление. Для датчика температуры раз в минуту используется интервал 1000 мс.
Pairing — процесс обмена ключами шифрования между Central и Peripheral. BLE поддерживает три метода: Just Works (без подтверждения), Passkey Entry (ввод PIN на экране) и OOB (обмен через NFC или QR). После pairing устройства сохраняют ключи (bonding) и при повторном соединении не запрашивают повторную аутентификацию.
Самые распространённые: Heart Rate Profile (0x180D) для пульсометров, Blood Pressure Profile (0x1810) для тонометров, Environmental Sensing (0x181A) для датчиков температуры и влажности, Battery Service (0x180F) для уровня заряда, Device Information (0x180A) для модели и серийного номера.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также