Characteristic Bluetooth Low Energy dagi asosiy ma'lumot birligi bo'lib, u orqali Central periferik qurilmada ma'lumot oladi yoki yozadi. Har bir Characteristic ma'lum bir GATT xizmatiga tegishli, noyob UUID va mumkin bo'lgan operatsiyalarni belgilaydigan xususiyatlar to'plamiga (read, write, notify, indicate) ega. Bluetooth Core Specification 5.4 (2023) ma'lumotlariga ko'ra, Bluetooth SIG tibbiy, fitnes va sanoat qurilmalari uchun 500 dan ortiq standart xarakteristikalarni spetsifikatsiya qilgan. Dasturchi foydalanuvchi ma'lumotlarini uzatish uchun maxsus xarakteristikalar yaratadi — sensor ko'rsatkichlaridan qurilma boshqaruv buyruqlarigacha.
Asosiy fikrlar
Characteristic qiymat (value) va metama'lumotlarni o'z ichiga olgan GATT protokoli atributidir. BLE arxitekturasida ma'lumotlar qurilmalar o'rtasida to'g'ridan-to'g'ri emas, balki xizmat xarakteristikalarining qiymatlarini o'qish va yozish orqali uzatiladi. Agar xizmat papka bo'lsa, Characteristic shu papka ichidagi fayldir.
Har bir Characteristic uch komponentdan iborat: deklaratsiya (declaration), qiymat (value) va deskriptorlar (descriptors). Deklaratsiya xarakteristikaning UUID sini va uning xususiyatlarini o'z ichiga oladi. Qiymat Central va Peripheral o'rtasida uzatiladigan asl ma'lumotdir. Deskriptorlar qo'shimcha konfiguratsiyani ta'minlaydi.
Bluetooth Core Specification 5.4 (2023) ma'lumotlariga ko'ra, BLE da barcha ma'lumot almashinuvi xarakteristikalar ustidagi operatsiyalar orqali amalga oshiriladi. Hatto Heart Rate Profile yoki Battery Service kabi standart profillar oldindan belgilangan UUID larga ega xarakteristikalar to'plami asosida qurilgan. Bu turli ishlab chiqaruvchilarning qurilmalarining oldindan konfiguratsiyasiz mosligini ta'minlaydi.
Dasturchi uchun muhim: har bir Characteristic turli xususiyatlar kombinatsiyalarini qo'llab-quvvatlashi mumkin. Bitta xarakteristika faqat o'qish uchun, boshqasi yozish uchun, uchinchisi bildirishnomalar uchun bo'lishi mumkin. Xususiyatlarni to'g'ri tanlash foydalanish stsenariysi va qurilmaning energiya sarfini belgilaydi.
Xususiyatlar (properties) xarakteristika ustida qanday operatsiyalarga ruxsat etilganligini belgilaydi. Bu baytli niqob bo'lib, har bir bit ma'lum bir operatsiyani yoqadi yoki o'chiradi. Quyida asosiy xususiyatlar keltirilgan.
| Xususiyat | Bit | Tavsif | Odatiy qo'llanilishi |
|---|---|---|---|
| Read | 0x02 | Central joriy qiymatni o'qiy oladi | Status, batareya darajasi, konfiguratsiya |
| Write | 0x08 | Central yangi qiymat yozishi mumkin | Boshqaruv buyruqlari, sozlamalar |
| Notify | 0x10 | Peripheral tasdiqsiz qiymat yuboradi | Oqim ma'lumotlari (puls, harorat) |
| Indicate | 0x20 | Peripheral tasdiq bilan qiymat yuboradi | Muhim ma'lumotlar (signallar, statuslar) |
| Write Without Response | 0x04 | Serverdan javob kutmasdan yozish | Yuqori tezlikdagi buyruq uzatish |
Ruxsatlar (permissions) — GATT server darajasidagi kirish darajasi. Xususiyatlardan farqli o'laroq, ruxsatlar har bir operatsiyada tekshiriladi. Ular shifrlash va autentifikatsiya talablarini o'z ichiga olishi mumkin.
Bluetooth SIG BLE dan foydalanishning keng tarqalgan stsenariylarini qamrab oluvchi 500 dan ortiq standart xarakteristikalarni spetsifikatsiya qilgan. Standart UUID lardan foydalanish har qanday qabul qiluvchi qurilma ma'lumotlarni oldindan konfiguratsiyasiz to'g'ri talqin qilishini kafolatlaydi.
Eng ko'p ishlatiladigan standart xarakteristikalar:
| UUID | Nom | Ma'lumot turi | Xizmat |
|---|---|---|---|
| 0x2A19 | Battery Level | uint8 (0–100%) | Battery Service |
| 0x2A37 | Heart Rate Measurement | uint8 + bayroqlar | Heart Rate |
| 0x2A6E | Temperature | int16 (0.01°C) | Environmental Sensing |
| 0x2A6F | Humidity | uint16 (0.01%) | Environmental Sensing |
| 0x2A00 | Device Name | UTF-8 string | Generic Access |
| 0x2A01 | Appearance | uint16 | Generic Access |
Agar mavjud standart xarakteristika vazifangizni qamrab olsa — undan foydalaning. Bu Bluetooth sertifikatsiyasini soddalashtiradi va ekotizim bilan moslikni oshiradi. Maxsus xarakteristikalarni faqat SIG reestrida mavjud bo'lmagan noyob ma'lumotlar uchun yarating.
Xarakteristika yaratish Peripheral — ma'lumotlarni taqdim etuvchi qurilma tomonida amalga oshiriladi. Keling, iOS (Swift) va Android (Java) da amalga oshirishni ko'rib chiqaylik.
Core Bluetooth UUID, xususiyatlar va boshlang'ich qiymatni ko'rsatgan holda xarakteristika yaratish uchun CBMutableCharacteristic klassini taqdim etadi.
import CoreBluetooth
let characteristicUUID = CBUUID("2A19") // Batareya darajasi xarakteristikasi
let characteristic = CBMutableCharacteristic(
type: characteristicUUID,
properties: [.read, .notify],
value: nil,
permissions: [.readable]
)
// O'zgartirishda qiymatni yangilang
let batteryData = Data([batteryLevel]) // uint8
peripheralManager.updateValue(
batteryData,
for: characteristic,
onSubscribedCentrals: nil
)
Android da xarakteristika UUID, xususiyatlar va ruxsatlarni ko'rsatgan holda BluetoothGattCharacteristic orqali yaratiladi.
import android.bluetooth.*;
UUID charUuid = UUID.fromString("00002A19-0000-1000-8000-00805F9B34FB");
BluetoothGattCharacteristic characteristic =
new BluetoothGattCharacteristic(
charUuid,
BluetoothGattCharacteristic.PROPERTY_READ
| BluetoothGattCharacteristic.PROPERTY_NOTIFY,
BluetoothGattCharacteristic.PERMISSION_READ
);
// Qiymatni o'rnating
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);
Characteristic ustidagi operatsiyalar uch turga bo'linadi: o'qish (read), yozish (write) va bildirishnomalar (notify/indicate). Operatsiyani tanlash stsenariyga bog'liq: so'rov bo'yicha ma'lumotlar o'qiladi, buyruqlar yoziladi, oqim ma'lumotlari bildirishnomalarga obuna bo'ladi.
Read — Central xarakteristika qiymatini o'qish so'rovini yuboradi. Peripheral joriy qiymat bilan javob beradi. Operatsiya sinxron va har tomondan aniq so'rovni talab qiladi. Kam o'zgaradigan ma'lumotlar uchun ishlatiladi: proshivka versiyasi, seriya raqami, sozlamalar.
Write — Central Peripheral ga ma'lumot yuboradi. Ikki rejim mavjud: Write with Response (Peripheraldan tasdiq) va Write Without Response (tasdiqsiz). Write with Response yetkazib berishni kafolatlaydi — Peripheral yozishdan keyin tasdiq yuboradi. Write Without Response tezroq, lekin yetkazib berishni kafolatlamaydi.
Notify va Indicate — Peripheral Central ga ma'lumot yuborishni boshlaydi. Notify da ma'lumotlar tasdiqsiz yuboriladi — agar Central paketni qabul qilishga ulgurmasa, u yo'qoladi. Indicate da Central tasdiq yuboradi (PDU darajasida), bu yetkazib berishni kafolatlaydi. Indicate sekinroq, ammo ishonchliroq. Bildirishnomalarga obuna bo'lish uchun Central CCCD (Client Characteristic Configuration Descriptor) ga 0x0001 qiymatini yozadi.
MTU (Maximum Transmission Unit) bitta BLE ma'lumot paketining maksimal hajmini belgilaydi. Odatiy bo'lib, MTU 23 baytni tashkil qiladi, shundan 3 bayt sarlavha — foydali yuk (ATT payload) 20 bayt. Bu aksariyat sensor ma'lumotlari uchun yetarli, ammo fayllar yoki katta konfiguratsiyalarni uzatish uchun yetarli emas.
Bluetooth Core Specification 5.4 MTU kelishuvini (MTU negotiation) qo'llab-quvvatlaydi — Central va Peripheral 517 baytgacha kattaroq paket hajmi haqida kelishib olishlari mumkin. Jarayon quyidagicha: Central o'z MTU taklifi bilan MTU Exchange so'rovini yuboradi; Peripheral o'z MTU si bilan javob beradi; ikkala qiymatdan kichigi ishlatiladi.
// iOS ulanishda MTU so'raydi
// iOS da maksimal MTU 185 bayt
func peripheral(
_ peripheral: CBPeripheral,
didDiscoverServices error: Error?
) {
// Muayyan periferik qurilma uchun MTU so'rang
peripheral.maximumWriteValueLength(for: .withResponse)
}
Bluetooth SIG (2023) ma'lumotlariga ko'ra, MTU ni 23 dan 185 baytga oshirish paketlar sonini kamaytirish hisobiga ma'lumot uzatish xarajatlarini 80% gacha kamaytiradi. Yuqori chastotali ko'rsatkichlarni uzatuvchi ilovalar uchun (masalan, EKG yoki akselerometr) MTU ni oshirish oqim barqarorligi uchun juda muhimdir.
Tez-tez beriladigan savollar
BLE spetsifikatsiyasi xizmatdagi xarakteristikalar sonini cheklamaydi. Amalda, cheklov GATT serverining mavjud xotirasi va ishlash talablari bilan belgilanadi. O'rnatilgan qurilmalar uchun har bir xizmatda 10–15 dan ko'p bo'lmagan xarakteristika tavsiya etiladi.
Notify ma'lumotlarni tasdiqsiz yuboradi — paket jo'natuvchiga xabar bermasdan yo'qolishi mumkin. Indicate protokol darajasida tasdiqni (ACK) talab qiladi, bu yetkazib berishni kafolatlaydi. Indicate sekinroq, ammo ishonchliroq. Muhim ma'lumotlar (signallar, buyruqlar) uchun Indicate dan foydalaning.
Ha, xarakteristika xususiyatlar kombinatsiyasiga ega bo'lishi mumkin. Masalan, sozlamalar xarakteristikasi Read (joriy qiymatni o'qish) va Write (sozlamani o'zgartirish) ni qo'llab-quvvatlashi mumkin. Xususiyatlarni foydalanish stsenariyingizga mos ravishda birlashtiring.
Paket hajmini 185–517 baytgacha oshirish uchun MTU kelishuvidan foydalaning. Agar ma'lumotlar hali ham katta bo'lsa — ilova darajasida fragmentatsiyani amalga oshiring: ma'lumotlarni yaxlitlik nazorati bilan bir necha ketma-ket so'rovlarga bo'ling.
Agar vazifangiz standart xarakteristika bilan qamrab olinsa — Bluetooth SIG reestridan UUID dan foydalaning. Bu sertifikatsiyani soddalashtiradi va ekotizim bilan moslikni ta'minlaydi. Maxsus UUID larni faqat uchinchi tomon ishlab chiqaruvchilarning noyob ma'lumotlari uchun yarating.
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.