Bluetooth et Bluetooth Low Energy sont des normes de communication sans fil pour la transmission de données à courte distance. Bluetooth Classic (BR/EDR) offre un canal de streaming stable pour l'audio et les fichiers, tandis que BLE est optimisé pour un fonctionnement économe en énergie avec des capteurs et des périphériques. Selon la Bluetooth SIG, 2025, plus de 5 milliards d'appareils prenant en charge BLE sont expédiés chaque année — la norme est devenue le fondement de l'IoT, de l'électronique portable et des accessoires mobiles.
Points clés
Bluetooth est une norme de réseau personnel sans fil (WPAN) fonctionnant dans la bande ISM 2,4 GHz, conçue pour la communication entre appareils à des distances allant jusqu'à 100 mètres. La spécification IEEE 802.15.1 définit les couches physique et MAC, tandis que la pile Bluetooth SIG définit des profils de haut niveau pour des scénarios spécifiques : casque audio (HSP), transfert de fichiers (OPP), saisie au clavier (HID).
La norme s'est divisée en deux branches depuis la version 4.0 (2010) : Bluetooth Classic (BR/EDR — Basic Rate / Enhanced Data Rate) et Bluetooth Low Energy (BLE, anciennement Bluetooth Smart). Classic est conçu pour les flux continus — appels audio, musique, fichiers. BLE a été créé pour les applications où les données sont transmises en paquets courts avec des pauses de dizaines de secondes ou minutes — cardiofréquencemètres, balises, capteurs de température.
Selon la Bluetooth SIG (2025), 99 % des nouveaux smartphones prennent en charge les deux versions, et l'écosystème BLE comprend plus de 15 types de profils, de Blood Pressure à Environmental Sensing.
Le choix entre Classic et BLE dépend du scénario : pour le streaming audio, seul Classic est adapté, pour interroger un capteur une fois par heure — seul BLE. BR/EDR utilise 79 canaux avec un espacement de 1 MHz et un saut de fréquence adaptatif (AFH), offrant une résistance aux interférences Wi-Fi.
| Paramètre | Bluetooth Classic (BR/EDR) | Bluetooth Low Energy (BLE) |
|---|---|---|
| Débit de données | 1–3 Mbit/s (EDR) | 125 kbit/s – 2 Mbit/s (LE 2M PHY) |
| Courant de crête | 10–30 mA | 5–15 mA |
| Temps d'antenne | ~100 ms | ~3 ms |
| Topologie | Piconet (1 maître, jusqu'à 7 esclaves) | Broadcaster / Observer / Peripheral / Central |
| Profils | HFP, A2DP, HSP, SPP, OPP | Basés sur GATT (HRS, BLS, CTS, etc.) |
| Appareils typiques | Casques, enceintes, kit mains-libres auto | Trackers d'activité, balises, cardiofréquencemètres, capteurs IoT |
| Compatibilité | Non compatible avec BLE au niveau physique | Les puces double mode supportent les deux piles |
BLE 5.x a ajouté LE Coded PHY pour augmenter la portée jusqu'à 1 km (en espace ouvert) et LE Audio avec le codec LC3 — la nouvelle version brouille progressivement la frontière entre Classic et BLE pour les scénarios audio.
La pile BLE est divisée en trois couches : Controller (couches physique et liaison), Host (L2CAP, ATT, GATT, gestionnaire de sécurité) et Application (implémentation du profil dans l'application). Cette séparation permet au fabricant de la puce d'implémenter le Controller dans le firmware, tandis que le développeur d'application mobile ne travaille qu'avec des abstractions GATT.
La couche liaison (LL) gère le temps d'antenne : le périphérique alterne entre les états Standby, Advertising, Scanning, Initiating et Connection. À l'état connecté, Central et Peripheral conviennent d'un intervalle de connexion — la fréquence à laquelle ils échangent des paquets de données. Un intervalle typique est de 7,5 à 1000 ms ; plus l'échange est fréquent, plus le débit est élevé et plus la consommation d'énergie est importante.
Le gestionnaire de sécurité (SM) implémente le chiffrement AES-128 avec échange de clés via le protocole d'appairage. Il existe trois modes : Just Works (sans saisie de code), Passkey Entry (code à 6 chiffres à l'écran) et OOB (NFC ou QR). Pour les appareils portables, on utilise généralement Just Works ; pour les dispositifs médicaux, OOB avec vérification supplémentaire.
Selon la Bluetooth Core Specification 5.4 (2023), le temps d'établissement d'une connexion sécurisée en mode LE Secure Connections ne dépasse pas 300 ms avec un intervalle de connexion de 30 ms.
Le ATT (Attribute Protocol) est le modèle de transport de base où le serveur (périphérique) stocke des attributs et le client (smartphone) les lit ou les écrit. GATT (Generic Attribute Profile) construit une hiérarchie sur ATT : Service → Characteristic → Descriptor.
Chaque service est un groupe logique de caractéristiques décrivant une fonction du périphérique : Heart Rate Service (UUID 0x180D) contient la caractéristique Heart Rate Measurement (UUID 0x2A37) avec un descripteur Client Characteristic Configuration (0x2902) qui contrôle les notifications. Le développeur d'application mobile obtient la liste des services via discoverServices(), puis trouve la caractéristique souhaitée par UUID et s'abonne aux notifications.
BLE utilise des UUID 16 bits pour les services standardisés Bluetooth SIG et des UUID 128 bits pour les services personnalisés du fabricant. Par exemple, un étui tracker peut définir un service A000-… avec une caractéristique pour transmettre le niveau de charge de sa batterie.
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("Pouls : $heartRate bpm")
}
}
Dans l'exemple, l'application trouve le service Heart Rate par l'UUID standard Bluetooth SIG, obtient la caractéristique de mesure du pouls et s'abonne à ses notifications — à chaque changement de pouls, le périphérique envoie des données sans demande explicite du Central.
L'Advertising est un mécanisme clé du BLE par lequel un périphérique Peripheral envoie périodiquement des paquets de diffusion (PDU d'advertising) sur trois canaux primaires (37, 38, 39). Le dispositif central scanne ces canaux, reçoit les données d'advertising et peut initier une connexion.
Un paquet d'advertising contient jusqu'à 31 octets de charge utile : drapeaux, niveau de puissance TX, nom local, UUID de services, données spécifiques au fabricant. Cela suffit pour transmettre des relevés de capteurs sans établir de connexion — mode sans connexion (type Broadcaster). Pour une transmission continue de données (par exemple, température une fois par minute), on utilise une connexion avec un intervalle allant jusqu'à 1000 ms.
Sur les plateformes mobiles, le scan est lancé via startScan() (Android) ou scanForPeripherals() (iOS). Le filtrage par UUID de service permet d'économiser l'énergie en ne traitant pas tous les appareils visibles — l'application ne reçoit un callback que pour les balises ou capteurs pertinents.
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("Appareil trouvé : \(name)")
}
}
}
Après avoir découvert un périphérique, le Central appelle connect(), en passant l'objet CBPeripheral. Les paramètres de connexion (intervalle, latence, temps de supervision) sont négociés au niveau de la couche liaison — le développeur ne les gère pas directement, mais peut les influencer via requestConnectionPriority sur Android.
Les deux plateformes mobiles fournissent des API natives pour travailler avec BLE. Core Bluetooth (iOS) utilise une approche par délégués : le gestionnaire central initie les opérations et l'objet périphérique rapporte les résultats via des méthodes déléguées. android.bluetooth (Android) est construit sur des interfaces de callback et prend en charge les opérations GATT parallèles avec plusieurs périphériques.
Différences clés entre les plateformes :
Selon les tests de la Bluetooth SIG (2024), le temps de connexion BLE entre un smartphone et un tracker d'activité est en moyenne de 150 à 300 ms sur Android et de 100 à 250 ms sur iOS — la différence est due aux politiques de gestion du module radiofréquence.
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;
}
}
}
}
Le développeur Flutter obtient une interface API unifiée ; sous le capot, flutter_blue_plus traduit les appels en android.bluetooth natif ou Core Bluetooth. Cette approche réduit le temps de développement d'applications pour travailler avec des périphériques BLE sur les deux plateformes.
Questions fréquentes
Bluetooth Classic (BR/EDR) est conçu pour le streaming continu — appels audio, musique, transfert de fichiers. BLE est optimisé pour les paquets de données courts avec une consommation d'énergie minimale — capteurs, balises, trackers d'activité. Le Classic consomme 10–30 mA, le BLE — 5–15 mA en crête.
Au niveau physique, ils ne sont pas compatibles — modulation et carte des canaux différentes. Cependant, la plupart des puces modernes sont double mode et implémentent les deux piles. Un smartphone avec une puce double mode peut communiquer simultanément avec un casque Classic et un tracker BLE.
L'intervalle de connexion est le temps entre deux paquets de données dans une connexion établie. La valeur varie de 7,5 ms à 4 secondes. Plus l'intervalle est court, plus le débit est élevé et plus la consommation d'énergie est importante. Pour un capteur de température qui signale une fois par minute, un intervalle de 1000 ms est utilisé.
L'appairage est le processus d'échange de clés de chiffrement entre Central et Peripheral. BLE supporte trois méthodes : Just Works (sans confirmation), Passkey Entry (saisie d'un code PIN à l'écran) et OOB (échange via NFC ou QR). Après l'appairage, les appareils stockent les clés (bonding) et ne demandent pas de réauthentification lors des connexions ultérieures.
Les plus courants : Heart Rate Profile (0x180D) pour les cardiofréquencemètres, Blood Pressure Profile (0x1810) pour les tensiomètres, Environmental Sensing (0x181A) pour les capteurs de température et d'humidité, Battery Service (0x180F) pour le niveau de charge, Device Information (0x180A) pour le modèle et le numéro de série.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi