Central es un dispositivo en la arquitectura Bluetooth Low Energy que inicia el escaneo, establece una conexión y gestiona el intercambio de datos con dispositivos periféricos. En el contexto del desarrollo móvil, Central es un smartphone o tablet con iOS o Android que se conecta a sensores BLE, rastreadores de actividad y accesorios inteligentes. Según Bluetooth Core Specification 5.4 (2023), Central puede soportar simultáneamente hasta 7 conexiones simultáneas con diferentes Periféricos, aunque la limitación real depende del fabricante del chip y la versión del SO. Core Bluetooth en iOS y android.bluetooth.le en Android proporcionan una API completa para gestionar el rol Central.
Puntos clave
Central es un cliente GATT en la arquitectura Bluetooth Low Energy que inicia todas las comunicaciones. A diferencia de Periférico, que espera pasivamente las conexiones y anuncia sus servicios, Central escanea activamente el aire, descubre paquetes de publicidad e inicia conexiones.
El modelo asimétrico Central-Periférico es una característica fundamental de BLE. Central gestiona la lógica de interacción: decide a qué dispositivo conectarse, qué servicios explorar y qué características leer y escribir. Periférico actúa como servidor de datos — almacena servicios y características, pero no inicia conexiones.
Según Bluetooth Core Specification 5.4 (2023), un dispositivo puede ser simultáneamente Central y Periférico (rol dual). Por ejemplo, un smartphone puede ser Central para una pulsera de actividad y Periférico para otro smartphone que transfiere archivos. Sin embargo, la operación simultánea en ambos roles aumenta el consumo de energía y la complejidad de la gestión de conexiones.
En el ecosistema del desarrollo móvil, el rol Central es el escenario más común. Una aplicación en un smartphone busca dispositivos BLE (sensores, auriculares, pulseras), se conecta a ellos y recibe datos. El desarrollador usa la API del sistema operativo para trabajar con Central: CBCentralManager en iOS, BluetoothLeScanner y BluetoothGatt en Android.
Escaneo es la primera etapa de la operación de Central. El dispositivo escucha en los canales de radio BLE (37, 38, 39) para detectar paquetes de publicidad que los Periféricos envían periódicamente. Cada paquete de publicidad contiene el nombre del dispositivo, una lista de UUID de servicio y datos personalizados.
Central puede operar en dos modos de escaneo: escaneo pasivo (solo recepción de paquetes de publicidad) y escaneo activo (envío de solicitud de escaneo para obtener datos adicionales mediante respuesta de escaneo). El escaneo pasivo ahorra energía pero proporciona menos información. El escaneo activo permite obtener datos completos del paquete de publicidad, incluido el nombre del dispositivo y la lista completa de servicios.
El filtrado por UUID es una optimización importante. Central puede escanear solo dispositivos con un UUID de servicio específico, ignorando el resto. Esto no solo ahorra energía, sino que también simplifica la lógica de la aplicación: el delegado recibe solo 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
]
)
}
}
}
Gestión de conexiones es la responsabilidad clave de Central. Después de descubrir un Periférico adecuado, Central inicia una conexión. Una conexión BLE se establece mediante un procedimiento de establecimiento de conexión que incluye intercambio de parámetros: intervalo de conexión, latencia de esclavo y tiempo de supervisión.
El intervalo de conexión determina con qué frecuencia Central y Periférico intercambian datos después de la conexión. El intervalo puede variar de 7.5 ms a 4 segundos. Cuanto más corto es el intervalo, mayor es el rendimiento, pero también mayor es el consumo de energía. Latencia de esclavo permite que el Periférico omita varios eventos de conexión para ahorrar energía. El tiempo de supervisión es el tiempo máximo sin respuesta después del cual la conexión se considera perdida.
Central es responsable de terminar la conexión después de completar el intercambio de datos. Los dispositivos BLE generalmente no mantienen una conexión permanente — Central se conecta, obtiene datos y se desconecta. Este es un patrón estándar para sensores IoT: Central escanea, encuentra un sensor de temperatura, se conecta, lee el valor y se desconecta.
| Parámetro | Rango | Propósito | Recomendación |
|---|---|---|---|
| Intervalo de conexión | 7.5 ms – 4 s | Frecuencia de intercambio de datos | 30–50 ms para streaming, 1–4 s para datos poco frecuentes |
| Latencia de esclavo | 0–499 eventos | Omisión de eventos del Periférico | 4–10 para ahorro de energía del sensor |
| Tiempo de supervisión | 100 ms – 32 s | Tiempo de espera de pérdida de conexión | 6–10 segundos para la mayoría de escenarios |
| MTU | 23–517 bytes | Tamaño del paquete ATT | Solicitar el máximo al conectar |
Core Bluetooth es el framework de Apple para trabajar con BLE en iOS y macOS. La clase CBCentralManager proporciona la API completa para implementar el rol Central: escaneo, conexión, gestión de conexiones. El trabajo con Central en iOS se basa en un modelo de delegado: CBCentralManagerDelegate recibe eventos de cambio de estado, descubrimiento de dispositivos y resultados de conexión.
Los pasos principales para Central en iOS: inicializar CBCentralManager, verificar el estado de Bluetooth, iniciar el escaneo, manejar los dispositivos descubiertos a través del delegado, conectarse al Periférico seleccionado, descubrir servicios y características, intercambiar datos.
// Conectarse al Peripheral descubierto
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// Mantener referencia al periférico y conectar
discoveredPeripheral = peripheral
central.connect(peripheral, options: nil)
}
// Conexión exitosa
func centralManager(
_ central: CBCentralManager,
didConnect peripheral: CBPeripheral
) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}
iOS limita el trabajo en segundo plano de BLE: en segundo plano, una aplicación solo puede escanear con claves específicas en Info.plist, y los dispositivos conectados pueden notificar a Central sobre cambios de datos. Para aplicaciones críticas (dispositivos médicos), use Modos en segundo plano con la clave bluetooth-central.
Android proporciona la API BluetoothLeScanner para escanear dispositivos BLE y BluetoothGatt para la gestión de conexiones. A partir de Android 5.0 (API 21), BluetoothLeScanner reemplazó al obsoleto startLeScan. La API requiere permisos BLUETOOTH, BLUETOOTH_ADMIN y ACCESS_FINE_LOCATION (o ACCESS_BACKGROUND_LOCATION para Android 10+).
import android.bluetooth.le.*;
import android.bluetooth.*;
private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;
// Configurar escaneo
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
// Iniciar escaneo
scanner.startScan(null, settings, new ScanCallback() {
@Override
public void onScanResult(
int callbackType,
ScanResult result
) {
BluetoothDevice device = result.getDevice();
// Conectar al dispositivo
bluetoothGatt = device.connectGatt(
context, false, gattCallback
);
}
});
En Android, es importante considerar las restricciones de escaneo: a partir de Android 7 (API 24), el escaneo no puede iniciarse más de 5 veces por 30 segundos en aplicaciones que no usan ubicación. Android 12+ requiere permisos BLUETOOTH_SCAN, BLUETOOTH_CONNECT y ADVERTISE, así como solicitudes en tiempo de ejecución de estos permisos.
El consumo de energía de Central es mayor que el del Periférico debido a la necesidad de escanear constantemente los canales de radio. Central recibe paquetes BLE, los procesa, gestiona conexiones y a menudo realiza cálculos en el procesador de la aplicación. Según Bluetooth SIG, el escaneo consume entre 30 mA y 100 mA dependiendo del modo.
Existen varias estrategias de ahorro de energía para Central. Escaneo por intervalos es el método más efectivo: Central escanea en ventanas cortas (ventana de escaneo) con pausas largas (intervalo de escaneo). Por ejemplo, con una ventana de escaneo de 30 ms y un intervalo de escaneo de 1000 ms, el consumo de energía se reduce en un 97% en comparación con el escaneo continuo.
Una optimización adicional es el filtrado por UUID. Central procesa solo los paquetes de publicidad relevantes más rápido, ignorando el resto. Esto reduce la carga de la CPU y aumenta la duración de la batería del dispositivo. También se recomienda detener el escaneo inmediatamente después de encontrar el dispositivo deseado y no mantener la conexión más tiempo del necesario.
Preguntas frecuentes
Sí, BLE soporta rol dual: un dispositivo puede ser simultáneamente Central para algunos dispositivos y Periférico para otros. Por ejemplo, un smartphone lee datos de un sensor (como Central) y simultáneamente anuncia su propio servicio (como Periférico) para transmitir datos a otro dispositivo.
La especificación BLE define un límite de 7 conexiones para un solo Central. En la práctica, la limitación depende del fabricante del chip: los chips Nordic nRF52840 soportan hasta 20 conexiones, mientras que algunos adaptadores Bluetooth económicos no soportan más de 3–4.
Las razones pueden ser varias: el sensor no está publicitando (no está en modo de publicidad), el filtro UUID es demasiado estricto, el Bluetooth está apagado en el smartphone, faltan permisos necesarios (ubicación en Android), o el sensor está fuera de alcance (se recomienda hasta 10 metros en interiores).
No necesariamente. Para muchos escenarios se utiliza el patrón conectar-y-leer: Central escanea, se conecta, lee los datos necesarios y se desconecta. Una conexión constante solo es necesaria para datos en streaming (pulso, ECG) o control de dispositivos en tiempo real.
Use escaneo por intervalos con una ventana de escaneo de 30–50 ms y un intervalo de escaneo de 500–1000 ms. Filtre dispositivos por UUID para procesar solo paquetes de publicidad relevantes. Desactive el escaneo inmediatamente después de encontrar el Periférico deseado.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también