Central — czym jest, rola w BLE i jak skanuje urządzenia

Autor: IT Sectr Opublikowano: 2026-07-15 Czas czytania: 8 min

Central — to urządzenie w architekturze Bluetooth Low Energy, które inicjuje skanowanie, nawiązuje połączenie i zarządza wymianą danych z urządzeniami peryferyjnymi. W kontekście programowania mobilnego Central to smartfon lub tablet na iOS lub Android, który łączy się z czujnikami BLE, trackerami fitness i inteligentnymi akcesoriami. Według Bluetooth Core Specification 5.4 (2023), Central może jednocześnie obsługiwać do 7 połączeń z różnymi Peripheral, chociaż rzeczywiste ograniczenie zależy od producenta układu i wersji systemu operacyjnego. Core Bluetooth na iOS i android.bluetooth.le na Android zapewniają pełne API do zarządzania rolą Central.

Najważniejsze

  • Central — aktywne urządzenie BLE, które skanuje, łączy się i zarządza wymianą z peryferiami.
  • Skanowanie odbywa się poprzez pakiety reklamowe — Central może filtrować urządzenia po Service UUID w celu oszczędzania energii.
  • Jeden Central może jednocześnie obsługiwać do 7 połączeń z różnymi Peripheral (zależnie od implementacji).
  • W programowaniu mobilnym Central to smartfon korzystający z Core Bluetooth (iOS) lub android.bluetooth.le (Android).
  • Rola Central zużywa więcej energii niż Peripheral ze względu na ciągłe skanowanie i przetwarzanie danych.

Czym jest Central w BLE?

Central — to klient GATT w architekturze Bluetooth Low Energy, który inicjuje całą komunikację. W przeciwieństwie do Peripheral, które pasywnie oczekuje na połączenie i reklamuje swoje usługi, Central aktywnie skanuje kanał radiowy, wykrywa pakiety reklamowe i inicjuje połączenie.

Asymetryczny model Central-Peripheral to fundamentalna cecha BLE. Central zarządza logiką interakcji: decyduje, z którym urządzeniem się połączyć, które usługi zbadać, które cechy odczytać i zapisać. Peripheral pełni rolę serwera danych — przechowuje usługi i cechy, ale nie inicjuje połączeń.

Według Bluetooth Core Specification 5.4 (2023), urządzenie może być jednocześnie Central i Peripheral (dual role). Na przykład smartfon może być Central dla opaski fitness i Peripheral dla innego smartfona przesyłającego pliki. Jednak jednoczesna praca w obu rolach zwiększa pobór mocy i złożoność zarządzania połączeniami.

W ekosystemie programowania mobilnego rola Central to najczęstszy scenariusz. Aplikacja na smartfonie szuka urządzeń BLE (czujników, słuchawek, opasek), łączy się z nimi i otrzymuje dane. Deweloper korzysta z API systemu operacyjnego do pracy z Central: CBCentralManager w iOS, BluetoothLeScanner i BluetoothGatt w Android.

Proces skanowania urządzeń

Skanowanie — to pierwszy etap pracy Central. Urządzenie nasłuchuje kanałów radiowych BLE (37, 38, 39) w celu wykrycia pakietów reklamowych, które okresowo wysyłają Peripheral. Każdy pakiet reklamowy zawiera nazwę urządzenia, listę UUID usług i dane użytkownika.

Central może pracować w dwóch trybach skanowania: passive scanning (tylko odbiór pakietów reklamowych) i active scanning (wysyłanie scan request w celu uzyskania dodatkowych danych przez scan response). Passive scanning oszczędza energię, ale daje mniej informacji. Active scanning pozwala uzyskać pełne dane pakietu reklamowego, w tym nazwę urządzenia i pełną listę usług.

Filtracja po UUID — ważna optymalizacja. Central może skanować tylko urządzenia z określonym Service UUID, ignorując pozostałe. To nie tylko oszczędza energię, ale także upraszcza logikę aplikacji: delegat otrzymuje tylko istotne urządzenia.

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

Zarządzanie połączeniami

Zarządzanie połączeniami — kluczowy obowiązek Central. Po wykryciu odpowiedniego Peripheral Central inicjuje połączenie. Połączenie BLE jest nawiązywane poprzez procedurę connection establishment, która obejmuje wymianę parametrów: connection interval, slave latency i supervision timeout.

Connection interval określa, jak często Central i Peripheral wymieniają dane po połączeniu. Interwał może wynosić od 7.5 ms do 4 sekund. Im krótszy interwał, tym wyższa przepustowość, ale większy pobór mocy. Slave latency pozwala Peripheral na pominięcie kilku connection events w celu oszczędzania energii. Supervision timeout — maksymalny czas bez odpowiedzi, po którym połączenie jest uznawane za utracone.

Central odpowiada za zerwanie połączenia po zakończeniu wymiany danych. Urządzenia BLE zwykle nie utrzymują połączenia stale — Central łączy się, pobiera dane i rozłącza. To standardowy wzorzec dla czujników IoT: Central skanuje, znajduje czujnik temperatury, łączy się, odczytuje wartość i rozłącza się.

ParametrZakresPrzeznaczenieZalecenie
Connection Interval7.5 ms – 4 sCzęstotliwość wymiany danych30–50 ms dla strumieni, 1–4 s dla rzadkich danych
Slave Latency0–499 zdarzeńPomijanie zdarzeń przez Peripheral4–10 dla oszczędzania energii czujnika
Supervision Timeout100 ms – 32 sLimit czasu utraty łączności6–10 sekund dla większości scenariuszy
MTU23–517 bajtówRozmiar pakietu ATTZapytać o maksymalny przy połączeniu

Central w iOS: Core Bluetooth

Core Bluetooth — framework Apple do pracy z BLE na iOS i macOS. Klasa CBCentralManager zapewnia pełne API do implementacji roli Central: skanowanie, łączenie, zarządzanie połączeniami. Praca z Central w iOS opiera się na modelu delegatów: CBCentralManagerDelegate otrzymuje zdarzenia zmiany stanu, wykrywania urządzeń i wyników połączenia.

Główne kroki pracy Central w iOS: inicjalizacja CBCentralManager, sprawdzenie stanu Bluetooth, uruchomienie skanowania, przetwarzanie wykrytych urządzeń przez delegata, połączenie z wybranym Peripheral, wykrywanie usług i cech, wymiana danych.

swift
// Połącz się z wykrytym Peripheral
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // Zachowaj referencję do peripheral i połącz
    discoveredPeripheral = peripheral
    central.connect(peripheral, options: nil)
}

// Pomyślne połączenie
func centralManager(
    _ central: CBCentralManager,
    didConnect peripheral: CBPeripheral
) {
    peripheral.delegate = self
    peripheral.discoverServices(nil)
}

iOS ogranicza pracę BLE w tle: w trybie tła aplikacja może skanować tylko z określonymi kluczami w Info.plist, a połączone urządzenia mogą powiadamiać Central o zmianie danych. Dla krytycznych aplikacji (urządzenia medyczne) używaj Background Modes z kluczem bluetooth-central.

Central w Android: BluetoothLeScanner

Android udostępnia API BluetoothLeScanner do skanowania urządzeń BLE i BluetoothGatt do zarządzania połączeniami. Od Androida 5.0 (API 21), BluetoothLeScanner zastąpił przestarzały startLeScan. API wymaga uprawnień BLUETOOTH, BLUETOOTH_ADMIN i ACCESS_FINE_LOCATION (lub ACCESS_BACKGROUND_LOCATION dla Androida 10+).

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

private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;

// Skonfiguruj skanowanie
ScanSettings settings = new ScanSettings.Builder()
    .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
    .build();

// Rozpocznij skanowanie
scanner.startScan(null, settings, new ScanCallback() {
    @Override
    public void onScanResult(
            int callbackType,
            ScanResult result
    ) {
        BluetoothDevice device = result.getDevice();
        // Połącz z urządzeniem
        bluetoothGatt = device.connectGatt(
            context, false, gattCallback
        );
    }
});

W Android ważne jest uwzględnienie ograniczeń skanowania: od Androida 7 (API 24) skanowanie nie może być uruchamiane częściej niż 5 razy na 30 sekund w aplikacjach niekorzystających z Location. Android 12+ wymaga uprawnień BLUETOOTH_SCAN, BLUETOOTH_CONNECT i ADVERTISE, a także żądania tych uprawnień w czasie wykonania.

Pobór mocy Central

Pobór mocy Central jest wyższy niż Peripheral ze względu na konieczność ciągłego skanowania kanałów radiowych. Central odbiera dane przez pakiety BLE, przetwarza je, zarządza połączeniami i często wykonuje obliczenia na procesorze aplikacji. Według Bluetooth SIG, skanowanie pobiera od 30 mA do 100 mA w zależności od trybu.

Istnieje kilka strategii oszczędzania energii dla Central. Skanowanie interwałowe — najskuteczniejsza metoda: Central skanuje w krótkich oknach (scan window) z długimi przerwami (scan interval). Na przykład przy scan window 30 ms i scan interval 1000 ms pobór mocy zmniejsza się o 97% w porównaniu do ciągłego skanowania.

Dodatkowa optymalizacja — filtracja po UUID. Central szybciej przetwarza tylko istotne pakiety reklamowe, ignorując pozostałe. To zmniejsza obciążenie procesora i wydłuża czas pracy urządzenia na baterii. Zaleca się również wyłączanie skanowania natychmiast po wykryciu potrzebnego urządzenia i nieutrzymywanie połączenia dłużej niż to konieczne.

Często zadawane pytania

Czy smartfon może być jednocześnie Central i Peripheral?

Tak, BLE obsługuje dual role: urządzenie może być jednocześnie Central dla jednych urządzeń i Peripheral dla innych. Na przykład smartfon odczytuje dane z czujnika (jako Central) i jednocześnie reklamuje własną usługę (jako Peripheral) w celu przesyłania danych do innego urządzenia.

Ile urządzeń może jednocześnie obsługiwać Central?

Specyfikacja BLE określa limit 7 połączeń dla jednego Central. W praktyce ograniczenie zależy od producenta układu: układy Nordic nRF52840 obsługują do 20 połączeń, a niektóre budżetowe adaptery Bluetooth — nie więcej niż 3–4.

Dlaczego Central nie wykrywa mojego czujnika BLE?

Przyczyny mogą być różne: czujnik nie reklamuje się (nie jest w trybie advertising), filtr po UUID jest zbyt restrykcyjny, Bluetooth w smartfonie jest wyłączony, brakuje wymaganych uprawnień (Location na Android) lub czujnik jest poza zasięgiem (zalecane do 10 metrów w pomieszczeniu).

Czy trzeba stale utrzymywać połączenie z urządzeniem BLE?

Niekoniecznie. W wielu scenariuszach stosuje się wzorzec connect-and-read: Central skanuje, łączy się, odczytuje potrzebne dane i zrywa połączenie. Stałe połączenie jest potrzebne tylko dla danych strumieniowych (puls, EKG) lub sterowania urządzeniem w czasie rzeczywistym.

Jak zmniejszyć pobór mocy Central podczas skanowania?

Używaj skanowania interwałowego ze stosunkiem scan window 30–50 ms i scan interval 500–1000 ms. Filtruj urządzenia po UUID, aby przetwarzać tylko istotne pakiety reklamowe. Wyłączaj skanowanie natychmiast po wykryciu potrzebnego Peripheral.

Podsumowanie

  • Central — aktywny uczestnik połączenia BLE, który inicjuje skanowanie, nawiązywanie połączenia i zarządzanie wymianą danych.
  • Proces skanowania obejmuje odbiór pakietów reklamowych na kanałach 37, 38, 39 z możliwością filtracji po Service UUID.
  • Po wykryciu Peripheral Central nawiązuje połączenie z konfigurowalnymi parametrami — connection interval, slave latency, supervision timeout.
  • W programowaniu mobilnym Central jest implementowany przez CBCentralManager (iOS) lub BluetoothLeScanner + BluetoothGatt (Android).
  • Jeden Central może jednocześnie zarządzać do 7 połączeniami w standardowej konfiguracji Bluetooth.
  • Pobór mocy Central można zoptymalizować skanowaniem interwałowym i filtracją UUID w celu wydłużenia czasu pracy na baterii.
  • Prawidłowe zarządzanie cyklem życia połączenia — od wykrycia do rozłączenia — określa efektywność aplikacji BLE.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również