Central — cos'è, il suo ruolo nel BLE e come scansiona i dispositivi

Autore: IT Sectr Pubblicato: 2026-07-15 Tempo di lettura: 8 min

Central è un dispositivo nell'architettura Bluetooth Low Energy che avvia la scansione, stabilisce una connessione e gestisce lo scambio di dati con i dispositivi periferici. Nel contesto dello sviluppo mobile, Central è uno smartphone o tablet con iOS o Android che si connette a sensori BLE, fitness tracker e accessori intelligenti. Secondo Bluetooth Core Specification 5.4 (2023), Central può supportare simultaneamente fino a 7 connessioni simultanee con diversi Peripheral, sebbene il limite effettivo dipenda dal produttore del chip e dalla versione del sistema operativo. Core Bluetooth su iOS e android.bluetooth.le su Android forniscono un'API completa per gestire il ruolo Central.

Punti chiave

  • Central è un dispositivo BLE attivo che scansiona, si connette e gestisce lo scambio con le periferiche.
  • La scansione avviene tramite pacchetti pubblicitari — Central può filtrare i dispositivi per Service UUID per risparmiare energia.
  • Un singolo Central può supportare simultaneamente fino a 7 connessioni con diversi Peripheral (dipende dall'implementazione).
  • Nello sviluppo mobile, Central è uno smartphone che utilizza Core Bluetooth (iOS) o android.bluetooth.le (Android).
  • Il ruolo Central consuma più energia del Peripheral a causa della scansione costante e dell'elaborazione dei dati.

Cos'è Central nel BLE?

Central è un client GATT nell'architettura Bluetooth Low Energy che avvia tutte le comunicazioni. A differenza del Peripheral, che attende passivamente le connessioni e pubblicizza i propri servizi, Central scansiona attivamente l'etere, scopre i pacchetti pubblicitari e avvia le connessioni.

Il modello asimmetrico Central-Peripheral è una caratteristica fondamentale del BLE. Central gestisce la logica di interazione: decide a quale dispositivo connettersi, quali servizi esplorare e quali caratteristiche leggere e scrivere. Peripheral agisce come un server di dati — memorizza servizi e caratteristiche ma non avvia connessioni.

Secondo la Bluetooth Core Specification 5.4 (2023), un dispositivo può essere contemporaneamente Central e Peripheral (doppio ruolo). Ad esempio, uno smartphone può essere Central per un fitness band e Peripheral per un altro smartphone che trasferisce file. Tuttavia, il funzionamento simultaneo in entrambi i ruoli aumenta il consumo energetico e la complessità della gestione delle connessioni.

Nell'ecosistema dello sviluppo mobile, il ruolo Central è lo scenario più comune. Un'app sullo smartphone cerca dispositivi BLE (sensori, cuffie, braccialetti), si connette ad essi e riceve dati. Lo sviluppatore utilizza l'API del sistema operativo per lavorare con Central: CBCentralManager su iOS, BluetoothLeScanner e BluetoothGatt su Android.

Processo di scansione dei dispositivi

La scansione è la prima fase del funzionamento di Central. Il dispositivo ascolta sui canali radio BLE (37, 38, 39) per rilevare i pacchetti pubblicitari che i Peripheral inviano periodicamente. Ogni pacchetto pubblicitario contiene il nome del dispositivo, un elenco di Service UUID e dati personalizzati.

Central può operare in due modalità di scansione: scansione passiva (solo ricezione di pacchetti pubblicitari) e scansione attiva (invio di una richiesta di scansione per ottenere dati aggiuntivi tramite risposta di scansione). La scansione passiva risparmia energia ma fornisce meno informazioni. La scansione attiva consente di ottenere i dati completi del pacchetto pubblicitario, inclusi il nome del dispositivo e l'elenco completo dei servizi.

Il filtraggio per UUID è un'ottimizzazione importante. Central può scansionare solo i dispositivi con un Service UUID specifico, ignorando gli altri. Questo non solo risparmia energia, ma semplifica anche la logica dell'applicazione: il delegato riceve solo i dispositivi pertinenti.

swift
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
                ]
            )
        }
    }
}

Gestione delle connessioni

La gestione delle connessioni è la responsabilità chiave di Central. Dopo aver scoperto un Peripheral adatto, Central avvia una connessione. Una connessione BLE viene stabilita attraverso una procedura di stabilimento della connessione che include lo scambio di parametri: intervallo di connessione, latenza slave e timeout di supervisione.

L'intervallo di connessione determina la frequenza con cui Central e Peripheral scambiano dati dopo la connessione. L'intervallo può variare da 7,5 ms a 4 secondi. Più breve è l'intervallo, maggiore è la velocità effettiva, ma anche maggiore è il consumo energetico. La latenza slave consente al Peripheral di saltare diversi eventi di connessione per risparmiare energia. Il timeout di supervisione è il tempo massimo senza risposta dopo il quale la connessione viene considerata persa.

Central è responsabile della terminazione della connessione dopo il completamento dello scambio di dati. I dispositivi BLE di solito non mantengono una connessione permanente — Central si connette, ottiene i dati e si disconnette. Questo è un modello standard per i sensori IoT: Central scansiona, trova un sensore di temperatura, si connette, legge il valore e si disconnette.

ParametroIntervalloScopoRaccomandazione
Intervallo di connessione7,5 ms – 4 sFrequenza di scambio dati30–50 ms per streaming, 1–4 s per dati rari
Latenza slave0–499 eventiSalto eventi Peripheral4–10 per risparmio energetico del sensore
Timeout di supervisione100 ms – 32 sTimeout perdita connessione6–10 secondi per la maggior parte degli scenari
MTU23–517 byteDimensione pacchetto ATTRichiedere il massimo alla connessione

Central su iOS: Core Bluetooth

Core Bluetooth è il framework di Apple per lavorare con BLE su iOS e macOS. La classe CBCentralManager fornisce l'API completa per implementare il ruolo Central: scansione, connessione, gestione delle connessioni. Il lavoro con Central su iOS si basa su un modello delegato: CBCentralManagerDelegate riceve eventi di cambiamento di stato, scoperta di dispositivi e risultati di connessione.

I passaggi principali per Central su iOS: inizializzare CBCentralManager, verificare lo stato Bluetooth, avviare la scansione, gestire i dispositivi scoperti tramite delegato, connettersi al Peripheral selezionato, scoprire servizi e caratteristiche, scambiare dati.

swift
// Connettersi al Peripheral scoperto
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // Mantenere il riferimento al periferico e connettersi
    discoveredPeripheral = peripheral
    central.connect(peripheral, options: nil)
}

// Connessione riuscita
func centralManager(
    _ central: CBCentralManager,
    didConnect peripheral: CBPeripheral
) {
    peripheral.delegate = self
    peripheral.discoverServices(nil)
}

iOS limita il lavoro BLE in background: in background, un'app può scansionare solo con chiavi specifiche in Info.plist, e i dispositivi connessi possono notificare Central sui cambiamenti dei dati. Per applicazioni critiche (dispositivi medici), utilizzare le Modalità di background con la chiave bluetooth-central.

Central su Android: BluetoothLeScanner

Android fornisce l'API BluetoothLeScanner per scansionare i dispositivi BLE e BluetoothGatt per la gestione delle connessioni. A partire da Android 5.0 (API 21), BluetoothLeScanner ha sostituito il deprecato startLeScan. L'API richiede le autorizzazioni BLUETOOTH, BLUETOOTH_ADMIN e ACCESS_FINE_LOCATION (o ACCESS_BACKGROUND_LOCATION per Android 10+).

java
import android.bluetooth.le.*;
import android.bluetooth.*;

private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;

// Configurare la scansione
ScanSettings settings = new ScanSettings.Builder()
    .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
    .build();

// Avviare la scansione
scanner.startScan(null, settings, new ScanCallback() {
    @Override
    public void onScanResult(
            int callbackType,
            ScanResult result
    ) {
        BluetoothDevice device = result.getDevice();
        // Connettersi al dispositivo
        bluetoothGatt = device.connectGatt(
            context, false, gattCallback
        );
    }
});

Su Android, è importante considerare le restrizioni di scansione: a partire da Android 7 (API 24), la scansione non può essere avviata più di 5 volte in 30 secondi nelle app che non utilizzano la posizione. Android 12+ richiede le autorizzazioni BLUETOOTH_SCAN, BLUETOOTH_CONNECT e ADVERTISE, nonché richieste runtime di queste autorizzazioni.

Consumo energetico di Central

Il consumo energetico di Central è superiore a quello del Peripheral a causa della necessità di scansionare costantemente i canali radio. Central riceve pacchetti BLE, li elabora, gestisce le connessioni e spesso esegue calcoli sul processore dell'applicazione. Secondo Bluetooth SIG, la scansione consuma tra 30 mA e 100 mA a seconda della modalità.

Esistono diverse strategie di risparmio energetico per Central. La scansione a intervalli è il metodo più efficace: Central scansiona in finestre brevi (finestra di scansione) con lunghe pause (intervallo di scansione). Ad esempio, con una finestra di scansione di 30 ms e un intervallo di scansione di 1000 ms, il consumo energetico si riduce del 97% rispetto alla scansione continua.

Un'ottimizzazione aggiuntiva è il filtraggio per UUID. Central elabora più velocemente solo i pacchetti pubblicitari pertinenti, ignorando gli altri. Ciò riduce il carico della CPU e aumenta la durata della batteria del dispositivo. Si consiglia inoltre di interrompere la scansione immediatamente dopo aver trovato il dispositivo desiderato e di non mantenere la connessione più del necessario.

Domande frequenti

Uno smartphone può essere contemporaneamente Central e Peripheral?

Sì, BLE supporta il doppio ruolo: un dispositivo può essere contemporaneamente Central per alcuni dispositivi e Peripheral per altri. Ad esempio, uno smartphone legge i dati da un sensore (come Central) e contemporaneamente pubblicizza il proprio servizio (come Peripheral) per trasmettere dati a un altro dispositivo.

Quanti dispositivi può servire contemporaneamente un Central?

La specifica BLE definisce un limite di 7 connessioni per un singolo Central. In pratica, la limitazione dipende dal produttore del chip: i chip Nordic nRF52840 supportano fino a 20 connessioni, mentre alcuni adattatori Bluetooth economici non supportano più di 3–4.

Perché il mio Central non rileva il mio sensore BLE?

Le ragioni possono essere diverse: il sensore non sta pubblicizzando (non è in modalità advertising), il filtro UUID è troppo restrittivo, il Bluetooth è spento sullo smartphone, mancano le autorizzazioni necessarie (posizione su Android) o il sensore è fuori portata (consigliato fino a 10 metri in ambienti chiusi).

È necessario mantenere la connessione con un dispositivo BLE costantemente?

Non necessariamente. Per molti scenari, viene utilizzato il modello connetti-e-leggi: Central scansiona, si connette, legge i dati necessari e si disconnette. Una connessione costante è necessaria solo per dati in streaming (polso, ECG) o controllo del dispositivo in tempo reale.

Come ridurre il consumo energetico di Central durante la scansione?

Utilizzare la scansione a intervalli con una finestra di scansione di 30–50 ms e un intervallo di scansione di 500–1000 ms. Filtrare i dispositivi per UUID per elaborare solo i pacchetti pubblicitari pertinenti. Interrompere la scansione immediatamente dopo aver trovato il Peripheral desiderato.

Riepilogo

  • Central è un partecipante attivo della connessione BLE che avvia la scansione, la connessione e la gestione dello scambio di dati.
  • Il processo di scansione implica la ricezione di pacchetti pubblicitari sui canali 37, 38, 39 con la possibilità di filtrare per Service UUID.
  • Dopo aver scoperto un Peripheral, Central stabilisce una connessione con parametri configurabili — intervallo di connessione, latenza slave, timeout di supervisione.
  • Nello sviluppo mobile, Central viene implementato tramite CBCentralManager (iOS) o BluetoothLeScanner + BluetoothGatt (Android).
  • Un singolo Central può gestire simultaneamente fino a 7 connessioni nella configurazione Bluetooth standard.
  • Il consumo energetico di Central può essere ottimizzato attraverso la scansione a intervalli e il filtraggio UUID per aumentare la durata della batteria.
  • Una corretta gestione del ciclo di vita della connessione — dalla scoperta alla disconnessione — determina l'efficienza di un'applicazione BLE.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche