>> Tecnologia Eletrônica >  >> Celulares e Acessórios >> Bluetooth

Conectar Múltiplos Dispositivos Bluetooth a Um Servidor/App: Arquiteturas e Implementação

Conectar múltiplos periféricos Bluetooth a um único dispositivo central (telemóvel, Pi, PC, gateway) requer escolher a **topologia** e **configuração stack** certas.

Opções Topologia

1. Central/Periférico (Estrela / Master-Slave) — Clássico

  • Central (seu servidor/app) conecta a **múltiplos Periféricos** (sensores, wearables, tags).
  • **Máx conexões concorrentes:** Bluetooth 4.x: 3–7; 5.0+: **até 20+** (dependente controlador).
  • Periféricos **não falam entre si** — todo tráfego roteia através Central.
  • Simples, amplamente suportado, latência determinística.

2. Bluetooth Mesh — Muitos-para-Muitos

  • **Todos nós retransmitem mensagens** (flood gerido). Nenhum coordenador central necessário.
  • **Escalável:** Centenas nós (luzes, interruptores, sensores).
  • **Auto-recuperação:** Rotas em torno nós falhados.
  • **Latência maior**, throughput menor (~10–20 kbps efetivo). Não para streaming.
  • Requer **firmware mesh-capable** em todos nós (Nordic, Silicon Labs, ESP32, Zephyr RTOS).

3. Sem Conexão / Broadcast (Beacon / Advertising)

  • Periféricos **anunciam** dados (iBeacon, Eddystone, custom). Central **escaneia** — sem conexão.
  • **Scanners ilimitados**, ultra-baixo consumo (periférico dorme 99%).
  • Unidirecional (periférico → central). Sem ack, sem segurança (a menos payload encriptado).

Passos Implementação (Modelo Central/Periférico)

  1. Ative Bluetooth no central (Linux: `bluetoothctl power on`; Android: `BluetoothAdapter.enable()`; iOS: `CBCentralManager`).
  2. Escaneie e Filtre para UUIDs serviço alvo / nomes / MACs.
  3. Emparelhe / Vincule cada periférico (MITM, OOB, ou Just Works). Guarde chaves para auto-reconexão.
  4. Conecte e Descubra Serviços (`connectGatt` / `connectPeripheral`). Cache handles.
  5. Ative Notificações/Indicações em CCCDs característica (0x2902) para dados tempo real.
  6. Multiplexe: Use **clientes GATT / filas separadas por dispositivo** na sua app. Event loop trata callbacks.
  7. Gestão Parâmetros Conexão: Peça **intervalo conexão** (min/max), **latência slave**, **timeout supervisão** por papel dispositivo (taxa alta IMU, baixa temp).
  8. Trate Desconexões/Reconexões: Backoff exponencial, chaves bonding persistentes.

Stacks Código

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

Armadilhas Críticas

  • Limite Conexões: Verifique spec controlador (Nordic nRF52: 20; nRF53: 32; ESP32: 3–7). Exceda → `CONN_FAILED`.
  • Throughput: 1 conexão @ 30 Hz notify ≈ 10 kbps. 10 dispositivos = 100 kbps — OK. 20 @ 100 Hz = saturação.
  • Coexistência: Wi-Fi 2.4 GHz mata throughput BLE. Use **AFH (Adaptive Frequency Hopping)**, separe antenas, prefira 5 GHz Wi-Fi.
  • Energia: Central escaneando/conectado = corrente alta. Duty-cycle scanning.

Escolha **Central/Periférico** para <10–20 sensores com streams fiáveis. Escolha **Mesh** para 50+ nós iluminação/edifício. Escolha **Beacon** para telemetria ultra-baixo-consumo.