Characteristic Bluetooth Low Energy में डेटा की एक मूलभूत इकाई है, जिसके माध्यम से Central किसी पेरिफेरल डिवाइस पर जानकारी पढ़ता या लिखता है। प्रत्येक Characteristic एक विशिष्ट GATT सेवा से संबंधित होती है, इसमें एक अद्वितीय UUID और गुणों (read, write, notify, indicate) का एक सेट होता है जो संभावित संचालन को परिभाषित करते हैं। Bluetooth Core Specification 5.4 (2023) के अनुसार, Bluetooth SIG ने चिकित्सा, फिटनेस और औद्योगिक उपकरणों के लिए 500 से अधिक मानक विशेषताएँ निर्दिष्ट की हैं। डेवलपर्स सेंसर रीडिंग से लेकर डिवाइस नियंत्रण कमांड तक किसी भी उपयोगकर्ता डेटा को संचारित करने के लिए कस्टम विशेषताएँ बनाते हैं।
मुख्य बिंदु
Characteristic GATT प्रोटोकॉल की एक विशेषता है जिसमें एक मान (value) और मेटाडेटा होता है। BLE आर्किटेक्चर में, डेटा सीधे उपकरणों के बीच स्थानांतरित नहीं होता, बल्कि सेवा की विशेषताओं के मानों को पढ़ने और लिखने के माध्यम से होता है। यदि सेवा एक फ़ोल्डर है, तो Characteristic उस फ़ोल्डर के अंदर एक फ़ाइल है।
प्रत्येक Characteristic तीन घटकों से बनी होती है: घोषणा (declaration), मान (value), और डिस्क्रिप्टर (descriptors)। घोषणा में विशेषता का UUID और उसके गुण होते हैं। मान Central और Peripheral के बीच स्थानांतरित वास्तविक डेटा है। डिस्क्रिप्टर अतिरिक्त कॉन्फ़िगरेशन प्रदान करते हैं।
Bluetooth Core Specification 5.4 (2023) के अनुसार, BLE में सभी डेटा आदान-प्रदान विशेषताओं पर संचालन के माध्यम से होते हैं। यहाँ तक कि मानक प्रोफ़ाइल जैसे Heart Rate Profile या Battery Service भी पूर्वनिर्धारित UUID वाली विशेषताओं के सेट पर बने हैं। यह बिना पूर्व कॉन्फ़िगरेशन के विभिन्न निर्माताओं के उपकरणों की संगतता सुनिश्चित करता है।
डेवलपर के लिए यह समझना महत्वपूर्ण है: प्रत्येक Characteristic विभिन्न गुण संयोजनों का समर्थन कर सकती है। एक विशेषता केवल पढ़ने के लिए हो सकती है, दूसरी लिखने के लिए, तीसरी सूचनाओं के लिए। गुणों का सही चयन उपयोग परिदृश्य और डिवाइस की बिजली खपत निर्धारित करता है।
किसी विशेषता के गुण (properties) यह परिभाषित करते हैं कि उस पर कौन से संचालन अनुमत हैं। यह एक बाइट मास्क है जहाँ प्रत्येक बिट एक विशिष्ट संचालन को सक्षम या अक्षम करता है। नीचे मुख्य गुण सूचीबद्ध हैं।
| गुण | बिट | विवरण | सामान्य उपयोग |
|---|---|---|---|
| Read | 0x02 | Central वर्तमान मान पढ़ सकता है | स्थिति, बैटरी स्तर, कॉन्फ़िगरेशन |
| Write | 0x08 | Central नया मान लिख सकता है | नियंत्रण आदेश, सेटिंग्स |
| Notify | 0x10 | Peripheral बिना पुष्टि के मान भेजता है | स्ट्रीमिंग डेटा (नाड़ी, तापमान) |
| Indicate | 0x20 | Peripheral पुष्टि के साथ मान भेजता है | महत्वपूर्ण डेटा (अलर्ट, स्थितियाँ) |
| Write Without Response | 0x04 | सर्वर से पुष्टि की प्रतीक्षा किए बिना लिखना | उच्च गति आदेश संचरण |
अनुमतियाँ (permissions) GATT सर्वर स्तर पर पहुँच स्तर हैं। गुणों के विपरीत, जो विशेषता की घोषणा में घोषित किए जाते हैं, अनुमतियाँ प्रत्येक संचालन पर जाँची जाती हैं। इनमें एन्क्रिप्शन और प्रमाणीकरण आवश्यकताएँ शामिल हो सकती हैं।
Bluetooth SIG ने 500 से अधिक मानक विशेषताएँ निर्दिष्ट की हैं जो अधिकांश सामान्य BLE उपयोग मामलों को कवर करती हैं। मानक UUID का उपयोग सुनिश्चित करता है कि कोई भी प्राप्त करने वाला उपकरण बिना पूर्व कॉन्फ़िगरेशन के डेटा की सही व्याख्या करे।
ये सबसे अधिक उपयोग की जाने वाली मानक विशेषताएँ हैं:
| UUID | नाम | डेटा प्रकार | सेवा |
|---|---|---|---|
| 0x2A19 | Battery Level | uint8 (0–100%) | Battery Service |
| 0x2A37 | Heart Rate Measurement | uint8 + फ़्लैग | Heart Rate |
| 0x2A6E | Temperature | int16 (0.01°C) | Environmental Sensing |
| 0x2A6F | Humidity | uint16 (0.01%) | Environmental Sensing |
| 0x2A00 | Device Name | UTF-8 स्ट्रिंग | Generic Access |
| 0x2A01 | Appearance | uint16 | Generic Access |
यदि कोई मौजूदा मानक विशेषता आपके कार्य को कवर करती है, तो उसका उपयोग करें। यह Bluetooth प्रमाणन को सरल बनाता है और पारिस्थितिकी तंत्र संगतता में सुधार करता है। केवल अद्वितीय डेटा के लिए कस्टम विशेषताएँ बनाएँ जो SIG रजिस्ट्री में न हों।
विशेषता बनाना Peripheral पक्ष पर किया जाता है — वह उपकरण जो डेटा प्रदान करता है। आइए iOS (Swift) और Android (Java) पर कार्यान्वयन देखें।
Core Bluetooth UUID, गुण और प्रारंभिक मान के साथ विशेषता बनाने के लिए CBMutableCharacteristic वर्ग प्रदान करता है।
import CoreBluetooth
let characteristicUUID = CBUUID("2A19") // बैटरी स्तर विशेषता
let characteristic = CBMutableCharacteristic(
type: characteristicUUID,
properties: [.read, .notify],
value: nil,
permissions: [.readable]
)
// बदलाव पर मान अपडेट करें
let batteryData = Data([batteryLevel]) // uint8
peripheralManager.updateValue(
batteryData,
for: characteristic,
onSubscribedCentrals: nil
)
Android पर, विशेषता UUID, गुण और अनुमतियों के साथ BluetoothGattCharacteristic का उपयोग करके बनाई जाती है।
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
);
// मान सेट करें
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);
Characteristic पर संचालन तीन प्रकारों में विभाजित होते हैं: read (पढ़ना), write (लिखना), और notify/indicate (सूचनाएँ)। चुनाव परिदृश्य पर निर्भर करता है: माँग पर डेटा पढ़ा जाता है, आदेश लिखे जाते हैं, स्ट्रीमिंग डेटा सूचनाओं की सदस्यता लेता है।
Read: Central विशेषता मान पढ़ने का अनुरोध भेजता है। Peripheral वर्तमान मान के साथ उत्तर देता है। संचालन तुल्यकालिक है और प्रत्येक पक्ष से स्पष्ट अनुरोध की आवश्यकता होती है। उस डेटा के लिए उपयोग किया जाता है जो शायद ही कभी बदलता है: फ़र्मवेयर संस्करण, सीरियल नंबर, सेटिंग्स।
Write: Central Peripheral को डेटा भेजता है। दो मोड हैं: Write with Response (Peripheral से पुष्टि) और Write Without Response (बिना पुष्टि)। Write with Response वितरण की गारंटी देता है — Peripheral लिखने के बाद पुष्टि भेजता है। Write Without Response तेज़ है लेकिन वितरण की गारंटी नहीं देता।
Notify और Indicate: Peripheral Central को डेटा संचरण शुरू करता है। Notify में, डेटा बिना पुष्टि के भेजा जाता है — यदि Central पैकेट प्राप्त करने में विफल रहता है, तो वह खो जाता है। Indicate में, Central पुष्टि (PDU स्तर) भेजता है, जिससे वितरण सुनिश्चित होता है। Indicate धीमा है लेकिन अधिक विश्वसनीय है। सूचनाओं की सदस्यता लेने के लिए, Central CCCD (Client Characteristic Configuration Descriptor) में मान 0x0001 लिखता है।
MTU (Maximum Transmission Unit) एकल BLE डेटा पैकेट के अधिकतम आकार को परिभाषित करता है। डिफ़ॉल्ट रूप से, MTU 23 बाइट्स है, जिसमें से 3 बाइट्स हेडर हैं — पेलोड (ATT payload) 20 बाइट्स के बराबर है। यह अधिकांश सेंसर डेटा के लिए पर्याप्त है लेकिन फ़ाइल स्थानांतरण या बड़े कॉन्फ़िगरेशन के लिए पर्याप्त नहीं है।
Bluetooth Core Specification 5.4 MTU नेगोशिएशन का समर्थन करती है — Central और Peripheral 517 बाइट्स तक के बड़े पैकेट आकार पर सहमत हो सकते हैं। प्रक्रिया इस प्रकार काम करती है: Central अपने प्रस्तावित MTU के साथ MTU Exchange अनुरोध भेजता है; Peripheral अपने MTU के साथ उत्तर देता है; दोनों में से छोटे मान का उपयोग किया जाता है।
// iOS कनेक्ट होने पर MTU अनुरोध करता है
// iOS में अधिकतम MTU 185 बाइट्स है
func peripheral(
_ peripheral: CBPeripheral,
didDiscoverServices error: Error?
) {
// विशिष्ट पेरिफेरल के लिए MTU अनुरोध
peripheral.maximumWriteValueLength(for: .withResponse)
}
Bluetooth SIG (2023) के अनुसार, MTU को 23 से 185 बाइट्स तक बढ़ाने से कम पैकेटों के कारण डेटा संचरण ओवरहेड 80% तक कम हो जाता है। उच्च-आवृत्ति रीडिंग (जैसे, ECG या एक्सेलेरोमीटर) संचारित करने वाले अनुप्रयोगों के लिए, स्ट्रीम स्थिरता के लिए MTU वृद्धि महत्वपूर्ण है।
अक्सर पूछे जाने वाले प्रश्न
BLE विनिर्देश एक सेवा में विशेषताओं की संख्या को सीमित नहीं करता। व्यवहार में, सीमा GATT सर्वर की उपलब्ध मेमोरी और प्रदर्शन आवश्यकताओं द्वारा निर्धारित होती है। एम्बेडेड उपकरणों के लिए, प्रति सेवा 10–15 से अधिक विशेषताओं की अनुशंसा नहीं की जाती।
Notify बिना पुष्टि के डेटा भेजता है — पैकेट प्रेषक को सूचित किए बिना खो सकता है। Indicate को प्रोटोकॉल स्तर पर पुष्टि (ACK) की आवश्यकता होती है, जो वितरण की गारंटी देती है। Indicate धीमा है लेकिन अधिक विश्वसनीय है। महत्वपूर्ण डेटा (अलर्ट, आदेश) के लिए Indicate का उपयोग करें।
हाँ, एक विशेषता में गुणों का संयोजन हो सकता है। उदाहरण के लिए, एक सेटिंग्स विशेषता Read (वर्तमान मान पढ़ना) और Write (सेटिंग बदलना) का समर्थन कर सकती है। अपने उपयोग परिदृश्य के अनुसार गुणों को संयोजित करें।
पैकेट आकार को 185–517 बाइट्स तक बढ़ाने के लिए MTU नेगोशिएशन का उपयोग करें। यदि डेटा अभी भी बड़ा है, तो एप्लिकेशन स्तर पर विखंडन लागू करें: अखंडता नियंत्रण के साथ डेटा को कई अनुक्रमिक अनुरोधों में विभाजित करें।
यदि आपका कार्य एक मानक विशेषता द्वारा कवर किया जाता है, तो Bluetooth SIG रजिस्ट्री से UUID का उपयोग करें। यह प्रमाणन को सरल बनाता है और पारिस्थितिकी तंत्र संगतता सुनिश्चित करता है। केवल अद्वितीय तृतीय-पक्ष डेटा के लिए कस्टम UUID बनाएँ।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें