Bluetooth și Bluetooth Low Energy sunt standarde de comunicație fără fir pentru transmiterea datelor pe distanțe scurte. Bluetooth Classic (BR/EDR) oferă un canal de flux stabil pentru audio și fișiere, iar BLE este optimizat pentru funcționarea eficientă energetic cu senzori și periferice. Conform Bluetooth SIG, 2025, anual se livrează peste 5 miliarde de dispozitive cu suport BLE — standardul a devenit baza IoT, electronicii purtabile și accesoriilor mobile.
Βασικά σημεία
Bluetooth — este un standard de rețea personală fără fir (WPAN) care funcționează în banda ISM 2,4 GHz și este destinat comunicării între dispozitive până la 100 de metri. Specificația IEEE 802.15.1 definește nivelul fizic și MAC, iar stiva Bluetooth SIG definește profilurile superioare pentru scenarii specifice: căști audio (HSP), transfer fișiere (OPP), tastatură (HID).
Standardul s-a împărțit în două ramuri de la versiunea 4.0 (2010): Bluetooth Classic (BR/EDR) și Bluetooth Low Energy (BLE, anterior Bluetooth Smart). Classic e pentru fluxuri continue — convorbiri audio, muzică, fișiere. BLE e creat pentru aplicații cu date transmise în pachete scurte cu pauze de zeci de secunde sau minute — pulsmetre, etichete, senzori de temperatură.
Conform Bluetooth SIG (2025), 99% din noile smartphone-uri suportă ambele versiuni, iar ecosistemul BLE include peste 15 tipuri de profiluri, de la Blood Pressure la Environmental Sensing.
Alegerea între Classic și BLE depinde de scenariu: pentru flux audio e potrivit doar Classic, pentru interogarea unui senzor o dată pe oră — doar BLE. BR/EDR utilizează 79 de canale cu pas 1 MHz și modulație adaptivă a frecvenței (AFH), asigurând rezistență la interferențe Wi-Fi.
| Parametru | Bluetooth Classic (BR/EDR) | Bluetooth Low Energy (BLE) |
|---|---|---|
| Viteza de transmisie | 1–3 Mbit/s (EDR) | 125 kbit/s – 2 Mbit/s (LE 2M PHY) |
| Curent de vârf | 10–30 mA | 5–15 mA |
| Timp de emisie | ~100 ms | ~3 ms |
| Topologie | Piconet (1 master, până la 7 slave) | Broadcaster / Observer / Peripheral / Central |
| Profiluri | HFP, A2DP, HSP, SPP, OPP | Pe bază GATT (HRS, BLS, CTS etc.) |
| Dispozitive tipice | Căști, difuzoare, seturi hands-free auto | Brățări fitness, etichete, pulsmetre, senzori IoT |
| Compatibilitate | Incompatibil cu BLE la nivel fizic | Cipurile dual-mode suportă ambele stive |
BLE 5.x a adăugat LE Coded PHY pentru rază până la 1 km (în aer liber) și LE Audio cu codec LC3 — noua versiune estompează granița dintre Classic și BLE în scenariile audio.
Stiva BLE are trei niveluri: Controller (fizic și legătură), Host (L2CAP, ATT, GATT, Security Manager) și Application (implementarea profilului). Această separare permite producătorului să implementeze Controller-ul în firmware, iar dezvoltatorului să lucreze doar cu abstractizările GATT.
Link Layer (LL) gestionează timpul de emisie: dispozitivul comută între stările Standby, Advertising, Scanning, Initiating și Connection. În starea Connected, Central și Peripheral convin connection interval — frecvența schimbului de pachete. Interval tipic: 7,5–1000 ms; cu cât e mai frecvent, cu atât lățimea de bandă e mai mare și consumul mai ridicat.
Security Manager (SM) implementează criptarea AES-128 cu schimb de chei prin pairing. Trei moduri: Just Works (fără PIN), Passkey Entry (cod 6 cifre) și OOB (NFC sau QR). Pentru dispozitive purtabile se folosește Just Works, pentru medicale — OOB cu verificare suplimentară.
Conform Bluetooth Core Specification 5.4 (2023), timpul conexiunii securizate în LE Secure Connections nu depășește 300 ms la connection interval de 30 ms.
Protocolul ATT (Attribute Protocol) — model de transport în care serverul (perifericul) stochează atribute, iar clientul (smartphone-ul) le citește/scrie. GATT (Generic Attribute Profile) construiește ierarhia: Service → Characteristic → Descriptor.
Fiecare serviciu e un grup logic de caracteristici: Heart Rate Service (UUID 0x180D) conține Heart Rate Measurement (UUID 0x2A37) cu Descriptor Client Characteristic Configuration (0x2902) pentru notificări. Dezvoltatorul obține lista serviciilor prin discoverServices(), găsește caracteristica după UUID și se abonează la notificări.
BLE folosește UUID de 16 biți pentru servicii standardizate Bluetooth SIG și UUID de 128 de biți pentru servicii personalizate. O husă-tracker poate defini serviciul A000-… cu o caracteristică pentru nivelul de încărcare al bateriei.
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 παλμοί/λεπτό")
}
}
În exemplu, aplicația găsește Heart Rate după UUID-ul standard, obține caracteristica de puls și se abonează la notificări — la fiecare modificare, perifericul trimite date fără cerere explicită de la Central.
Advertising — mecanismul cheie BLE în care Peripheral trimite periodic pachete de difuzare (advertising PDUs) pe trei canale primare (37, 38, 39). Central scanează aceste canale, primește datele și poate iniția conexiunea.
Pachetul advertising conține până la 31 de octeți: flags, TX power level, nume local, UUID-uri servicii, date producător. Suficient pentru citiri senzor fără conexiune — modul Connectionless (Broadcaster). Pentru date continue (ex. temperatura pe minut) se folosește conexiune cu connection interval până la 1000 ms.
Pe mobil, scanarea se lansează prin startScan() (Android) sau scanForPeripherals() (iOS). Filtrarea după UUID economisește energia — aplicația primește callback doar pentru dispozitivele de interes.
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)")
}
}
}
După detectare, Central apelează connect() cu obiectul CBPeripheral. Parametrii conexiunii (interval, latency, supervision timeout) se negociază la nivel Link Layer — dezvoltatorul nu îi gestionează direct, dar poate influența prin requestConnectionPriority pe Android.
Ambele platforme oferă API-uri native BLE. Core Bluetooth (iOS) folosește abordarea delegată: managerul central inițiază operații, perifericul raportează rezultatele prin metode delegate. android.bluetooth (Android) e construit pe callback-uri și suportă operații GATT paralele.
Diferențe cheie între platforme:
Conform testelor Bluetooth SIG (2024), timpul de conectare BLE smartphone-brățară fitness e în medie 150–300 ms pe Android și 100–250 ms pe iOS — diferența datorată politicilor de gestionare a modulului radio.
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;
}
}
}
}
Dezvoltatorul Flutter primește o interfață API unificată; flutter_blue_plus traduce apelurile în android.bluetooth sau Core Bluetooth nativ. Aceasta reduce timpul de dezvoltare pentru BLE pe ambele platforme.
Συχνές Ερωτήσεις
Bluetooth Classic (BR/EDR) e pentru transmisie continuă în flux — convorbiri audio, muzică, transfer fișiere. BLE e optimizat pentru pachete scurte cu consum minim — senzori, etichete, trackere. Classic consumă 10–30 mA, BLE 5–15 mA în vârf.
La nivel fizic nu sunt compatibile — modulație și hartă canale diferite. Majoritatea cipurilor moderne sunt dual-mode și implementează ambele stive. Un smartphone dual-mode poate comunica simultan cu o cască Classic și un tracker BLE.
Connection interval e intervalul dintre două pachete de date într-o conexiune stabilită. Valoarea variază de la 7,5 ms la 4 secunde. Cu cât intervalul e mai mic, cu atât lățimea de bandă e mai mare și consumul mai ridicat. Pentru un senzor de temperatură pe minut se folosește 1000 ms.
Pairing e schimbul de chei de criptare între Central și Peripheral. BLE suportă trei metode: Just Works (fără confirmare), Passkey Entry (PIN pe ecran) și OOB (NFC sau QR). După pairing, dispozitivele salvează cheile (bonding) și la reconectare nu cer reautentificare.
Cele mai comune: Heart Rate Profile (0x180D) pentru pulsmetre, Blood Pressure Profile (0x1810) pentru tensiometre, Environmental Sensing (0x181A) pentru temperatură și umiditate, Battery Service (0x180F) pentru nivel încărcare, Device Information (0x180A) pentru model și serie.
Συμπεράσματα
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης