>> Tecnologia elettronica >  >> Cellulari & accessori >> Accessori Bluetooth

Collegare più dispositivi Bluetooth a un server/app: architetture e implementazione

Collegare più periferiche Bluetooth a un singolo dispositivo centrale (telefono, Pi, PC, gateway) richiede di scegliere la giusta **topologia** e **configurazione dello stack**.

Opzioni di topologia

1. Centrale/Periferica (Stella / Master-Slave) — Classica

2. Bluetooth Mesh — Molti-a-molti

3. Senza connessione / Broadcast (Beacon / Advertising)

  • Le Periferiche **pubblicizzano** dati (iBeacon, Eddystone, custom). Il Centrale **scansiona**—nessuna connessione.
  • Scanner illimitati**, consumi estremamente bassi (la periferica dorme 99%).
  • Unidirezionale (periferica → centrale). Nessun ack, nessuna sicurezza (a meno che payload criptato).

Passi di implementazione (Modello Centrale/Periferica)

  1. Attiva Bluetooth sul centrale (Linux: `bluetoothctl power on`; Android: `BluetoothAdapter.enable()`; iOS: `CBCentralManager`).
  2. Scansiona e filtra per UUID servizio target / nomi / MAC.
  3. Associa / Lega ogni periferica (MITM, OOB, o Just Works). Conserva le chiavi per riconnessione automatica.
  4. Connetti e scopri servizi (`connectGatt` / `connectPeripheral`). Memorizza i handle.
  5. Abilita Notifiche/Indicazioni su caratteristici CCCD (0x2902) per dati in tempo reale.
  6. Multiplex: Usa **client GATT separati / code per dispositivo** nella tua app. Loop di eventi gestisce i callback.
  7. Gestisci parametri di connessione: Richiedi **intervallo di connessione** (min/max), **slave latency**, **supervision timeout** per ruolo dispositivo (alta frequenza per IMU, bassa per temperatura).
  8. Gestisci disconnessioni/riconnesse: Backoff esponenziale, chiavi di bonding persistenti.

Stack di codice

  • Linux/Pi: **BlueZ (API D-Bus)** + Python `bleak` / `dbus-next` / `bluezero`.
  • Android: `BluetoothGatt`, `BluetoothLeScanner` (Kotlin Flow/RxJava).
  • iOS/macOS: **CoreBluetooth** (`CBCentralManager`, `CBPeripheral` — basato su delegate).
  • Cross-platform: **Flutter `flutter_blue_plus`**, **React Native `react-native-ble-plx`**, **.NET `BluetoothLE`**.
  • Centrale Embedded: **Zephyr RTOS** (Host Bluetooth + Controller), **ESP-IDF** (NimBLE/Bluedroid).

Trappole critiche

  • Limite di connessione: Controlla specifiche controller (Nordic nRF52: 20; nRF53: 32; ESP32: 3–7). Superamento → `CONN_FAILED`.
  • Throughput: 1 connessione @ 30 Hz notify ≈ 10 kbps. 10 dispositivi = 100 kbps — OK. 20 @ 100 Hz = saturazione.
  • Coesistenza: Wi-Fi 2,4 GHz uccide il throughput BLE. Usa **AFH (Adaptive Frequency Hopping)**, posiziona antenne distanti, preferisci Wi-Fi 5 GHz.
  • Energia: Scansione/connesso centrale = alta corrente. Duty-cycle della scansione.

Scegli **Centrale/Periferica** per <10–20 sensori con flussi affidabili. Scegli **Mesh** per 50+ nodi illuminazione/edificio. Scegli **Beacon** per telemetria ultra-basso consumo.