GATT — यह क्या है, Generic Attribute Profile और Android में कार्यान्वयन

लेखक: IT Sectr प्रकाशित: 2026-07-14 पढ़ने का समय: 10 मिनट

GATT (Generic Attribute Profile) एक Bluetooth Low Energy (BLE) प्रोफ़ाइल है जो डेटा संरचना और BLE उपकरणों के बीच सूचना आदान-प्रदान के नियमों को परिभाषित करती है। GATT Attribute Protocol (ATT) के ऊपर बनाया गया है और डेटा को एक पदानुक्रम में व्यवस्थित करता है: सेवाएँ (services), विशेषताएँ (characteristics) और डिस्क्रिप्टर (descriptors)। Bluetooth SIG (2025) के अनुसार, GATT प्रोफ़ाइल का उपयोग सभी BLE अनुप्रयोगों में 98% में किया जाता है — फिटनेस ट्रैकर्स से लेकर स्मार्ट लॉक और मेडिकल सेंसर तक।

मुख्य बिंदु

  • GATT — एक BLE प्रोफ़ाइल जो सेवाओं, विशेषताओं और डिस्क्रिप्टर के माध्यम से डेटा स्थानांतरण संरचना को परिभाषित करती है
  • पदानुक्रम — एक सेवा में विशेषताएँ होती हैं, प्रत्येक विशेषता का एक मान होता है जिसमें वैकल्पिक डिस्क्रिप्टर होते हैं
  • UUID — प्रत्येक सेवा और विशेषता की पहचान 16-बिट (मानक) या 128-बिट (कस्टम) UUID से होती है
  • भूमिकाएँ — GATT सर्वर (डेटा प्रदान करता है) और GATT क्लाइंट (डेटा पढ़ता/लिखता है)
  • Android API — BluetoothGatt, BluetoothGattService, BluetoothGattCharacteristic — GATT के साथ काम करने के लिए मुख्य क्लास

GATT क्या है?

GATT (Generic Attribute Profile) एक Bluetooth Low Energy (BLE) प्रोफ़ाइल है जो परिभाषित करती है कि दो BLE उपकरण Attribute Protocol (ATT) के माध्यम से डेटा का आदान-प्रदान कैसे करते हैं। GATT डेटा संरचना को मानकीकृत करता है: सभी डेटा “सेवा → विशेषता → डिस्क्रिप्टर” पदानुक्रम में व्यवस्थित होता है। यह प्रोफ़ाइल Bluetooth 4.0 विनिर्देश (2010) में BLE के साथ पेश की गई थी और तब से ऊर्जा-कुशल Bluetooth उपकरणों के लिए डेटा स्थानांतरण का प्राथमिक तंत्र बनी हुई है। क्लासिक Bluetooth के विपरीत, जहाँ डेटा एक सीरियल पोर्ट (SPP) के माध्यम से प्रेषित होता है, GATT पढ़ने, लिखने और सूचना संचालन के माध्यम से डेटा तक संरचित पहुँच प्रदान करता है।

BLE स्टैक में GATT की भूमिका

BLE स्टैक में कई परतें होती हैं: भौतिक परत (रेडियो), लिंक परत (कनेक्शन प्रबंधन), L2CAP (तार्किक चैनल नियंत्रण), ATT (Attribute Protocol — विशेषताओं तक पहुँच) और GATT (ATT पर आधारित प्रोफ़ाइल)। GATT सबसे ऊपरी परत है जिसके साथ एप्लिकेशन डेवलपर काम करते हैं। अंतर्निहित ATT बुनियादी संचालन प्रदान करता है: विशेषताओं को पढ़ना, लिखना, सूचित करना और संकेत देना। GATT शब्दार्थ जोड़ता है: यह परिभाषित करता है कि सेवा और विशेषता क्या हैं, वे कैसे समूहित होते हैं, और उन्हें पढ़ने और लिखने पर कौन से नियम लागू होते हैं। Bluetooth Core Specification 5.4 (2023) के अनुसार, GATT एक उपकरण पर 65,535 विशेषताओं (सेवाएँ + विशेषताएँ + डिस्क्रिप्टर) तक का समर्थन करता है।

GATT आर्किटेक्चर: सेवाएँ, विशेषताएँ और डिस्क्रिप्टर

GATT पदानुक्रम में तीन स्तर होते हैं। सेवा (Service) विशेषताओं का एक तार्किक समूह है जो एक कार्य को हल करती है (उदाहरण के लिए, “बैटरी सेवा” या “हृदय गति सेवा”)। विशेषता (Characteristic) एक ज्ञात प्रकार वाली डेटा इकाई है: वर्तमान बैटरी स्तर, सेंसर रीडिंग, स्विच की स्थिति। प्रत्येक विशेषता का एक मान (value) और एक या अधिक डिस्क्रिप्टर (Descriptors) होते हैं जो मेटाडेटा का वर्णन करते हैं: माप की इकाइयाँ, सूचना सेटिंग्स, मानों की सीमा। UUID (यूनिवर्सली यूनीक आइडेंटिफ़ायर) प्रत्येक सेवा और प्रत्येक विशेषता की विशिष्ट रूप से पहचान करता है।

विशेषताओं के साथ संचालन के प्रकार

GATT विशेषताओं के साथ बातचीत के लिए चार प्रकार के संचालन का समर्थन करता है। Read — क्लाइंट सर्वर से विशेषता का वर्तमान मान अनुरोध करता है। Write — क्लाइंट सर्वर को एक नया मान भेजता है। Notify — सर्वर बिना पुष्टि के क्लाइंट को मान भेजता है (तेज़ लेकिन कम विश्वसनीय)। Indicate — सर्वर प्राप्ति की पुष्टि के साथ मान भेजता है (अधिक विश्वसनीय लेकिन धीमा)। डेवलपर परिदृश्य के आधार पर प्रकार चुनता है: हृदय गति सेंसर रीडिंग के लिए Notify पर्याप्त है; स्मार्ट लॉक कॉन्फ़िगरेशन लिखने के लिए पुष्टि के साथ Write की आवश्यकता होती है।

kotlin
// Android कोड में GATT डेटा संरचना
data class BleService(
    val uuid: UUID,
    val characteristics: List<BleCharacteristic>
)

data class BleCharacteristic(
    val uuid: UUID,
    val properties: Int, // READ, WRITE, NOTIFY, INDICATE
    val descriptors: List<BleDescriptor>,
    var value: ByteArray?
)

GATT और GAP: BLE प्रोफ़ाइल में अंतर

BLE विनिर्देश दो मुख्य प्रोफ़ाइल परिभाषित करता है: GAP (Generic Access Profile) और GATT (Generic Attribute Profile)। GAP उपकरणों की खोज, कनेक्शन स्थापना और दृश्यता प्रबंधन के लिए जिम्मेदार है — यह BLE की “नेटवर्क परत” है। GATT कनेक्शन स्थापित होने के बाद डेटा आदान-प्रदान के लिए जिम्मेदार है — “एप्लिकेशन परत”। डेवलपर स्कैन करने और डिवाइस से कनेक्ट करने के लिए GAP का उपयोग करता है, और कनेक्टेड डिवाइस से डेटा पढ़ने, लिखने और सूचनाएँ प्राप्त करने के लिए GATT का उपयोग करता है।

विशेषताGAPGATT
उद्देश्यखोज और कनेक्शनडेटा आदान-प्रदान
भूमिकाएँकेंद्रीय / परिधीयक्लाइंट / सर्वर
प्रोटोकॉलHCI, लिंक परतATT (Attribute Protocol)
चरणकनेक्शन से पहलेकनेक्शन के बाद
मुख्य वर्गBluetoothAdapterBluetoothGatt

GATT में भूमिकाएँ

GATT दो भूमिकाएँ परिभाषित करता है: GATT सर्वर और GATT क्लाइंट। सर्वर एक ऐसा उपकरण है जो डेटा प्रदान करता है (उदाहरण के लिए, एक फिटनेस ट्रैकर जो हृदय गति रीडिंग भेजता है)। क्लाइंट एक ऐसा उपकरण है जो डेटा का अनुरोध करता है (उदाहरण के लिए, एक स्मार्टफ़ोन जो रीडिंग पढ़ता है)। अधिकांश परिदृश्यों में, Android ऐप GATT क्लाइंट के रूप में कार्य करता है, और BLE परिधीय GATT सर्वर के रूप में कार्य करता है। हालाँकि, Android GATT सर्वर भी हो सकता है — उदाहरण के लिए, जब कोई ऐप अन्य उपकरणों के लिए BLE डिवाइस का अनुकरण करता है। भूमिका GATT कनेक्शन सेटअप चरण में निर्धारित की जाती है और सत्र के दौरान नहीं बदलती है।

GATT संचार BLE में कैसे काम करता है

GATT संचार प्रक्रिया उपकरणों के बीच BLE कनेक्शन स्थापित होने के बाद शुरू होती है। पहले, GATT क्लाइंट सेवा खोज (Service Discovery) के माध्यम से GATT सर्वर पर सेवाओं का पता लगाता है — Android कनेक्ट होने पर BluetoothGatt.discoverServices() के माध्यम से स्वचालित रूप से ऐसा करता है। खोज के बाद, क्लाइंट को उपलब्ध सेवाओं, विशेषताओं और डिस्क्रिप्टर की एक सूची मिलती है। फिर क्लाइंट विशेषता मान पढ़ सकता है (Read), नए मान लिख सकता है (Write), या सूचनाओं की सदस्यता ले सकता है (Set Notify/Indicate)। GATT सर्वर कनेक्शन स्थापित होने के बाद किसी भी समय क्लाइंट को Notify/Indicate भेज सकता है।

MTU — अधिकतम संचरण इकाई

डिफ़ॉल्ट रूप से, BLE में एकल GATT पैकेट (MTU) का आकार 23 बाइट है, जिसमें से 3 बाइट ATT हेडर और 20 बाइट पेलोड हैं। यदि एप्लिकेशन को अधिक डेटा संचारित करने की आवश्यकता है (उदाहरण के लिए, OTA फ़र्मवेयर अपडेट), तो Android में requestMtu() के माध्यम से MTU को 517 बाइट तक बढ़ाया जा सकता है। बढ़ा हुआ MTU एक डेटा ब्लॉक को संचारित करने के लिए आवश्यक पैकेटों की संख्या को कम करता है — 50 छोटे पैकेटों के बजाय, आप 2 बड़े पैकेट भेज सकते हैं, जिससे बिजली की खपत कम होती है और संचरण गति बढ़ती है। अधिकतम MTU BLE संस्करण और चिप की क्षमताओं पर निर्भर करता है — Bluetooth 5.0 517 बाइट तक का समर्थन करता है, पुराने संस्करण 247 बाइट तक।

kotlin
// विशेषता सूचनाओं की सदस्यता लें
fun enableNotifications(gatt: BluetoothGatt, characteristic: BluetoothGattCharacteristic) {
    gatt.setCharacteristicNotification(characteristic, true)

    // CCCD (क्लाइंट विशेषता कॉन्फ़िगरेशन डिस्क्रिप्टर) सक्षम करें
    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)
    }
}

सूचनाओं को संभालना

Android पर GATT सर्वर से सूचनाएँ प्राप्त करने के लिए, आपको BluetoothGattCallback.onCharacteristicChanged() कॉलबैक लागू करना होगा। इस विधि में, ऐप हर बार जब सर्वर Notify या Indicate भेजता है, तो अद्यतन विशेषता मान प्राप्त करता है। रीयल-टाइम डेटा प्रोसेसिंग के लिए, बफ़र और Kotlin कोरूटीन का उपयोग करें — यह गहन सूचनाओं (उदाहरण के लिए, प्रति सेकंड 100+ हृदय गति रीडिंग) के दौरान UI थ्रेड को ब्लॉक होने से रोकता है। इंडिकेशन (Indicate) के लिए, आपको सर्वर पक्ष पर gatt.sendResponse() को कॉल करना होगा — Android क्लाइंट पर, यह स्वचालित रूप से संभाला जाता है।

Android पर GATT का कार्यान्वयन

Android पर, GATT के साथ काम android.bluetooth पैकेज के क्लास के माध्यम से लागू किया जाता है: BluetoothGatt (कनेक्शन), BluetoothGattService (सेवा), BluetoothGattCharacteristic (विशेषता), और BluetoothGattDescriptor (डिस्क्रिप्टर)। BLE डिवाइस से कनेक्शन BluetoothDevice.connectGatt() को कॉल करके शुरू होता है — यह विधि एक BluetoothGatt लौटाती है जिसके माध्यम से सभी आगे के संचालन किए जाते हैं। सभी GATT कॉलबैक BluetoothGattCallback में आते हैं — यह एक अतुल्यकालिक इंटरफ़ेस है जो उसी थ्रेड पर कॉल किया जाता है जहाँ BluetoothGatt बनाया गया था। महत्वपूर्ण: सभी GATT संचालन क्रमिक रूप से किए जाने चाहिए — एक ही BluetoothGatt पर एक साथ कई संचालन कॉल करने से त्रुटियाँ होती हैं।

GATT कनेक्शन जीवनचक्र

GATT कनेक्शन जीवनचक्र का उचित प्रबंधन BLE ऐप स्थिरता के लिए महत्वपूर्ण है। connectGatt() को कॉल करने के बाद, ऐप STATE_CONNECTED स्थिति के साथ onConnectionStateChange() कॉलबैक की प्रतीक्षा करता है। फिर सिस्टम स्वचालित रूप से Service Discovery शुरू करता है, जिसके पूरा होने पर onServicesDiscovered() कॉल किया जाता है। इसके बाद ही आप पढ़ना, लिखना और सदस्यता ले सकते हैं। समाप्त होने पर, हमेशा onDestroy() या onPause() में gatt.close() कॉल करें — बंद न किए गए GATT कनेक्शन बैटरी खत्म करते हैं और Android पर उसी डिवाइस से पुनः कनेक्शन को अवरुद्ध कर सकते हैं।

kotlin
// GATT के माध्यम से BLE डिवाइस से कनेक्ट करें
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) }
    }
}

मानक GATT प्रोफ़ाइल और सेवाएँ

Bluetooth SIG दर्जनों मानक GATT प्रोफ़ाइल और सेवाओं को निश्चित 16-बिट UUID के साथ परिभाषित करता है। सबसे आम हैं: Battery Service (UUID 180F, विशेषता Battery Level 2A19), Heart Rate सेवा (UUID 180D, विशेषता Heart Rate Measurement 2A37), Device Information सेवा (UUID 180A, विशेषताएँ Manufacturer Name और Serial Number)। मानक सेवाओं का उपयोग विभिन्न निर्माताओं के उपकरणों के बीच संगतता सुनिश्चित करता है — Heart Rate सेवा वाला कोई भी फिटनेस ब्रेसलेट किसी भी Android ऐप के साथ काम करना चाहिए जो इसका समर्थन करता है।

कस्टम GATT सेवाओं का डिज़ाइन

यदि मानक सेवाएँ कार्य को कवर नहीं करती हैं, तो डेवलपर 128-बिट UUID के साथ कस्टम GATT सेवाएँ बना सकता है। कस्टम सेवा डिज़ाइन करते समय, आपको चाहिए: विशेषताओं का एक तार्किक समूह परिभाषित करें (उदाहरण के लिए, “लॉक नियंत्रण सेवा”), प्रत्येक विशेषता को सही गुण (Read, Write, Notify) निर्दिष्ट करें, Characteristic Presentation Format डिस्क्रिप्टर के माध्यम से अनुमत मान और माप की इकाइयाँ परिभाषित करें। जटिल प्रोटोकॉल के लिए, Write गुण के साथ Command विशेषता और Notify के साथ Status विशेषता शामिल करने की अनुशंसा की जाती है — यह औद्योगिक BLE अनुप्रयोगों में अपनाए गए Command/Status पैटर्न का अनुसरण करता है।

kotlin
// कस्टम GATT सेवा बनाएँ (GATT सर्वर के रूप में Android)
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
}

अक्सर पूछे जाने वाले प्रश्न

BLE में GATT क्या है और इसकी आवश्यकता क्यों है?

GATT (Generic Attribute Profile) एक Bluetooth Low Energy प्रोफ़ाइल है जो उपकरणों के बीच डेटा आदान-प्रदान संरचना को परिभाषित करती है। इसकी आवश्यकता सूचना तक पहुँच को मानकीकृत करने के लिए है: सभी BLE उपकरण डेटा को सेवाओं और विशेषताओं में व्यवस्थित करते हैं, जिससे कोई भी क्लाइंट सेंसर रीडिंग पढ़ सकता है, उपकरणों को नियंत्रित कर सकता है और सूचनाएँ प्राप्त कर सकता है।

GATT, GAP से कैसे भिन्न है?

GAP BLE उपकरणों की खोज और कनेक्शन (स्कैनिंग, विज्ञापन, कनेक्शन सेटअप) के लिए जिम्मेदार है। GATT कनेक्शन के बाद डेटा आदान-प्रदान (पढ़ना, लिखना, सूचनाएँ) के लिए जिम्मेदार है। GAP कनेक्शन से पहले काम करता है, GATT बाद में। दोनों प्रोफ़ाइल BLE के लिए अनिवार्य हैं, लेकिन अलग-अलग कार्य करते हैं: GAP “नेटवर्क परत” है, GATT “एप्लिकेशन परत” है।

कौन सी GATT सेवाएँ और विशेषताएँ मौजूद हैं?

मानक सेवाओं में Battery Service (180F, बैटरी स्तर), Heart Rate (180D, नाड़ी), Device Information (180A, डिवाइस डेटा) शामिल हैं। प्रत्येक सेवा में 16-बिट UUID के साथ कई विशेषताएँ होती हैं। डेवलपर विशिष्ट कार्यों के लिए 128-बिट UUID के साथ कस्टम सेवाएँ बना सकते हैं — जैसे स्मार्ट लॉक नियंत्रण या फिटनेस ट्रैकर डेटा ट्रांसमिशन।

Android पर GATT कैसे काम करता है?

Android पर, GATT को BluetoothGatt (कनेक्शन), BluetoothGattService (सेवा), BluetoothGattCharacteristic (विशेषता), और BluetoothGattDescriptor (डिस्क्रिप्टर) के माध्यम से लागू किया जाता है। कनेक्शन connectGatt() के माध्यम से किया जाता है, जिसके बाद BluetoothGattCallback के माध्यम से ईवेंट आते हैं: onConnectionStateChange, onServicesDiscovered, onCharacteristicChanged (सूचनाओं के लिए)। सभी GATT संचालन क्रमिक रूप से किए जाने चाहिए।

GATT में UUID क्या है?

UUID (यूनिवर्सली यूनीक आइडेंटिफ़ायर) एक 16-बिट या 128-बिट पहचानकर्ता है जो GATT में किसी सेवा या विशेषता की विशिष्ट रूप से पहचान करता है। मानक Bluetooth SIG सेवाएँ 16-बिट UUID का उपयोग करती हैं (उदाहरण के लिए, Heart Rate के लिए 180D)। डेवलपर की कस्टम सेवाएँ 128-बिट UUID का उपयोग करती हैं (उदाहरण के लिए, 12345678-1234-5678-1234-56789abcdef0)। UUID क्लाइंट को GATT सर्वर पर आवश्यक डेटा खोजने की अनुमति देता है।

सारांश

  • GATT — सेवाओं, विशेषताओं और डिस्क्रिप्टर के पदानुक्रम के माध्यम से संरचित डेटा आदान-प्रदान के लिए एक BLE प्रोफ़ाइल, जो Attribute Protocol (ATT) पर आधारित है
  • डेटा पदानुक्रम — सेवा (तार्किक समूह), विशेषता (प्रकार के साथ विशिष्ट मान), डिस्क्रिप्टर (मेटाडेटा — इकाइयाँ, सूचना सेटिंग्स)
  • GATT भूमिकाएँ — सर्वर (डेटा प्रदान करता है, आमतौर पर BLE परिधीय) और क्लाइंट (पढ़ता/लिखता है, आमतौर पर Android स्मार्टफ़ोन)
  • संचालन — Read, Write, Notify (बिना पुष्टि के, तेज़) और Indicate (पुष्टि के साथ, अधिक विश्वसनीय); चुनाव परिदृश्य पर निर्भर करता है
  • Android API — BluetoothGatt, BluetoothGattCallback, BluetoothGattService, BluetoothGattCharacteristic; कॉलबैक के माध्यम से अनुक्रमिक अतुल्यकालिक कॉल
  • मानक प्रोफ़ाइल — Battery Service, Heart Rate, Device Information — विभिन्न निर्माताओं के उपकरणों के बीच संगतता सुनिश्चित करते हैं
  • कस्टम सेवाएँ — अद्वितीय कार्यों के लिए 128-बिट UUID; सही गुणों (Read, Write, Notify, Indicate) के साथ Command/Status पैटर्न का उपयोग करके डिज़ाइन की जाती हैं

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें