Central é um dispositivo na arquitetura Bluetooth Low Energy que inicia o escaneamento, estabelece uma conexão e gerencia a troca de dados com dispositivos periféricos. No contexto do desenvolvimento mobile, Central é um smartphone ou tablet com iOS ou Android que se conecta a sensores BLE, rastreadores fitness e acessórios inteligentes. De acordo com Bluetooth Core Specification 5.4 (2023), o Central pode suportar simultaneamente até 7 conexões simultâneas com diferentes Periféricos, embora a limitação real dependa do fabricante do chip e da versão do SO. Core Bluetooth no iOS e android.bluetooth.le no Android fornecem uma API completa para gerenciar o papel Central.
Principais pontos
Central é um cliente GATT na arquitetura Bluetooth Low Energy que inicia todas as comunicações. Ao contrário do Periférico, que espera passivamente por conexões e anuncia seus serviços, o Central escaneia ativamente o ar, descobre pacotes de publicidade e inicia conexões.
O modelo assimétrico Central-Periférico é uma característica fundamental do BLE. O Central gerencia a lógica de interação: decide a qual dispositivo se conectar, quais serviços explorar e quais características ler e escrever. Periférico atua como um servidor de dados — armazena serviços e características, mas não inicia conexões.
De acordo com a Bluetooth Core Specification 5.4 (2023), um dispositivo pode ser simultaneamente Central e Periférico (papel duplo). Por exemplo, um smartphone pode ser Central para uma pulseira fitness e Periférico para outro smartphone transferindo arquivos. No entanto, a operação simultânea em ambos os papéis aumenta o consumo de energia e a complexidade do gerenciamento de conexões.
No ecossistema de desenvolvimento mobile, o papel Central é o cenário mais comum. Um aplicativo em um smartphone procura por dispositivos BLE (sensores, fones de ouvido, pulseiras), conecta-se a eles e recebe dados. O desenvolvedor usa a API do sistema operacional para trabalhar com Central: CBCentralManager no iOS, BluetoothLeScanner e BluetoothGatt no Android.
Escaneamento é o primeiro estágio da operação do Central. O dispositivo escuta nos canais de rádio BLE (37, 38, 39) para detectar pacotes de publicidade que os Periféricos enviam periodicamente. Cada pacote de publicidade contém o nome do dispositivo, uma lista de UUIDs de serviço e dados personalizados.
O Central pode operar em dois modos de escaneamento: escaneamento passivo (apenas recebendo pacotes de publicidade) e escaneamento ativo (enviando uma solicitação de escaneamento para obter dados adicionais via resposta de escaneamento). O escaneamento passivo economiza energia, mas fornece menos informação. O escaneamento ativo permite obter dados completos do pacote de publicidade, incluindo o nome do dispositivo e a lista completa de serviços.
A filtragem por UUID é uma otimização importante. O Central pode escanear apenas dispositivos com um UUID de serviço específico, ignorando os demais. Isso não apenas economiza energia, mas também simplifica a lógica do aplicativo: o delegado recebe apenas dispositivos relevantes.
import CoreBluetooth
class BLECentralManager: NSObject, CBCentralManagerDelegate {
private var centralManager: CBCentralManager!
override init() {
super.init()
centralManager = CBCentralManager(
delegate: self,
queue: nil
)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
central.scanForPeripherals(
withServices: nil,
options: [
CBCentralManagerScanOptionAllowDuplicatesKey: false
]
)
}
}
}
Gerenciamento de conexões é a responsabilidade chave do Central. Após descobrir um Periférico adequado, o Central inicia uma conexão. Uma conexão BLE é estabelecida através de um procedimento de estabelecimento de conexão que inclui troca de parâmetros: intervalo de conexão, latência escrava e tempo de supervisão.
O intervalo de conexão determina com que frequência Central e Periférico trocam dados após a conexão. O intervalo pode variar de 7.5 ms a 4 segundos. Quanto menor o intervalo, maior a taxa de transferência, mas também maior o consumo de energia. Latência escrava permite que o Periférico ignore vários eventos de conexão para economizar energia. O tempo de supervisão é o tempo máximo sem resposta após o qual a conexão é considerada perdida.
O Central é responsável por encerrar a conexão após a conclusão da troca de dados. Dispositivos BLE normalmente não mantêm uma conexão permanente — o Central conecta-se, obtém dados e desconecta-se. Este é um padrão comum para sensores IoT: o Central escaneia, encontra um sensor de temperatura, conecta-se, lê o valor e desconecta-se.
| Parâmetro | Intervalo | Finalidade | Recomendação |
|---|---|---|---|
| Intervalo de conexão | 7.5 ms – 4 s | Frequência de troca de dados | 30–50 ms para streaming, 1–4 s para dados esporádicos |
| Latência escrava | 0–499 eventos | Ignorar eventos do Periférico | 4–10 para economia de energia do sensor |
| Tempo de supervisão | 100 ms – 32 s | Tempo limite de perda de conexão | 6–10 segundos para a maioria dos cenários |
| MTU | 23–517 bytes | Tamanho do pacote ATT | Solicitar o máximo na conexão |
Core Bluetooth é o framework da Apple para trabalhar com BLE no iOS e macOS. A classe CBCentralManager fornece a API completa para implementar o papel Central: escaneamento, conexão, gerenciamento de conexões. O trabalho com Central no iOS é baseado em um modelo de delegado: CBCentralManagerDelegate recebe eventos de mudança de estado, descoberta de dispositivos e resultados de conexão.
As principais etapas para Central no iOS: inicializar CBCentralManager, verificar o estado do Bluetooth, iniciar o escaneamento, lidar com dispositivos descobertos via delegado, conectar-se ao Periférico selecionado, descobrir serviços e características, trocar dados.
// Conectar ao Peripheral descoberto
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// Manter referência ao periférico e conectar
discoveredPeripheral = peripheral
central.connect(peripheral, options: nil)
}
// Conexão bem-sucedida
func centralManager(
_ central: CBCentralManager,
didConnect peripheral: CBPeripheral
) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}
O iOS limita o trabalho BLE em segundo plano: em segundo plano, um aplicativo só pode escanear com chaves específicas no Info.plist, e dispositivos conectados podem notificar o Central sobre mudanças de dados. Para aplicações críticas (dispositivos médicos), use Modos em segundo plano com a chave bluetooth-central.
Android fornece a API BluetoothLeScanner para escanear dispositivos BLE e BluetoothGatt para gerenciamento de conexões. A partir do Android 5.0 (API 21), o BluetoothLeScanner substituiu o obsoleto startLeScan. A API requer permissões BLUETOOTH, BLUETOOTH_ADMIN e ACCESS_FINE_LOCATION (ou ACCESS_BACKGROUND_LOCATION para Android 10+).
import android.bluetooth.le.*;
import android.bluetooth.*;
private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;
// Configurar escaneamento
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
// Iniciar escaneamento
scanner.startScan(null, settings, new ScanCallback() {
@Override
public void onScanResult(
int callbackType,
ScanResult result
) {
BluetoothDevice device = result.getDevice();
// Conectar ao dispositivo
bluetoothGatt = device.connectGatt(
context, false, gattCallback
);
}
});
No Android, é importante considerar as restrições de escaneamento: a partir do Android 7 (API 24), o escaneamento não pode ser iniciado mais de 5 vezes por 30 segundos em aplicativos que não usam localização. Android 12+ requer permissões BLUETOOTH_SCAN, BLUETOOTH_CONNECT e ADVERTISE, bem como solicitações em tempo de execução dessas permissões.
O consumo de energia do Central é maior que o do Periférico devido à necessidade de escanear constantemente os canais de rádio. O Central recebe pacotes BLE, processa-os, gerencia conexões e frequentemente realiza cálculos no processador do aplicativo. De acordo com Bluetooth SIG, o escaneamento consome entre 30 mA e 100 mA dependendo do modo.
Existem várias estratégias de economia de energia para o Central. Escaneamento por intervalo é o método mais eficaz: o Central escaneia em janelas curtas (janela de escaneamento) com pausas longas (intervalo de escaneamento). Por exemplo, com uma janela de escaneamento de 30 ms e um intervalo de escaneamento de 1000 ms, o consumo de energia é reduzido em 97% em comparação com o escaneamento contínuo.
Uma otimização adicional é a filtragem por UUID. O Central processa apenas pacotes de publicidade relevantes mais rapidamente, ignorando os demais. Isso reduz a carga da CPU e aumenta a vida útil da bateria do dispositivo. Também é recomendado parar o escaneamento imediatamente após encontrar o dispositivo desejado e não manter a conexão por mais tempo que o necessário.
Perguntas frequentes
Sim, BLE suporta papel duplo: um dispositivo pode ser simultaneamente Central para alguns dispositivos e Periférico para outros. Por exemplo, um smartphone lê dados de um sensor (como Central) e simultaneamente anuncia seu próprio serviço (como Periférico) para transmitir dados a outro dispositivo.
A especificação BLE define um limite de 7 conexões para um único Central. Na prática, a limitação depende do fabricante do chip: chips Nordic nRF52840 suportam até 20 conexões, enquanto alguns adaptadores Bluetooth baratos suportam no máximo 3–4.
As razões podem variar: o sensor não está anunciando (não está em modo de publicidade), o filtro UUID é muito restritivo, o Bluetooth está desligado no smartphone, permissões necessárias estão faltando (localização no Android), ou o sensor está fora do alcance (recomendado até 10 metros em ambientes fechados).
Não necessariamente. Para muitos cenários, o padrão conectar-e-ler é usado: o Central escaneia, conecta-se, lê os dados necessários e desconecta-se. Uma conexão constante é necessária apenas para dados em streaming (pulso, ECG) ou controle de dispositivo em tempo real.
Use escaneamento por intervalo com uma janela de escaneamento de 30–50 ms e um intervalo de escaneamento de 500–1000 ms. Filtre dispositivos por UUID para processar apenas pacotes de publicidade relevantes. Desative o escaneamento imediatamente após encontrar o Periférico desejado.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também