Service UUID হলো একটি অনন্য 16- বা 128-বিট Bluetooth Low Energy (BLE) আইডেন্টিফায়ার যা একটি ডিভাইসের কার্যকরী সার্ভিসকে নির্ধারিতভাবে সংজ্ঞায়িত করে। Bluetooth SIG সাধারণ সার্ভিস যেমন Battery Service (0x180F), Device Information (0x180A) এবং Heart Rate (0x180D)-এর জন্য স্ট্যান্ডার্ড 16-বিট UUID বরাদ্দ করেছে, যা ক্রস-প্ল্যাটফর্ম সামঞ্জস্য সহজ করে। Bluetooth Core Specification 5.4 (2023) অনুযায়ী, থার্ড-পার্টি ডেভেলপারদের কাস্টম সার্ভিসকে 128-বিট UUID ব্যবহার করতে হবে, যার ফরম্যাট কেন্দ্রীয় রেজিস্ট্রি ছাড়াই বৈশ্বিক অনন্যতা নিশ্চিত করে। Service UUID-এর সঠিক ঘোষণা পেরিফেরাল ডিভাইসে GATT সার্ভারের সঠিক কার্যক্রমের প্রথম ধাপ।
মূল পয়েন্ট
Service UUID হলো একটি আইডেন্টিফায়ার যা Bluetooth Low Energy GATT সার্ভিসকে অন্যান্য ডিভাইস দ্বারা নির্ধারিত শনাক্তকরণের জন্য বরাদ্দ করা হয়। BLE আর্কিটেকচারে, প্রতিটি সার্ভিস একটি সাধারণ ফাংশনের সাথে যুক্ত বৈশিষ্ট্যগুলোর একটি লজিক্যাল গ্রুপ উপস্থাপন করে। উদাহরণস্বরূপ, Battery Service-এ Battery Level বৈশিষ্ট্য থাকে, যা বর্তমান ব্যাটারি চার্জ প্রেরণ করে।
Bluetooth SIG (Special Interest Group) সবচেয়ে সাধারণ সার্ভিসের জন্য বরাদ্দ করা স্ট্যান্ডার্ড 16-বিট UUID-এর রেজিস্ট্রি পরিচালনা করে। এটি বিভিন্ন নির্মাতার ডিভাইসকে পূর্ব কনফিগারেশন ছাড়াই একে অপরের সার্ভিস চিনতে সক্ষম করে। যেকোনো ব্র্যান্ডের ফিটনেস ট্র্যাকার UUID 0x180D-সহ Heart Rate Service ঘোষণা করতে পারে, এবং যেকোনো স্মার্টফোন বুঝতে পারবে যে এটি হার্ট রেট সার্ভিস।
Bluetooth Core Specification 5.4 (2023) অনুযায়ী, 16-বিট UUID রেঞ্জ (0x0000–0xFFFF) দুটি অংশে বিভক্ত: 0x0001 থেকে 0xFFFE পর্যন্ত Bluetooth SIG-এর স্ট্যান্ডার্ড সার্ভিস, এবং 0xFFFF সংরক্ষিত। যদি ডেভেলপারের SIG রেজিস্ট্রিতে না থাকা একটি অনন্য সার্ভিসের প্রয়োজন হয়, তাহলে সে 128-বিট UUID ব্যবহার করে।
স্ট্যান্ডার্ড এবং কাস্টম UUID-এর মধ্যে পার্থক্য শুধু দৈর্ঘ্যে নয়: 16-বিট UUID বিজ্ঞাপন প্যাকেটে এয়ার টাইম বাঁচায়, কারণ সেগুলো 16 বাইটের পরিবর্তে 2 বাইট হিসাবে প্রেরিত হয়। কঠোর বিজ্ঞাপন প্যাকেট আকার সীমা (31 বাইট পর্যন্ত) রয়েছে এমন ডিভাইসের জন্য, এটি গুরুত্বপূর্ণ।
স্ট্যান্ডার্ড 16-বিট UUID BLE ডিভাইসের প্রধান ক্যাটাগরিগুলো কভার করে: মেডিকেল সেন্সর, ফিটনেস ট্র্যাকার, পরিধানযোগ্য ইলেকট্রনিক্স এবং আনুষাঙ্গিক। যদি একটি ডিভাইস স্ট্যান্ডার্ড ফাংশন বাস্তবায়ন করে, তাহলে ডেভেলপারকে সর্বোচ্চ সামঞ্জস্যের জন্য Bluetooth SIG রেজিস্ট্রি থেকে সংশ্লিষ্ট UUID ব্যবহার করার পরামর্শ দেওয়া হয়।
এখানে স্ট্যান্ডার্ড সার্ভিস UUID-এর কিছু উদাহরণ দেওয়া হলো:
| UUID (hex) | সার্ভিসের নাম | উদ্দেশ্য |
|---|---|---|
| 0x1800 | Generic Access | অ্যাক্সেস নিয়ন্ত্রণ, ডিভাইসের নাম, চেহারা |
| 0x180A | Device Information | নির্মাতা, মডেল, সিরিয়াল নম্বর, ফার্মওয়্যার সংস্করণ |
| 0x180D | Heart Rate | নাড়ি পরিমাপ, সেন্সর অবস্থান, ব্যাটারি শক্তি |
| 0x180F | Battery Service | শতাংশে ব্যাটারি চার্জ স্তর |
| 0x181A | Environmental Sensing | তাপমাত্রা, আর্দ্রতা, চাপ, আলোকপ্রাপ্তি |
| 0x181C | User Data | বয়স, ওজন, উচ্চতা, লিঙ্গ, বিশ্রামে নাড়ি |
কাস্টম 128-বিট UUID প্রয়োজন যখন একটি ডিভাইস অনন্য কার্যকারিতা প্রদান করে। উদাহরণস্বরূপ, একটি স্মার্ট লক প্রস্তুতকারক XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX ফরম্যাটের UUID-সহ নিজস্ব Lock Control সার্ভিস তৈরি করে। এই UUID অন্যান্য সার্ভিসের সাথে সংঘর্ষ করবে না, কারণ 128-বিট মানের স্থান কার্যত অফুরন্ত।
128-বিট UUID স্ট্যান্ডার্ড UUID RFC 4122 ফরম্যাটে লেখা হয়: আট হেক্সাডেসিমেল অক্ষর, হাইফেন, চার, হাইফেন, চার, হাইফেন, চার, হাইফেন, বারো অক্ষর। BLE-এর জন্য, একটি সংস্করণ ব্যবহার করা হয় যেখানে Bluetooth SIG UUID-এর বেস অংশে নির্দিষ্ট বিট থাকে।
Bluetooth SIG বেস UUID সংজ্ঞায়িত করে: 0000XXXX-0000-1000-8000-00805F9B34FB। স্ট্যান্ডার্ড 16-বিট সার্ভিসের জন্য, UUID মান এই মাস্কে প্রতিস্থাপিত হয়: উদাহরণস্বরূপ, 0x180F 0000180F-0000-1000-8000-00805F9B34FB-এ পরিণত হয়। কাস্টম সার্ভিস ডেভেলপার দ্বারা তৈরি সম্পূর্ণ স্বাধীন UUID ব্যবহার করে।
কাস্টম UUID তৈরি করার সময়, আপনি যেকোনো UUID জেনারেটর (UUID v4) ব্যবহার করতে পারেন। একটি র্যান্ডম UUID v4 122 বিট এনট্রপি প্রদান করে, যা সংঘর্ষকে কার্যত অসম্ভব করে তোলে। কাস্টম সার্ভিসের জন্য বেস Bluetooth SIG UUID-এর পরিবর্তিত সংস্করণ ব্যবহার করবেন না — এটি স্পেসিফিকেশন লঙ্ঘন করে।
UUID-সহ সার্ভিস ঘোষণা GATT সার্ভার তৈরি করার সময় পেরিফেরাল পাশে করা হয়। iOS-এ Core Bluetooth ব্যবহার করা হয়; Android-এ android.bluetooth.le ব্যবহার করা হয়। আসুন উভয় পদ্ধতি দেখি।
Swift-এ, UUID উল্লেখ করে CBMutableService-এর মাধ্যমে সার্ভিস তৈরি করা হয়, তারপর CBMutableCharacteristic-এর মাধ্যমে এতে বৈশিষ্ট্য যোগ করা হয়।
import CoreBluetooth
// Standard 16-bit UUID
let batteryServiceUUID = CBUUID("180F")
// Custom 128-bit UUID
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")
let service = CBMutableService(
type: customServiceUUID,
primary: true
)
// Add characteristics
service.characteristics = [characteristic]
// Publish service via peripheralManager
peripheralManager.add(service)
Android-এ, সার্ভিস BluetoothGattServer এবং BluetoothGattService-এর মাধ্যমে নিবন্ধিত হয়। UUID java.util.UUID.fromString-এর মাধ্যমে স্ট্রিং হিসাবে পাস করা হয়।
import android.bluetooth.*;
// Custom service UUID
private static final UUID CUSTOM_SERVICE_UUID =
UUID.fromString("E20A39F4-73F5-4BC4-A12F-17D1AD07A961");
BluetoothGattService service = new BluetoothGattService(
CUSTOM_SERVICE_UUID,
BluetoothGattService.SERVICE_TYPE_PRIMARY
);
// Add characteristics
service.addCharacteristic(characteristic);
// Register on GATT server
gattServer.addService(service);
Service UUID দ্বারা স্ক্যানিং কেন্দ্রীয় ডিভাইসকে সব আবিষ্কৃত পেরিফেরালের সাথে সংযোগ না করেই প্রয়োজনীয় সার্ভিস প্রদানকারী ডিভাইস খুঁজে বের করতে দেয়। একটি BLE বিজ্ঞাপন প্যাকেটে সার্ভিস UUID-এর তালিকা থাকতে পারে, যা কেন্দ্রীয় ডিভাইসকে স্ক্যানিং ধাপে ডিভাইস ফিল্টার করতে দেয়।
iOS-এ, CBCentralManager সার্ভিস UUID দ্বারা ফিল্টার সহ ডিভাইস স্ক্যান করে। এটি পাওয়ার খরচ কমায় এবং প্রয়োজনীয় ডিভাইস শনাক্তকরণ দ্রুত করে।
import CoreBluetooth
let centralManager = CBCentralManager()
func scanForHeartRateMonitor() {
let services: [CBUUID] = [
CBUUID("180D") // Heart Rate Service
]
centralManager.scanForPeripherals(
withServices: services,
options: nil
)
}
// Delegate receives only Heart Rate Service devices
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// peripheral has only devices with UUID 0x180D
}
Android-এ, UUID দ্বারা ফিল্টারিং ScanFilter.Builder-এর মাধ্যমেও সমর্থিত। এটি প্রতিটি ডিভাইসে সংযোগ না করেই অনুসন্ধান সীমিত করার একটি কার্যকর উপায়।
import android.bluetooth.le.*;
ScanFilter filter = new ScanFilter.Builder()
.setServiceUuid(
new ParcelUuid(
UUID.fromString("0000180D-0000-1000-8000-00805F9B34FB")
)
)
.build();
BluetoothLeScanner scanner = bluetoothAdapter.getBluetoothLeScanner();
scanner.startScan(
Collections.singletonList(filter),
scanSettings,
scanCallback
);
একটি BLE ডিভাইস একসাথে একাধিক সার্ভিস ঘোষণা করতে পারে। উদাহরণস্বরূপ, একটি ফিটনেস ব্রেসলেটে Battery Service (0x180F), Heart Rate Service (0x180D) এবং ক্লাউডের সাথে ডেটা সিঙ্ক করার জন্য একটি কাস্টম সার্ভিস থাকতে পারে। প্রতিটি সার্ভিসের নিজস্ব UUID এবং নিজস্ব বৈশিষ্ট্যের সেট থাকে।
একাধিক সার্ভিসের সাথে, বিজ্ঞাপন প্যাকেট সীমা বিবেচনা করা গুরুত্বপূর্ণ। একটি BLE বিজ্ঞাপন প্যাকেটে 31 বাইট পর্যন্ত ডেটা থাকতে পারে। যদি সার্ভিস UUID খুব বেশি জায়গা নেয়, তাহলে কিছু বিজ্ঞাপন প্যাকেটে ফিট নাও হতে পারে। এই ক্ষেত্রে, স্ক্যান রেসপন্স ব্যবহার করা হয় — একটি দ্বিতীয় প্যাকেট যা কেন্দ্রীয় ডিভাইসের অনুরোধে পাঠানো হয়।
Bluetooth Core Specification 5.4 (2023) অনুযায়ী, একটি GATT সার্ভারে প্রাথমিক সার্ভিসের সর্বোচ্চ সংখ্যা স্পেসিফিকেশন দ্বারা সীমাবদ্ধ নয়, কিন্তু বাস্তবে এটি ডিভাইস মেমরি এবং কর্মক্ষমতা প্রয়োজনীয়তা দ্বারা সীমাবদ্ধ। 256 KB ফ্ল্যাশ মেমরি সহ এমবেডেড ডিভাইসের জন্য, 5–10টির বেশি সার্ভিস সুপারিশ করা হয় না।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
16-বিট UUID Bluetooth SIG দ্বারা স্ট্যান্ডার্ড সার্ভিসের জন্য সংরক্ষিত এবং বিজ্ঞাপন প্যাকেটে 2 বাইট জায়গা নেয়। 128-বিট UUID কাস্টম সার্ভিসের জন্য ব্যবহার করা হয় এবং 16 বাইট জায়গা নেয়। পছন্দ সার্ভিসের ধরনের উপর নির্ভর করে: স্ট্যান্ডার্ড কার্যকারিতা 16-বিট UUID ব্যবহার করে, অনন্য কার্যকারিতা 128-বিট UUID ব্যবহার করে।
UUID v4 ব্যবহার করুন — একটি র্যান্ডম UUID যা অনলাইন টুল, টার্মিনাল কমান্ড uuidgen বা আপনার প্রোগ্রামিং ভাষা API দ্বারা তৈরি হয়। উদাহরণ: Java-তে UUID.fromString(UUID.randomUUID().toString()) বা Swift-এ UUID()।
না, নিবন্ধনের প্রয়োজন নেই। Bluetooth SIG শুধুমাত্র 16-বিট UUID নিবন্ধন করে। কাস্টম 128-বিট UUID ডেভেলপার দ্বারা স্বাধীনভাবে তৈরি করা হয় এবং বিশাল ঠিকানা স্থানের (2^128 কম্বিনেশন) কারণে অনন্যতা নিশ্চিত করে।
হ্যাঁ, একটি স্ট্যান্ডার্ড GATT সার্ভিসে সীমাহীন সংখ্যক বৈশিষ্ট্য থাকতে পারে। উদাহরণস্বরূপ, Battery Service-এ Battery Level (0x2A19) এবং Battery Power State (0x2A1A) থাকতে পারে। প্রতিটি বৈশিষ্ট্যের নিজস্ব UUID এবং বৈশিষ্ট্যের সেট থাকে।
যদি UUID মিলে যায়, তাহলে কেন্দ্রীয় ডিভাইস অতিরিক্ত তথ্য ছাড়া একটি সার্ভিসকে অন্যটি থেকে আলাদা করতে পারে না। র্যান্ডম UUID v4-এর সংঘর্ষের সম্ভাবনা নগণ্য — প্রায় 5.3 × 10^−37। র্যান্ডম UUID জেনারেটর ব্যবহার করুন, উদাহরণ থেকে UUID কপি করবেন না।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন