Peripheral — уређај у архитектури Bluetooth Low Energy који рекламира своје сервисе путем advertising пакета и очекује повезивање од Central-а. У IoT екосистему Peripheral је обично уређај са ограниченом потрошњом енергије: сензор температуре, паметна лампа, фитнес наруквица, beacon. Bluetooth Core Specification 5.4 (2023) дефинише рекламни протокол: Peripheral периодично шаље advertising пакете који садрже име уређаја, листу сервиса и корисничке податке, а Central скенира ове пакете и одлучује да ли ће се повезати. Након успостављања везе, Peripheral делује као GATT сервер, пружајући сервисе и карактеристике за читање и писање.
Главно
Peripheral — BLE уређај који имплементира GATT сервер и рекламира своје могућности кроз advertising канале. За разлику од Central-а, који активно тражи уређаје, Peripheral пасивно чека повезивање. Ово је асиметрични модел, оптимизован за енергетску ефикасност уређаја са батеријским напајањем.
Peripheral може бити у неколико режима: advertising (реклама), connected (повезан на Central), sleeping (спавање са искљученом рекламом). У advertising режиму, Peripheral периодично шаље кратке пакете података, трошећи притом минималну енергију. Након повезивања, Peripheral прелази у connected режим, где размењује податке са Central-ом према договореном connection interval-у.
Према Bluetooth Core Specification 5.4 (2023), уређај може динамички да прелази између улога Peripheral и Central, али у сваком тренутку за једну везу улога је фиксна. Типичан сценарио: IoT сензор стално ради у улози Peripheral-а, а паметни телефон управља везом као Central.
За програмера је важно да разуме: Peripheral одређује који сервиси и карактеристике су доступни и управља приступом њима. Структура GATT сервера на Peripheral-у одређује које податке Central може да чита и које команде може да пише.
Advertising (реклама) — механизам путем којег Peripheral обавештава о свом присуству. Peripheral шаље advertising пакете на три одвојена канала (37, 38, 39) са интервалом од 20 ms до 10.24 секунди. Сваки рекламни пакет садржи фиксне информације и може укључивати опционе податке.
Постоје две врсте рекламних пакета: advertising PDU (главни пакет) и scan response PDU (одговор на захтев Central-а). Главни пакет садржи обавезна поља: тип пакета, адресу пошиљаоца, податке. Ако Central пошаље scan request, Peripheral одговара додатним пакетом са комплетним информацијама — на пример, комплетним именом уређаја.
Параметри advertising-а утичу на брзину откривања и потрошњу енергије. Advertising interval — време између слања пакета. Што је интервал краћи, Central ће брже открити уређај, али Peripheral троши више енергије. Препоручени интервал: 100–1000 ms за већину уређаја.
| Параметар | Опсег | Утицај | Препорука |
|---|---|---|---|
| Advertising Interval | 20 ms – 10.24 s | Брзина откривања, енергија | 100–1000 ms за равнотежу |
| Advertising Channels | 37, 38, 39 | Поузданост откривања | Сва 3 канала обавезно |
| Tx Power | −20 – +10 dBm | Даљина, сметње | 0 dBm за унутрашњост, +4 dBm за споља |
| Advertising Timeout | 0 – 180 секунди | Трајање рекламе | 0 (бесконачно) за beacon-е |
BLE рекламни пакет има ограничење од 31 бајта за advertising PDU и још 31 бајт за scan response. Унутар пакета, подаци су организовани у AD Structure (Advertising Data Structure) формату: свако поље има тип (1 бајт), дужину (1 бајт) и вредност.
Најчешће коришћени AD Type: Flags (0x01) — режими повезивања и откривања, Local Name (0x08 или 0x09) — име уређаја, Service UUID List (0x02–0x07) — листа UUID сервиса, Manufacturer Specific Data (0xFF) — подаци произвођача. Правилно паковање података у 31-бајтни пакет важан је задатак програмера уграђених уређаја.
За уређаје који треба да пренесу више података, постоји extended advertising (BLE 5.0+), који повећава величину рекламног пакета на 251 бајт и додаје нове типове пакета. Extended advertising такође подржава канале са кодирањем (coded PHY) за повећање домета до 1 km на отвореном простору.
При пројектовању рекламног пакета узмите у обзир: што је више података у advertising пакету, већа је вероватноћа колизије са другим уређајима. За брзо откривање препоручује се постављање само критичних података (Service UUID) у advertising PDU, а додатних података — у scan response.
GATT сервер на Peripheral-у садржи све сервисе и карактеристике које Central може открити и са којима може да интерагује. Након повезивања, Central открива сервисе (discover services), затим карактеристике (discover characteristics) и интерагује са њима путем GATT протокола.
Peripheral као GATT сервер мора исправно обрађивати захтеве од Central-а: читање (read request), писање (write request), обавештења (notification) и потврђена обавештења (indication). Сваки захтев пролази кроз GATT табелу, где сваком атрибуту (сервису, карактеристици, дескриптору) одговара Handle — 16-битна адреса.
Програмер Peripheral-а одређује права приступа за сваки атрибут: само читање, само писање, читање и писање, са шифровањем или без. За поверљиве податке (личне информације, медицински параметри) препоручује се обавезно шифровање кроз MITM Protection.
CBPeripheralManager — класа Core Bluetooth за имплементацију улоге Peripheral на iOS-у. Управља GATT сервером, објављује сервисе и карактеристике, обрађује захтеве од Central-а. За разлику од CBCentralManager-а, CBPeripheralManager не скенира — само рекламира и опслужује везе.
Главни кораци имплементације Peripheral на iOS-у: иницијализација CBPeripheralManager-а, додавање сервиса путем add, покретање рекламе путем startAdvertising, обрада захтева од Central-а преко делегата CBPeripheralManagerDelegate.
import CoreBluetooth
class BLEPeripheralManager: NSObject, CBPeripheralManagerDelegate {
private var peripheralManager: CBPeripheralManager!
func startAdvertising() {
let advertisementData: [String: Any] = [
CBAdvertisementDataLocalNameKey: "BLE Sensor",
CBAdvertisementDataServiceUUIDsKey: [
CBUUID("180F")
]
]
peripheralManager.startAdvertising(advertisementData)
}
func peripheralManagerDidUpdateState(
_ peripheral: CBPeripheralManager
) {
if peripheral.state == .poweredOn {
startAdvertising()
}
}
}
iOS дозвољава Peripheral-у да ради у позадинском режиму када је присутан кључ bluetooth-peripheral у Background Modes-у. У позадини, iOS може да рекламира са ограниченим скупом података и да опслужује везе. За дуготрајну рекламу (више од 180 секунди) користите опцију CBAdvertisementDataWaitForResponseFromCentral ради уштеде енергије.
Android пружа BluetoothLeAdvertiser за рад у улози Peripheral (од API 21). API омогућава покретање рекламе са подесивим параметрима: снага предајника, интервал рекламе, подаци пакета. Android такође подржава extended advertising (BLE 5.0) на компатибилним уређајима.
import android.bluetooth.le.*;
private BluetoothLeAdvertiser advertiser;
public void startPeripheral() {
BluetoothAdapter adapter =
BluetoothAdapter.getDefaultAdapter();
advertiser = adapter.getBluetoothLeAdvertiser();
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(
new ParcelUuid(
UUID.fromString("0000180F-0000-1000-8000-00805F9B34FB")
)
)
.build();
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER)
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
.build();
advertiser.startAdvertising(
settings, data, advertiseCallback
);
}
На Android-у подршка за Peripheral зависи од произвођача и верзије ОС. Не подржавају сви уређаји BluetoothLeAdvertiser — проверавајте путем adapter.isMultipleAdvertisementSupported(). Од Android 10, за рад у улози Peripheral потребна је дозвола BLUETOOTH_ADVERTISE, као и runtime захтев за апликације са target SDK 31+.
Енергетска ефикасност — кључна предност BLE-а, а Peripheral игра главну улогу у томе. Уређај може радити на CR2032 батерији (220 mAh) више од годину дана захваљујући оптимизованој потрошњи енергије. Већину времена Peripheral проводи у режиму спавања са искљученом рекламом, будећи се само ради слања рекламног пакета или обраде захтева од Central-а.
Потрошња енергије Peripheral-а у различитим режимима: режим спавања (deep sleep) — 1–5 µA, idle са укљученим тајмером — 10–50 µA, advertising — 5–15 mA (за време слања пакета), connected — 5–10 mA (за време connection event-а). При advertising interval-у од 1000 ms и трајању пакета од 4 ms, просечна струја износи око 50–100 µA.
Према Texas Instruments Application Report (SWRA478, 2024), оптимизација advertising interval-а са 100 ms на 1000 ms смањује просечну потрошњу енергије за 90%. Додатна уштеда се постиже коришћењем slave latency (прескакање connection event-а), смањењем Tx Power на кратким удаљеностима и искључивањем рекламе након повезивања (connectable advertising).
Често постављана питања
Да, кроз механизам обавештења (Notify/Indicate). Иако је иницијатор везе увек Central, након повезивања Peripheral може слати податке путем GATT обавештења без експлицитног захтева од Central-а. За то Central мора претходно да се претплати путем CCCD-а.
Трајање рекламе није ограничено спецификацијом, али је у пракси ограничено енергијом батерије. На iOS-у, Peripheral може да рекламира у позадини највише 180 секунди по сесији без додатних подешавања. На Android-у, реклама може радити неограничено, али значајно скраћује време рада на батерију.
Повећајте advertising interval (препоручује се 500–1000 ms), користите slave latency за прескакање connection event-а, искључите рекламу након повезивања и изаберите минималну Tx Power довољну за стабилну комуникацију на потребној удаљености.
Non-connectable advertising — режим у којем Peripheral рекламира, али не прихвата захтеве за повезивање. Користи се за beacon-е који само емитују податке (на пример, идентификатор продавнице) без успостављања двосмерне везе. Штеди енергију у поређењу са connectable advertising-ом.
У 31 бајт може се укључити: заставице (3 бајта), име уређаја (до 28 бајта у скраћеном облику), листа UUID сервиса (2–16 бајта по UUID-у), подаци произвођача (до 26 бајта). Оптимална стратегија — ставити UUID сервиса у advertising PDU за филтрирање, а пуно име — у scan response.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође