Bluetooth a Bluetooth Low Energy jsou standardy bezdrátové komunikace pro přenos dat na krátké vzdálenosti. Bluetooth Classic (BR/EDR) poskytuje stabilní streamovací kanál pro audio a soubory, zatímco BLE je optimalizován pro energeticky účinnou práci se senzory a periferiemi. Podle údajů Bluetooth SIG, 2025, ročně je dodáno více než 5 miliard zařízení s podporou BLE — standard se stal základem IoT, nositelné elektroniky a mobilních doplňků.
Hlavní body
Bluetooth — je standard bezdrátové osobní sítě (WPAN) pracující v pásmu ISM 2,4 GHz určený pro komunikaci mezi zařízeními na vzdálenost až 100 metrů. Specifikace IEEE 802.15.1 definuje fyzickou a MAC vrstvu, zásobník Bluetooth SIG definuje profily vyšší úrovně pro konkrétní scénáře: audio headsety (HSP), přenos souborů (OPP), vstup z klávesnice (HID).
Standard se rozdělil na dvě větve od verze 4.0 (2010): Bluetooth Classic (BR/EDR) a Bluetooth Low Energy (BLE, dříve Bluetooth Smart). Classic je určen pro nepřetržité streamy — audio hovory, hudbu, soubory. BLE byl vytvořen pro aplikace, kde jsou data přenášena v krátkých paketech s pauzami desítek sekund nebo minut — pulzometry, tagy, teplotní senzory.
Podle Bluetooth SIG (2025) 99% nových smartphonů podporuje obě verze a ekosystém BLE zahrnuje více než 15 typů profilů od Blood Pressure po Environmental Sensing.
Výběr mezi Classic a BLE závisí na scénáři: pro streamování audia je vhodný pouze Classic, pro dotazování senzoru jednou za hodinu — pouze BLE. BR/EDR využívá 79 kanálů s krokem 1 MHz a adaptivní frekvenční modulací (AFH), zajišťující odolnost vůči rušení Wi-Fi.
| Parametr | Bluetooth Classic (BR/EDR) | Bluetooth Low Energy (BLE) |
|---|---|---|
| Rychlost přenosu | 1–3 Mbit/s (EDR) | 125 kbit/s – 2 Mbit/s (LE 2M PHY) |
| Špičkový proud | 10–30 mA | 5–15 mA |
| Doba vysílání | ~100 ms | ~3 ms |
| Topologie | Piconet (1 master, až 7 slave) | Broadcaster / Observer / Peripheral / Central |
| Profily | HFP, A2DP, HSP, SPP, OPP | Založené na GATT (HRS, BLS, CTS atd.) |
| Typická zařízení | Headset, reproduktory, automobilové hands-free sady | Fitness náramky, tagy, pulzometry, IoT senzory |
| Kompatibilita | Není kompatibilní s BLE na fyzické úrovni | Dvourežimové čipy podporují oba zásobníky |
BLE 5.x přidal LE Coded PHY pro zvýšení dosahu až 1 km (na otevřeném prostranství) a LE Audio s kodekem LC3 — nová verze postupně stírá hranici mezi Classic a BLE v audio scénářích.
Zásobník BLE je rozdělen do tří vrstev: Controller (fyzická a linková vrstva), Host (L2CAP, ATT, GATT, Security Manager) a Application (implementace profilu v aplikaci). Toto rozdělení umožňuje výrobci čipu implementovat Controller ve firmwaru a vývojáři mobilní aplikace pracovat pouze s abstrakcemi GATT.
Link Layer (LL) řídí čas vysílání: zařízení přepíná mezi stavy Standby, Advertising, Scanning, Initiating a Connection. Ve stavu Connected se Central a Peripheral dohodnou na connection intervalu — frekvenci výměny datových paketů. Typický interval je 7,5–1000 ms; čím častější výměna, tím vyšší šířka pásma a spotřeba energie.
Security Manager (SM) implementuje šifrování AES-128 s výměnou klíčů prostřednictvím protokolu pairing. Rozlišují se tři režimy: Just Works (bez zadání PIN), Passkey Entry (6místný kód na obrazovce) a OOB (NFC nebo QR). Pro nositelná zařízení se obvykle používá Just Works, pro lékařská — OOB s dodatečným ověřením.
Podle Bluetooth Core Specification 5.4 (2023) doba vytvoření zabezpečeného spojení v režimu LE Secure Connections nepřesahuje 300 ms při connection intervalu 30 ms.
Protokol ATT (Attribute Protocol) — základní transportní model, kde server (periferní zařízení) ukládá atributy a klient (smartphone) je čte nebo zapisuje. GATT (Generic Attribute Profile) vytváří hierarchii nad ATT: Service → Characteristic → Descriptor.
Každá služba je logická skupina charakteristik popisující jednu funkci zařízení: Heart Rate Service (UUID 0x180D) obsahuje charakteristiku Heart Rate Measurement (UUID 0x2A37) s Descriptor Client Characteristic Configuration (0x2902) spravující oznámení. Vývojář mobilní aplikace získá seznam služeb přes discoverServices(), poté najde požadovanou charakteristiku podle UUID a přihlásí se k odběru oznámení.
BLE používá 16bitové UUID pro standardizované služby Bluetooth SIG a 128bitové UUID pro vlastní služby výrobce. Například pouzdro-tracker může definovat službu A000-… s charakteristikou pro přenos úrovně nabití vlastní baterie.
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("Tep: $heartRate tepů/min")
}
}
V příkladu aplikace najde službu Heart Rate podle standardního UUID Bluetooth SIG, získá charakteristiku měření pulsu a přihlásí se k jejím oznámením — při každé změně pulsu periferní zařízení odesílá data bez explicitního požadavku od Central.
Advertising — klíčový mechanismus BLE, při kterém Peripheral zařízení periodicky vysílá vysílací pakety (advertising PDUs) na třech primárních kanálech (37, 38, 39). Centrální zařízení tyto kanály skenuje, přijímá advertising data a může iniciovat spojení.
Advertising paket obsahuje až 31 bajtů užitečného zatížení: flags, TX power level, místní název, UUID služeb, data specifická pro výrobce. To je dostačující pro přenos údajů ze senzoru bez navázání spojení — režim Connectionless (typ Broadcaster). Pro nepřetržitý přenos dat (např. teplota každou minutu) se používá spojení s connection intervalem až 1000 ms.
Na mobilní platformě se skenování spouští přes startScan() (Android) nebo scanForPeripherals() (iOS). Filtrování podle UUID služby šetří energii — aplikace dostává callback pouze pro zajímavé tagy nebo senzory.
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("Nalezeno zařízení: \(name)")
}
}
}
Po detekci zařízení Central volá connect() předávající objekt CBPeripheral. Parametry spojení (interval, latency, supervision timeout) se dohodnou na úrovni Link Layer — vývojář je neřídí přímo, ale může ovlivnit prostřednictvím requestConnectionPriority na Androidu.
Obě mobilní platformy poskytují nativní API pro práci s BLE. Core Bluetooth (iOS) používá delegátský přístup: centrální manažer iniciuje operace, periferní objekt hlásí výsledky prostřednictvím delegátských metod. android.bluetooth (Android) je postaven na callback rozhraních a podporuje paralelní GATT operace s více zařízeními.
Klíčové rozdíly mezi platformami:
Podle testů Bluetooth SIG (2024) doba BLE připojení smartphonu s fitness náramkem je v průměru 150–300 ms na Androidu a 100–250 ms na iOS — rozdíl je způsoben politikami správy rádiového modulu.
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 vývojář získává jednotné API rozhraní, pod kterým flutter_blue_plus překládá volání do nativního android.bluetooth nebo Core Bluetooth. Tento přístup zkracuje dobu vývoje aplikace pro práci s BLE periferiemi na obou platformách.
Často kladené otázky
Bluetooth Classic (BR/EDR) je určen pro nepřetržitý streamovaný přenos — audio hovory, hudbu, přenos souborů. BLE je optimalizován pro krátké datové pakety s minimální spotřebou energie — senzory, tagy, fitness trackery. Classic spotřebovává 10–30 mA, BLE 5–15 mA ve špičce.
Na fyzické úrovni nejsou kompatibilní — odlišná modulace a mapa kanálů. Většina moderních čipů je však dvourežimových (dual-mode) a implementuje oba zásobníky. Smartphone s dvourežimovým Čipem může současně komunikovat s Classic headsetem a BLE trackerem.
Connection interval je časový interval mezi dvěma datovými pakety v navázaném spojení. Hodnota se pohybuje od 7,5 ms do 4 sekund. Čím menší interval, tím vyšší šířka pásma a spotřeba energie. Pro teplotní senzor jednou za minutu se používá interval 1000 ms.
Pairing je proces výměny šifrovacích klíčů mezi Central a Peripheral. BLE podporuje tři metody: Just Works (bez potvrzení), Passkey Entry (zadání PIN na obrazovce) a OOB (výměna přes NFC nebo QR). Po párování zařízení ukládají klíče (bonding) a při opětovném připojení nevyžadují novou autentizaci.
Nejběžnější: Heart Rate Profile (0x180D) pro pulzometry, Blood Pressure Profile (0x1810) pro tlakoměry, Environmental Sensing (0x181A) pro senzory teploty a vlhkosti, Battery Service (0x180F) pro úroveň nabití, Device Information (0x180A) pro model a sériové číslo.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také