Characteristic — Bluetooth Low Energy میں ڈیٹا کی بنیادی اکائی ہے، جس کے ذریعے Central پیری فیرل ڈیوائس پر معلومات حاصل یا لکھ سکتا ہے۔ ہر Characteristic ایک مخصوص GATT-سروس سے تعلق رکھتی ہے، اس کا منفرد UUID اور خصوصیات کا ایک سیٹ (read, write, notify, indicate) ہوتا ہے جو ممکنہ آپریشنز کا تعین کرتا ہے۔ Bluetooth Core Specification 5.4 (2023) کے مطابق، Bluetooth SIG نے طبی، فٹنس اور صنعتی آلات کے لیے 500 سے زیادہ معیاری خصوصیات کی وضاحت کی ہے۔ ڈویلپر سینسر کی ریڈنگز سے لے کر ڈیوائس کمانڈز تک کسی بھی صارف ڈیٹا کی منتقلی کے لیے کسٹم خصوصیات بنا سکتا ہے۔
اہم نکات
Characteristic — GATT-پروٹوکول کا ایک ایٹری بیوٹ ہے جس میں ویلیو اور میٹا ڈیٹا ہوتا ہے۔ 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 string | Generic Access |
| 0x2A01 | Appearance | uint16 | Generic Access |
اگر موجودہ معیاری خصوصیت آپ کے کام کو کور کرتی ہے تو اسے استعمال کریں۔ یہ Bluetooth سرٹیفیکیشن کو آسان بناتا ہے اور ایکو سسٹم کے ساتھ مطابقت بڑھاتا ہے۔ کسٹم خصوصیات صرف منفرد ڈیٹا کے لیے بنائیں جو SIG رجسٹری میں موجود نہیں ہے۔
خصوصیت بنانا Peripheral کی طرف سے کیا جاتا ہے — وہ ڈیوائس جو ڈیٹا فراہم کرتی ہے۔ آئیے iOS (Swift) اور Android (Java) پر عمل درآمد دیکھتے ہیں۔
Core Bluetooth خصوصیت بنانے کے لیے CBMutableCharacteristic کلاس فراہم کرتا ہے جس میں UUID، خصوصیات اور ابتدائی ویلیو بتائی جاتی ہے۔
import CoreBluetooth
let characteristicUUID = CBUUID("2A19") // Battery Level characteristic
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 پر خصوصیت BluetoothGattCharacteristic کے ذریعے UUID، خصوصیات اور Permission کے ساتھ بنائی جاتی ہے۔
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 negotiation (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 negotiation استعمال کریں۔ اگر ڈیٹا پھر بھی بڑا ہے تو ایپلیکیشن کی سطح پر فریگمنٹیشن لاگو کریں: ڈیٹا کو کئی متواتر درخواستوں میں توڑیں اور انٹیگریٹی کنٹرول رکھیں۔
اگر آپ کا کام معیاری خصوصیت سے پورا ہوتا ہے تو Bluetooth SIG رجسٹری سے UUID استعمال کریں۔ یہ سرٹیفیکیشن کو آسان بناتا ہے اور ایکو سسٹم کے ساتھ مطابقت کو یقینی بناتا ہے۔ کسٹم UUID صرف تیسرے فریق کے منفرد ڈیٹا کے لیے بنائیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں