GATT — bu nədir, Generic Attribute Profile və Android-də tətbiqi

Müəllif: IT Sectr Dərc olunub: 2026-07-14 Oxuma vaxtı: 10 dəq

GATT (Generic Attribute Profile) — Bluetooth Low Energy (BLE) profili, məlumat strukturu və BLE cihazları arasında məlumat mübadiləsi qaydalarını müəyyən edir. GATT Attribute Protocol (ATT) üzərində qurulub və məlumatları iyerarxiyada təşkil edir: xidmətlər (services), xarakteristikalar (characteristics) və deskriptorlar (descriptors). Bluetooth SIG (2025) məlumatlarına görə, GATT profili bütün BLE tətbiqlərinin 98%-də istifadə olunur — fitnes izləyicilərindən tutmuş ağıllı qıfıllar və tibbi sensorlara qədər.

Əsas məqamlar

  • GATT — xidmətlər, xarakteristikalar və deskriptorlar vasitəsilə məlumat ötürmə strukturunu təyin edən BLE profili
  • İyerarxiya — xidmət xarakteristikaları ehtiva edir, hər bir xarakteristika isteğe bağlı deskriptorlarla bir dəyərdir
  • UUID — hər bir xidmət və xarakteristika 16-bit (standart) və ya 128-bit (fərdi) UUID ilə identifikasiya olunur
  • Rollar — GATT Server (məlumat təqdim edir) və GATT Client (məlumat oxuyur/yazır)
  • Android API — BluetoothGatt, BluetoothGattService, BluetoothGattCharacteristic — GATT ilə iş üçün əsas siniflər

GATT nədir?

GATT (Generic Attribute Profile) — iki BLE cihazının Attribute Protocol (ATT) vasitəsilə məlumat mübadiləsini müəyyən edən Bluetooth Low Energy (BLE) profilidir. GATT məlumat strukturunu standartlaşdırır: bütün məlumatlar “xidmət → xarakteristika → deskriptor” iyerarxiyasında təşkil olunur. Profil Bluetooth 4.0 spesifikasiyasında (2010) BLE ilə birlikdə təqdim edilib və o vaxtdan bəri enerjiyə qənaət edən Bluetooth cihazları üçün əsas məlumat ötürmə mexanizmi olaraq qalır. Klassik Bluetooth-dan fərqli olaraq, məlumatların serial port (SPP) vasitəsilə ötürüldüyü yerdə, GATT oxu, yazı və bildiriş əməliyyatları vasitəsilə məlumatlara strukturlaşdırılmış giriş təmin edir.

GATT-nin BLE stack-də rolu

BLE stack bir neçə təbəqədən ibarətdir: Physical Layer (radio), Link Layer (əlaqə idarəetməsi), L2CAP (məntiqi kanal ötürmə), ATT (Attribute Protocol — atributlara giriş) və GATT (ATT əsasında profil). GATT tətbiq proqramçısının işlədiyi ən yuxarı təbəqədir. Aşağıdakı ATT əsas əməliyyatları təmin edir: atributların oxunması, yazılması, bildirilməsi və göstərilməsi. GATT isə semantika əlavə edir: xidmətin, xarakteristikanın nə olduğunu, onların necə qruplaşdırıldığını və oxu/yazı zamanı hansı qaydaların tətbiq olunduğunu müəyyən edir. Bluetooth Core Specification 5.4 (2023) məlumatlarına görə, GATT bir cihazda 65 535 atributa (xidmətlər + xarakteristikalar + deskriptorlar) qədər dəstəkləyir.

GATT arxitekturası: xidmətlər, xarakteristikalar və deskriptorlar

GATT iyerarxiyası üç səviyyədən ibarətdir. Xidmət (Service) — bir tapşırığı həll edən xarakteristikaların məntiqi qrupu (məsələn, “Batareya xidməti” və ya “Ürək döyüntüsü xidməti”). Xarakteristika (Characteristic) — məlum tipli məlumat vahidi: cari doldurma səviyyəsi, sensor göstəriciləri, açarın vəziyyəti. Hər bir xarakteristikanın dəyəri (value) və metadata təsvir edən bir və ya bir neçə deskriptoru (Descriptors) var: ölçü vahidləri, bildiriş parametrləri, dəyər diapazonu. UUID (Universally Unique Identifier) hər bir xidməti və hər bir xarakteristikanı unikal şəkildə identifikasiya edir.

Xarakteristikalar ilə əməliyyat növləri

GATT xarakteristikalarla qarşılıqlı əlaqə üçün dörd növ əməliyyat dəstəkləyir. Read — klient serverdən xarakteristikanın cari dəyərini tələb edir. Write — klient serverə yeni dəyər göndərir. Notify — server təsdiq olmadan dəyəri klientə göndərir (daha sürətli, lakin daha az etibarlı). Indicate — server qəbul təsdiqi ilə dəyər göndərir (daha etibarlı, lakin daha yavaş). Proqramçı ssenaridən asılı olaraq növü seçir: nəbzsensoru göstəriciləri üçün Notify kifayətdir, ağıllı qıfıl konfiqurasiyasını yazmaq üçün təsdiqlə Write.

kotlin
// Android kodunda GATT məlumat strukturu
data class BleService(
    val uuid: UUID,
    val characteristics: List<BleCharacteristic>
)

data class BleCharacteristic(
    val uuid: UUID,
    val properties: Int, // OXU, YAZ, BİLDİR, GÖSTƏR
    val descriptors: List<BleDescriptor>,
    var value: ByteArray?
)

GATT və GAP: BLE profillərinin fərqləri

BLE spesifikasiyasında iki əsas profil müəyyən edilmişdir: GAP (Generic Access Profile) və GATT (Generic Attribute Profile). GAP cihazların aşkarlanması, əlaqənin qurulması və görünürlüyün idarə edilməsi üçün cavabdehdir — bu BLE-nin “şəbəkə təbəqəsi”dir. GATT — əlaqə qurulduqdan sonra məlumat mübadiləsi üçün, yəni “tətbiq təbəqəsi”. Proqramçı GAP-dan cihazı skan etmək və qoşulmaq üçün, GATT-dan isə qoşulmuş cihazdan məlumat oxumaq, yazmaq və bildiriş almaq üçün istifadə edir.

XüsusiyyətGAPGATT
MəqsədAşkarlama və qoşulmaMəlumat mübadiləsi
RollarCentral / PeripheralClient / Server
ProtokolHCI, Link LayerATT (Attribute Protocol)
MərhələQoşulmadan əvvəlQoşulduqdan sonra
Əsas sinifBluetoothAdapterBluetoothGatt

GATT rolları

GATT iki rol müəyyən edir: GATT ServerGATT Client. Server — məlumat təqdim edən cihaz (məsələn, nəbzgöstəricilərini ötürən fitnes izləyicisi). Client — məlumat tələb edən cihaz (məsələn, göstəriciləri oxuyan smartfon). Əksər ssenarilərdə Android tətbiqi GATT Client, BLE periferiyası isə GATT Server rolunu oynayır. Lakin Android həm də GATT Server ola bilər — məsələn, tətbiq digər cihazlar üçün BLE cihazını emulyasiya edərsə. Rol GATT əlaqəsinin qurulması mərhələsində müəyyən edilir və sessiya ərzində dəyişmir.

GATT kommunikasiyası BLE-də necə işləyir

GATT kommunikasiyası prosesi cihazlar arasında BLE əlaqəsi qurulduqdan sonra başlayır. Əvvəlcə GATT Client Service Discovery əməliyyatı vasitəsilə GATT Server-də xidmətləri aşkarlayır — Android bunu BluetoothGatt.discoverServices() vasitəsilə qoşulduqdan sonra avtomatik yerinə yetirir. Aşkarlamadan sonra klient mövcud xidmətlərin, xarakteristikaların və deskriptorların siyahısını alır. Sonra klient xarakteristika dəyərlərini oxuya (Read), yeni dəyərlər yaza (Write) və ya bildirişlərə abunə ola bilər (Set Notify/Indicate). GATT Server əlaqə qurulduqdan sonra istənilən vaxt klientə Notify/Indicate göndərə bilər.

MTU — maksimum paket ölçüsü

Defolt olaraq BLE-də bir GATT paketinin ölçüsü (MTU, Maximum Transmission Unit) 23 baytdır, bunun 3 baytı ATT başlığı, 20 baytı isə faydalı məlumatdır. Tətbiq daha çox məlumat ötürməlidirsə (məsələn, OTA proşivka yeniləməsi), Android-də requestMtu() vasitəsilə MTU-nu 517 bayta qədər artırmaq tələb edilə bilər. Artırılmış MTU bir məlumat blokunu ötürmək üçün lazım olan paket sayını azaldır — 50 kiçik paket əvəzinə 2 böyük paket göndərilə bilər, bu da enerji istehlakını azaldır və ötürməni sürətləndirir. Maksimum MTU BLE versiyasından və çipin imkanlarından asılıdır — Bluetooth 5.0 517 bayta qədər, köhnə versiyalar isə 247 bayta qədər dəstəkləyir.

kotlin
// Xarakteristika bildirişlərinə abunə ol
fun enableNotifications(gatt: BluetoothGatt, characteristic: BluetoothGattCharacteristic) {
    gatt.setCharacteristicNotification(characteristic, true)

    // CCCD-ni aktivləşdir (Client Characteristic Configuration Descriptor)
    val cccdUuid = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")
    val descriptor = characteristic.getDescriptor(cccdUuid)
    descriptor?.let {
        it.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE)
        gatt.writeDescriptor(it)
    }
}

Bildirişlərin işlənməsi

Android-də GATT Server-dən bildiriş almaq üçün BluetoothGattCallback.onCharacteristicChanged() callback-ni tətbiq etmək lazımdır. Bu metoddakı tətbiq server hər dəfə Notify və ya Indicate göndərdikdə xarakteristikanın yenilənmiş dəyərini alır. Real vaxt rejimində məlumatların işlənməsi üçün bufer və Kotlin korutinlərindən istifadə edin — bu, intensiv bildirişlər zamanı (məsələn, saniyədə 100+ nəbz göstəricisi) UI thread-ni bloklamamağa imkan verir. İndikasiyalarda (Indicate) server tərəfində mütləq gatt.sendResponse() çağırın — Android client-də bu avtomatik işlənir.

GATT-nin Android-də tətbiqi

Android-də GATT ilə iş android.bluetooth paketinin sinifləri vasitəsilə həyata keçirilir: BluetoothGatt (əlaqə), BluetoothGattService (xidmət), BluetoothGattCharacteristic (xarakteristika) və BluetoothGattDescriptor (deskriptor). BLE cihazına qoşulma BluetoothDevice.connectGatt() çağırışı ilə başlayır — bu metod bütün sonrakı əməliyyatların yerinə yetirildiyi BluetoothGatt qaytarır. Bütün GATT callback-lər BluetoothGattCallback-də gəlir — bu, BluetoothGatt-ın yaradıldığı eyni thread-də çağırılan asinxron interfeysdir. Vacibdir: bütün GATT əməliyyatları ardıcıl yerinə yetirilməlidir — eyni BluetoothGatt-da bir neçə əməliyyatın eyni vaxtda çağırılması səhvlərə səbəb olur.

GATT əlaqəsinin həyat dövrü

GATT əlaqəsinin həyat dövrünün düzgün idarə edilməsi BLE tətbiqinin sabitliyi üçün kritikdir. connectGatt() çağırışından sonra tətbiq STATE_CONNECTED vəziyyəti ilə onConnectionStateChange() callback-ni gözləyir. Sonra sistem avtomatik olaraq Service Discovery-ni işə salır, tamamlandıqdan sonra onServicesDiscovered() çağırılır. Yalnız bundan sonra oxu, yazı və abunə yerinə yetirilə bilər. İş bitdikdən sonra mütləq onDestroy() və ya onPause() daxilində gatt.close() çağırın — bağlanmamış GATT əlaqələri batareyanı tükəndirir və Android-də eyni cihaza yenidən qoşulmanı bloklaya bilər.

kotlin
// BLE cihazına GATT vasitəsilə qoşul
private val gattCallback = object : BluetoothGattCallback() {
    override fun onConnectionStateChange(
        gatt: BluetoothGatt, status: Int, newState: Int
    ) {
        if (newState == BluetoothProfile.STATE_CONNECTED) {
            gatt.discoverServices()
        }
    }

    override fun onServicesDiscovered(gatt: BluetoothGatt, status: Int) {
        val service = gatt.getService(UUID.fromString("180D"))
        val characteristic = service?.getCharacteristic(
            UUID.fromString("2A37")
        )
        characteristic?.let { enableNotifications(gatt, it) }
    }
}

Standart GATT profilləri və xidmətləri

Bluetooth SIG (Special Interest Group) sabit 16-bit UUID-lərlə onlarla standart GATT profili və xidməti müəyyən edir. Ən çox yayılmışlar: Battery Service xidməti (UUID 180F, Battery Level xarakteristikası 2A19), Heart Rate xidməti (UUID 180D, Heart Rate Measurement xarakteristikası 2A37), Device Information xidməti (UUID 180A, Manufacturer Name, Serial Number xarakteristikaları). Standart xidmətlərdən istifadə müxtəlif istehsalçıların cihazları arasında uyğunluğu təmin edir — Heart Rate xidməti olan istənilən fitnes bilərziyi onu dəstəkləyən istənilən Android tətbiqi ilə işləməlidir.

Fərdi GATT xidmətlərinin layihələndirilməsi

Standart xidmətlər tapşırığı əhatə etmirsə, proqramçı 128-bit UUID ilə (fərdi UUID) öz GATT xidmətlərini yarada bilər. Fərdi xidmət layihələndirilərkən: xarakteristikaların məntiqi qrupunu müəyyən etmək (məsələn, “Qıfıl idarəetmə xidməti”), hər bir xarakteristikaya düzgün xüsusiyyətlər təyin etmək (Read, Write, Notify), Characteristic Presentation Format deskriptoru vasitəsilə icazə verilən dəyərləri və ölçü vahidlərini müəyyən etmək lazımdır. Mürəkkəb protokollar üçün xidmətə Write xüsusiyyətli Command xarakteristikası və Notify ilə Status xarakteristikası daxil etmək tövsiyə olunur — bu, sənaye BLE tətbiqlərində qəbul edilmiş Command/Status nümunəsinə uyğundur.

kotlin
// Fərdi GATT xidməti yarat (Android GATT Server kimi)
private fun createCustomService(): BluetoothGattService {
    val serviceUuid = UUID.fromString("12345678-1234-5678-1234-56789abcdef0")
    val service = BluetoothGattService(
        serviceUuid, BluetoothGattService.SERVICE_TYPE_PRIMARY
    )

    val charUuid = UUID.fromString("12345678-1234-5678-1234-56789abcdef1")
    val characteristic = BluetoothGattCharacteristic(
        charUuid,
        BluetoothGattCharacteristic.PROPERTY_READ or
        BluetoothGattCharacteristic.PROPERTY_NOTIFY,
        BluetoothGattCharacteristic.PERMISSION_READ
    )
    service.addCharacteristic(characteristic)
    return service
}

Tez-tez verilən suallar

BLE-də GATT nədir və nə üçün lazımdır?

GATT (Generic Attribute Profile) — cihazlar arasında məlumat mübadiləsi strukturunu müəyyən edən Bluetooth Low Energy profilidir. Məlumata girişi standartlaşdırmaq üçün lazımdır: bütün BLE cihazları məlumatları xidmətlər və xarakteristikalar şəklində təşkil edir ki, bu da istənilən klientə sensor göstəricilərini oxumağa, cihazları idarə etməyə və bildirişlər almağa imkan verir.

GATT GAP-dan nə ilə fərqlənir?

GAP BLE cihazlarının aşkarlanması və qoşulması üçün cavabdehdir (skan etmə, reklam, əlaqənin qurulması). GATT — qoşulduqdan sonra məlumat mübadiləsi üçün (oxu, yazı, bildirişlər). GAP qoşulmadan əvvəl, GATT isə sonra işləyir. Hər iki profil BLE üçün məcburidir, lakin müxtəlif funksiyaları yerinə yetirir: GAP “şəbəkə təbəqəsi”, GATT isə “tətbiq təbəqəsi”dir.

Hansı GATT xidmətləri və xarakteristikaları mövcuddur?

Standart xidmətlərə Battery Service (180F, doldurma səviyyəsi), Heart Rate (180D, nəbz), Device Information (180A, cihaz məlumatları) daxildir. Hər bir xidmət 16-bit UUID ilə bir neçə xarakteristika ehtiva edir. Proqramçılar spesifik tapşırıqlar üçün 128-bit UUID ilə fərdi xidmətlər yarada bilərlər — məsələn, ağıllı qıfılı idarə etmək və ya fitnes izləyicisi məlumatlarını ötürmək.

Android-də GATT necə işləyir?

Android-də GATT BluetoothGatt (əlaqə), BluetoothGattService (xidmət), BluetoothGattCharacteristic (xarakteristika) və BluetoothGattDescriptor (deskriptor) vasitəsilə tətbiq olunur. Qoşulma connectGatt() vasitəsilə yerinə yetirilir, bundan sonra BluetoothGattCallback callback-də hadisələr gəlir: onConnectionStateChange, onServicesDiscovered, onCharacteristicChanged (bildirişlər üçün). Bütün GATT əməliyyatları ardıcıl yerinə yetirilməlidir.

GATT-də UUID nədir?

UUID (Universally Unique Identifier) — GATT-də xidməti və ya xarakteristikanı unikal şəkildə müəyyən edən 16-bit və ya 128-bit identifikatordur. Bluetooth SIG standart xidmətləri 16-bit UUID-lərdən istifadə edir (məsələn, Heart Rate üçün 180D). Proqramçıların fərdi xidmətləri — 128-bit UUID-lər (məsələn, 12345678-1234-5678-1234-56789abcdef0). UUID klientə GATT Server-də lazımi məlumatları tapmağa imkan verir.

Nəticə

  • GATT — Attribute Protocol (ATT) əsasında xidmətlər, xarakteristikalar və deskriptorlar iyerarxiyası vasitəsilə strukturlaşdırılmış məlumat mübadiləsi üçün BLE profili
  • Məlumat iyerarxiyası — xidmət (məntiqi qrup), xarakteristika (tipli konkret dəyər), deskriptor (metadata — vahidlər, bildiriş parametrləri)
  • GATT rolları — Server (məlumat təqdim edir, adətən BLE periferiyası) və Client (oxuyur/yazır, adətən Android smartfon)
  • Əməliyyatlar — Read, Write, Notify (təsdiqsiz, daha sürətli) və Indicate (təsdiqlə, daha etibarlı); seçim ssenaridən asılıdır
  • Android API — BluetoothGatt, BluetoothGattCallback, BluetoothGattService, BluetoothGattCharacteristic; callback-lər vasitəsilə ardıcıl asinxron çağırışlar
  • Standart profillər — Battery Service, Heart Rate, Device Information — müxtəlif istehsalçıların cihazları arasında uyğunluğu təmin edir
  • Fərdi xidmətlər — unikal tapşırıqlar üçün 128-bit UUID; düzgün xüsusiyyətlərlə (Read, Write, Notify, Indicate) Command/Status nümunəsi üzrə layihələndirilir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun