Peripheral — Bluetooth Low Energy arxitekturasida xizmatlarini advertising paketlari orqali reklama qiladigan va Centraldan ulanishni kutadigan qurilmadir. IoT ekotizimida Peripheral odatda cheklangan energiya sarfiga ega qurilma: harorat sensori, aqlli chiroq, fitnes bilaguzuk, beacon. Bluetooth Core Specification 5.4 (2023) reklama protokolini belgilaydi: Peripheral vaqti-vaqti bilan qurilma nomi, xizmatlar ro'yxati va foydalanuvchi ma'lumotlarini o'z ichiga olgan advertising paketlarini yuboradi, Central esa ushbu paketlarni skanerlab, ulanish yoki ulanmaslikka qaror qiladi. Ulanish o'rnatilgandan so'ng, Peripheral GATT-server vazifasini bajarib, o'qish va yozish uchun xizmatlar va xarakteristikalarni taqdim etadi.
Asosiy ma'lumotlar
Peripheral — GATT-serverini amalga oshiradigan va imkoniyatlarini advertising kanallari orqali reklama qiladigan BLE qurilmasi. Qurilmalarni faol ravishda qidiradigan Centraldan farqli o'laroq, Peripheral passiv ravishda ulanishni kutadi. Bu batareya bilan ishlaydigan qurilmalarning energiya samaradorligi uchun optimallashtirilgan assimetrik modeldir.
Peripheral bir necha rejimda bo'lishi mumkin: advertising (reklama), connected (Centralga ulangan), sleeping (reklama o'chirilgan uyqu). Advertising rejimida Peripheral vaqti-vaqti bilan qisqa ma'lumot paketlarini yuboradi va minimal energiya sarflaydi. Ulanishdan so'ng, Peripheral connected rejimiga o'tadi va kelishilgan connection intervalga muvofiq Central bilan ma'lumot almashadi.
Bluetooth Core Specification 5.4 (2023) ga ko'ra, qurilma dinamik ravishda Peripheral va Central rollari o'rtasida almashishi mumkin, ammo har bir daqiqada bitta ulanish uchun rol belgilangan. Oddiy stsenariy: IoT sensori doimiy ravishda Peripheral rolida ishlaydi, smartfon esa Central sifatida ulanishni boshqaradi.
Dasturchi uchun muhim: Peripheral qaysi xizmatlar va xarakteristikalar mavjudligini aniqlaydi va ularga kirishni boshqaradi. Peripheralda GATT-serverining tuzilishi Central qanday ma'lumotlarni o'qishi va qanday buyruqlarni yozishi mumkinligini belgilaydi.
Advertising (reklama) — Peripheral o'z mavjudligi haqida xabar beradigan mexanizm. Peripheral uchta ajratilgan kanalda (37, 38, 39) 20 ms dan 10.24 sekundgacha intervalda advertising paketlarini yuboradi. Har bir reklama paketi doimiy ma'lumotlarni o'z ichiga oladi va ixtiyoriy ma'lumotlarni qo'shishi mumkin.
Reklama paketlarining ikki turi mavjud: advertising PDU (asosiy paket) va scan response PDU (Central so'roviga javob). Asosiy paket majburiy maydonlarni o'z ichiga oladi: paket turi, jo'natuvchi manzili, ma'lumotlar. Agar Central scan request yuborsa, Peripheral qo'shimcha ma'lumotlar bilan — masalan, to'liq qurilma nomi bilan javob beradi.
Advertising parametrlari aniqlash tezligi va energiya sarfiga ta'sir qiladi. Advertising interval — paketlarni yuborish orasidagi vaqt. Interval qanchalik qisqa bo'lsa, Central qurilmani shunchalik tez aniqlaydi, lekin Peripheral ko'proq energiya sarflaydi. Tavsiya etiladigan interval: ko'pchilik qurilmalar uchun 100–1000 ms.
| Parametr | Diapazon | Ta'sir | Tavsiya |
|---|---|---|---|
| Advertising Interval | 20 ms – 10.24 s | Aniqlash tezligi, energiya | Balans uchun 100–1000 ms |
| Advertising Channels | 37, 38, 39 | Aniqlash ishonchliligi | Barcha 3 kanal majburiy |
| Tx Power | −20 – +10 dBm | Masofa, xalaqitlar | 0 dBm bino ichi uchun, +4 dBm ochiq havo uchun |
| Advertising Timeout | 0 – 180 sekund | Reklama davomiyligi | Beaconlar uchun 0 (cheksiz) |
BLE reklama paketi advertising PDU uchun 31 bayt va scan response uchun yana 31 bayt chekloviga ega. Paket ichida ma'lumotlar AD Structure (Advertising Data Structure) formatida tashkil etilgan: har bir maydon turi (1 bayt), uzunligi (1 bayt) va qiymatiga ega.
Eng ko'p ishlatiladigan AD Type: Flags (0x01) — ulanish va aniqlash rejimlari, Local Name (0x08 yoki 0x09) — qurilma nomi, Service UUID List (0x02–0x07) — xizmat UUIDlari ro'yxati, Manufacturer Specific Data (0xFF) — ishlab chiqaruvchi ma'lumotlari. 31 baytli paketga ma'lumotlarni to'g'ri joylashtirish o'rnatilgan qurilma dasturchisining muhim vazifasidir.
Ko'proq ma'lumot uzatishi kerak bo'lgan qurilmalar uchun extended advertising (BLE 5.0+) mavjud bo'lib, u reklama paketi hajmini 251 baytgacha oshiradi va yangi paket turlarini qo'shadi. Extended advertising, shuningdek, ochiq maydonda masofani 1 km gacha oshirish uchun kodlangan kanallarni (coded PHY) qo'llab-quvvatlaydi.
Reklama paketini loyihalashda e'tiborga oling: advertising paketida qancha ko'p ma'lumot bo'lsa, boshqa qurilmalar bilan to'qnashish ehtimoli shuncha yuqori. Tez aniqlash uchun advertising PDUda faqat muhim ma'lumotlarni (Service UUID) joylashtirish, qo'shimcha ma'lumotlarni esa scan responseda berish tavsiya etiladi.
GATT-server Peripheralda Central aniqlashi va o'zaro aloqa qilishi mumkin bo'lgan barcha xizmatlar va xarakteristikalarni o'z ichiga oladi. Ulanishdan so'ng, Central xizmatlarni (discover services), keyin xarakteristikalarni (discover characteristics) aniqlaydi va GATT protokoli orqali ular bilan o'zaro aloqa qiladi.
Peripheral GATT-server sifatida Centraldan so'rovlarni to'g'ri qayta ishlashi kerak: o'qish (read request), yozish (write request), bildirishnomalar (notification) va tasdiqlangan bildirishnomalar (indication). Har bir so'rov GATT jadvalidan o'tadi, bunda har bir atributga (xizmat, xarakteristika, deskriptor) Handle — 16-bitli manzil mos keladi.
Peripheral dasturchisi har bir atributga kirish huquqlarini belgilaydi: faqat o'qish, faqat yozish, o'qish va yozish, shifrlash bilan yoki shifrlashsiz. Maxfiy ma'lumotlar (shaxsiy ma'lumotlar, tibbiy ko'rsatkichlar) uchun MITM Protection orqali shifrlash talabini qo'shish tavsiya etiladi.
CBPeripheralManager — iOSda Peripheral rolini amalga oshirish uchun Core Bluetooth klassi. U GATT-serverini boshqaradi, xizmatlar va xarakteristikalarni nashr etadi, Centraldan so'rovlarni qayta ishlaydi. CBCentralManagerdan farqli o'laroq, CBPeripheralManager skanerlamaydi — faqat reklama qiladi va ulanishlarga xizmat ko'rsatadi.
iOSda Peripheralni amalga oshirishning asosiy bosqichlari: CBPeripheralManagerni ishga tushirish, add orqali xizmatlarni qo'shish, startAdvertising orqali reklamani boshlash, CBPeripheralManagerDelegate orqali Centraldan so'rovlarni qayta ishlash.
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 Background Modesda bluetooth-peripheral kaliti mavjud bo'lganda Peripheralning fon rejimida ishlashiga imkon beradi. Fonda iOS cheklangan ma'lumotlar to'plami bilan reklama qilishi va ulanishlarga xizmat ko'rsatishi mumkin. Uzoq muddatli reklama uchun (180 sekunddan ortiq) energiyani tejash uchun CBAdvertisementDataWaitForResponseFromCentral opsiyasidan foydalaning.
Android Peripheral rolida ishlash uchun BluetoothLeAdvertiserni taqdim etadi (API 21 dan boshlab). API sozlanishi mumkin bo'lgan parametrlar bilan reklamani ishga tushirish imkonini beradi: uzatuvchi quvvati, reklama intervali, paket ma'lumotlari. Android, shuningdek, mos qurilmalarda extended advertising (BLE 5.0) ni qo'llab-quvvatlaydi.
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
);
}
Androidda Peripheralni qo'llab-quvvatlash ishlab chiqaruvchi va OT versiyasiga bog'liq. Barcha qurilmalar BluetoothLeAdvertiserni qo'llab-quvvatlamaydi — adapter.isMultipleAdvertisementSupported() orqali tekshiring. Android 10 dan boshlab, Peripheral rolida ishlash uchun BLUETOOTH_ADVERTISE ruxsatnomasi, shuningdek target SDK 31+ bo'lgan ilovalar uchun runtime so'rovi talab qilinadi.
Energiya samaradorligi — BLEning asosiy afzalligi va Peripheral bunda asosiy rol o'ynaydi. Qurilma CR2032 batareyasida (220 mAh) optimallashtirilgan energiya sarfi tufayli bir yildan ortiq ishlashi mumkin. Peripheral ko'p vaqtini reklama o'chirilgan uyqu rejimida o'tkazadi, faqat reklama paketini yuborish yoki Centraldan so'rovni qayta ishlash uchun uyg'onadi.
Peripheralning turli rejimlarda energiya sarfi: uyqu rejimi (deep sleep) — 1–5 µA, taymer yoqilgan holda idle — 10–50 µA, advertising — 5–15 mA (paketni yuborish vaqtida), connected — 5–10 mA (connection event vaqtida). Advertising interval 1000 ms va paket davomiyligi 4 ms bo'lganda, o'rtacha tok taxminan 50–100 µA ni tashkil qiladi.
Texas Instruments Application Report (SWRA478, 2024) ga ko'ra, advertising intervalni 100 ms dan 1000 ms gacha optimallashtirish o'rtacha energiya sarfini 90% ga kamaytiradi. Qo'shimcha tejashga slave latency (connection eventlarni o'tkazib yuborish), qisqa masofalarda Tx Power kamaytirish va ulanishdan so'ng reklamani o'chirish (connectable advertising) orqali erishiladi.
Ko'p beriladigan savollar
Ha, bildirishnomalar (Notify/Indicate) mexanizmi orqali. Ulanish tashabbuskori har doim Central bo'lsa-da, ulanishdan so'ng Peripheral Centraldan aniq so'rovsiz GATT bildirishnomalari orqali ma'lumot yuborishi mumkin. Buning uchun Central oldindan CCCD orqali obuna bo'lishi kerak.
Reklama davomiyligi spetsifikatsiya bilan cheklanmagan, ammo amalda batareya energiyasi bilan cheklanadi. iOSda Peripheral qo'shimcha sozlamalarsiz fon rejimida sessiya uchun 180 sekunddan ko'p bo'lmagan vaqt reklama qilishi mumkin. Androidda reklama cheksiz ishlashi mumkin, ammo avtonom ish vaqtini sezilarli darajada qisqartiradi.
Advertising intervalni oshiring (tavsiya etiladi 500–1000 ms), connection eventlarni o'tkazib yuborish uchun slave latencydan foydalaning, ulanishdan so'ng reklamani o'chiring va kerakli masofada barqaror aloqa uchun yetarli bo'lgan minimal Tx Power ni tanlang.
Non-connectable advertising — Peripheral reklama qiladigan, ammo ulanish so'rovlarini qabul qilmaydigan rejim. Faqat ma'lumot uzatuvchi (masalan, do'kon identifikatori) ikki tomonlama aloqa o'rnatmaydigan beaconlar uchun ishlatiladi. Connectable advertising bilan solishtirganda energiyani tejaydi.
31 baytga qo'shilishi mumkin: bayroqlar (3 bayt), qurilma nomi (qisqartirilgan shaklda 28 baytgacha), xizmat UUIDlari ro'yxati (UUID uchun 2–16 bayt), ishlab chiqaruvchi ma'lumotlari (26 baytgacha). Optimal strategiya — filtrlash uchun advertising PDUda xizmat UUIDlarini, to'liq nomni esa scan responseda joylashtirish.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.