Bluetooth Low Energy (BLE) হল একটি ওয়্যারলেস যোগাযোগ মান যা ন্যূনতম শক্তি খরচে অল্প পরিমাণ ডেটা প্রেরণের জন্য অপ্টিমাইজ করা হয়েছে। Bluetooth SIG, 2025 অনুসারে, প্রযুক্তিটি বিশ্বব্যাপী 5 বিলিয়নেরও বেশি ডিভাইসে ব্যবহৃত হয়। GATT (Generic Attribute Profile) ডেটাকে Service → Characteristic → Descriptor ক্রমানুসারে সংগঠিত করে, যা iOS এবং Android-এর জন্য সমস্ত BLE অ্যাপ্লিকেশনের ভিত্তি তৈরি করে।
মূল পয়েন্ট
Bluetooth Low Energy (BLE) দুটি ভূমিকা সহ ক্লায়েন্ট-সার্ভার মডেলে কাজ করে: Central (মোবাইল ডিভাইস) এবং Peripheral (ডিভাইস)। Central বাতাসে স্ক্যান করে এবং সংযোগ শুরু করে, যখন Peripheral ডেটা প্রেরণ করে। ক্লাসিক Bluetooth-এর বিপরীতে, BLE অডিও স্ট্রিমের জন্য ডিজাইন করা হয়নি — এর কাজ হল ন্যূনতম শক্তি খরচে ছোট প্যাকেট প্রেরণ করা। Bluetooth SIG Core Specification 5.4 (2025) অনুসারে, BLE সক্রিয় মোডে 15 mA-এর কম কারেন্টে 2 Mbps পর্যন্ত গতি সমর্থন করে।
GATT (Generic Attribute Profile) Bluetooth Low Energy-এর ডেটা কাঠামো সংজ্ঞায়িত করে। Service হল বৈশিষ্ট্যগুলির একটি যৌক্তিক গ্রুপ (উদাহরণস্বরূপ, Heart Rate Service 0x180D)। Characteristic হল একটি নির্দিষ্ট মান সহ একটি ডেটা পয়েন্ট। Descriptor হল বৈশিষ্ট্যের মেটাডেটা, যাতে বিজ্ঞপ্তি ব্যবস্থাপনার জন্য CCCD অন্তর্ভুক্ত থাকে। প্রতিটি উপাদানের একটি UUID থাকে — স্ট্যান্ডার্ড Bluetooth SIG প্রোফাইলের জন্য 16-বিট বা কাস্টমের জন্য 128-বিট।
মোবাইল অ্যাপ্লিকেশনে Bluetooth Low Energy স্মার্টফোন এবং পেরিফেরাল ডিভাইসের মধ্যে ডেটা বিনিময় সংগঠিত করতে এই ক্রমানুসার ব্যবহার করে। GATT-এর সঠিক বোঝাপড়া উভয় প্ল্যাটফর্মে BLE অ্যাপ্লিকেশন বিকাশের ভিত্তি। ডেভেলপারকে ডিভাইসের পরিষেবা এবং বৈশিষ্ট্যগুলির UUID, পাশাপাশি প্রতিটি বৈশিষ্ট্যের বৈশিষ্ট্যগুলি (read, write, notify, indicate) জানতে হবে।
BLE ডিভাইসগুলি আবিষ্কারের জন্য বিজ্ঞাপন প্যাকেট (advertising packets) প্রেরণ করে। Advertising Data-তে ডিভাইসের নাম, পরিষেবা UUID, RSSI এবং Manufacturer Specific Data থাকে। বিজ্ঞাপন প্যাকেটের আকার 31 বাইটে সীমাবদ্ধ। অতিরিক্ত ডেটা প্রেরণের জন্য Scan Response ব্যবহার করা হয় — একটি দ্বিতীয় প্যাকেট যা কেন্দ্রীয় ডিভাইস আবিষ্কারের পরে অনুরোধ করে।
iOS-এ, Core Bluetooth ফ্রেমওয়ার্ক Bluetooth Low Energy পরিচালনা করে। CBCentralManager স্ক্যানিং এবং সংযোগ পরিচালনা করে, CBPeripheral একটি দূরবর্তী BLE ডিভাইস উপস্থাপন করে। প্রক্রিয়াটি মানক: CBCentralManager আরম্ভ করা, poweredOn অবস্থা পরীক্ষা করা, scanForPeripherals শুরু করা, সংযোগ করা এবং পরিষেবা আবিষ্কার করা। Core Bluetooth স্বয়ংক্রিয়ভাবে রেডিও মডিউলের শক্তি পরিচালনা করে — যদি BLE ব্যবহার না হয়, এটি বন্ধ হয়ে যায়।
iOS-এ মোবাইল ডেভেলপমেন্টে BLE-এর জন্য ব্যাকগ্রাউন্ড মোড বিবেচনা করা প্রয়োজন। Core Bluetooth ব্যাকগ্রাউন্ড মোড প্রকল্পের Capabilities (Uses Bluetooth LE accessories) এর মাধ্যমে সক্রিয় করা হয়। ব্যাকগ্রাউন্ডে, অ্যাপ বৈশিষ্ট্যগুলি থেকে বিজ্ঞপ্তি পেতে পারে, কিন্তু স্ক্যানিং সীমিত — সিস্টেম ডিভাইসটি সরলে কেবল এটি পুনরায় চালু করে। iBeacon-এর জন্য, CLLocationManager-এর মাধ্যমে ব্যাকগ্রাউন্ড স্ক্যানিং আরও সক্রিয়ভাবে কাজ করে।
import CoreBluetooth
class DeviceScanner: NSObject, CBCentralManagerDelegate {
var centralManager: CBCentralManager!
func start() {
centralManager = CBCentralManager(delegate: self, queue: nil)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
guard central.state == .poweredOn else { return }
central.scanForPeripherals(withServices: nil, options: nil)
}
func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber) {
print("পাওয়া গেছে: \(peripheral.name ?? "unknown")")
}
}
এই উদাহরণে, CBCentralManagerDelegate সমস্ত BLE সংযোগ ইভেন্ট পরিচালনা করে। centralManagerDidUpdateState পদ্ধতি মোবাইল ডিভাইসে Bluetooth চালু আছে কিনা তা পরীক্ষা করে। সফল আরম্ভের পরে, স্ক্যানিং শুরু হয়। প্রতিটি পাওয়া ডিভাইসের জন্য didDiscover কলব্যাক কল করা হয়।
ডিভাইস আবিষ্কারের পরে, আপনাকে connect এবং discoverServices কল করতে হবে। CBPeripheralDelegate প্রতিটি ধাপ পরিচালনার জন্য পদ্ধতি সরবরাহ করে: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor। প্রতিটি পদ্ধতি অ্যাসিঙ্ক্রোনাস — ডেটা ডেলিগেট কলব্যাকের মাধ্যমে আসে। RSSI (Received Signal Strength Indicator) সংকেত স্তর দেখায়: মান 0-এর যত কাছাকাছি, সংকেত তত শক্তিশালী।
Android-এ, Bluetooth Low Energy android.bluetooth প্যাকেজের মাধ্যমে বাস্তবায়িত হয়। BluetoothAdapter সমস্ত BLE অপারেশনের জন্য প্রবেশ বিন্দু। BluetoothLeScanner ScanCallback কলব্যাক সহ স্ক্যানিং শুরু করে। ডিভাইস আবিষ্কারের পরে, BluetoothGatt তৈরি করা হয় — পেরিফেরালের সাথে একটি সংযোগ। BluetoothGattCallback ইভেন্টগুলি পরিচালনা করে: সংযোগ, পরিষেবা আবিষ্কার, বৈশিষ্ট্য পড়া, RSSI পরিবর্তন।
Android-এ মোবাইল অ্যাপ্লিকেশনে Bluetooth Low Energy-এর জন্য স্পষ্ট BLUETOOTH_SCAN, BLUETOOTH_CONNECT এবং ACCESS_FINE_LOCATION অনুমতি প্রয়োজন। Android 12 থেকে অনুমতিগুলি পৃথক করা হয়েছে: স্ক্যানিংয়ের জন্য BLUETOOTH_SCAN, সংযোগের জন্য BLUETOOTH_CONNECT। নির্দিষ্ট ধরণের ডিভাইস স্ক্যান করার জন্য কেবল ACCESS_FINE_LOCATION প্রয়োজন। এই অনুমতি ছাড়া, অ্যাপ BLE-এর সাথে কাজ করতে পারে না।
class BLEScanner(private val bluetoothAdapter: BluetoothAdapter) {
fun startScan() {
val scanner = bluetoothAdapter.bluetoothLeScanner
val settings = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build()
scanner.startScan(null, settings, scanCallback)
}
private val scanCallback = object : ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult) {
val device = result.device
val rssi = result.rssi
Log.d("BLE", "ডিভাইস: ${device.name}, RSSI: $rssi")
}
}
}
ScanSettings আপনাকে স্ক্যানিং মোড কনফিগার করতে দেয়: ব্যাটারি বাঁচাতে LOW_POWER, মানক কাজের জন্য BALANCED, সর্বোচ্চ আবিষ্কার গতির জন্য LOW_LATENCY। ScanFilter পরিষেবা UUID, ডিভাইসের নাম বা MAC ঠিকানা দ্বারা অনুসন্ধান সংকুচিত করে। ফিল্টারিং শক্তি খরচ কমায় এবং পছন্দসই ডিভাইসের আবিষ্কার ত্বরান্বিত করে।
connectGatt-এর মাধ্যমে BluetoothGatt তৈরি করার পরে, অ্যাপ discoverServices কল করে। BluetoothGattCallback-এ onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged অন্তর্ভুক্ত রয়েছে। বৈশিষ্ট্য পরিবর্তন সম্পর্কে বিজ্ঞপ্তি পেতে, আপনাকে setCharacteristicNotification কল করতে হবে। প্রক্রিয়াটিতে মনোযোগ প্রয়োজন: প্রতিটি GATT অপারেশন অ্যাসিঙ্ক্রোনাস, এবং ফলাফল একটি পৃথক কলব্যাকে আসে।
iBeacon হল BLE বীকনের জন্য Apple-এর প্রযুক্তি যা UUID, Major এবং Minor প্রেরণ করে। বীকন ডিভাইস একটি বিজ্ঞাপন প্যাকেট সম্প্রচার করে, এবং মোবাইল অ্যাপ্লিকেশন এই ডেটার উপর ভিত্তি করে অবস্থান এবং দূরত্ব নির্ধারণ করে। iOS-এ, iBeacon CLLocationManager-এর মাধ্যমে নেটিভভাবে সমর্থিত। Android-এ, তৃতীয়-পক্ষের লাইব্রেরি প্রয়োজন (উদাহরণস্বরূপ, AltBeacon বা Android iBeacon Library)।
Bonding হল BLE ডিভাইসের মধ্যে একটি স্থায়ী সুরক্ষিত সংযোগ তৈরি করার পদ্ধতি। Bonding-এর পরে, এনক্রিপশন কীগুলি সংরক্ষিত হয়, এবং ডিভাইসগুলি পুনরায় কাছে এলে স্বয়ংক্রিয়ভাবে সংযুক্ত হয়। iOS-এ, বন্ডিং সিস্টেম দ্বারা স্বয়ংক্রিয়ভাবে পরিচালিত হয়। Android-এ — BluetoothDevice.createBond()-এর মাধ্যমে। Bonding পরিধানযোগ্য ডিভাইস এবং ফিটনেস ট্র্যাকারের জন্য গুরুত্বপূর্ণ যাতে দ্রুত পুনঃসংযোগ প্রয়োজন।
Advertising Data হল Bluetooth Low Energy-এ একটি মূল আবিষ্কার প্রক্রিয়া। ডিভাইস প্রস্তুতকারকরা কাস্টম ডেটা প্রেরণের জন্য বিজ্ঞাপন প্যাকেটে Manufacturer Specific Data যোগ করতে পারেন। প্যাকেট বিন্যাসে Company Identifier (2 বাইট) এবং নির্বিচার ডেটা অন্তর্ভুক্ত থাকে। iOS-এ, CBCentralManager ফিল্টারিংয়ের জন্য পরিষেবা UUID-এর একটি অ্যারে গ্রহণ করে — এটি ব্যাটারি বাঁচায়। Android-এ, ScanFilter একই নীতিতে কাজ করে।
| প্যারামিটার | iOS (Core Bluetooth) | Android (BluetoothGatt) |
|---|---|---|
| ব্যবস্থাপক | CBCentralManager | BluetoothLeScanner |
| সংযোগ | connect(to:) | connectGatt() |
| পরিষেবা | discoverServices() | discoverServices() |
| পড়া | readValue(for:) | readCharacteristic() |
| বিজ্ঞপ্তি | setNotifyValue(_:for:) | setCharacteristicNotification() |
| অনুমতি | স্বয়ংক্রিয় | BLUETOOTH_SCAN, BLUETOOTH_CONNECT |
| iBeacon | CLLocationManager (নেটিভ) | AltBeacon / লাইব্রেরি |
MTU (Maximum Transmission Unit) হল একটি একক Bluetooth Low Energy ডেটা প্যাকেটের সর্বোচ্চ আকার। ডিফল্টভাবে, MTU 23 বাইট (3 বাইট হেডার + 20 বাইট ডেটা)। MTU 512 বাইটে বৃদ্ধি করা কনফিগারেশন বা লগ বিনিময়ের সময় ট্রান্সমিশন উল্লেখযোগ্যভাবে ত্বরান্বিত করে। iOS-এ, maximumWriteValueLength উপলব্ধ MTU দেখায়। Android-এ, MTU বাড়ানোর জন্য requestMtu() ব্যবহার করা হয়।
Connection Interval হল ফ্রিকোয়েন্সি যার সাথে কেন্দ্রীয় ডিভাইস পেরিফেরালকে পোল করে। ব্যবধান যত ছোট, ট্রান্সমিশন গতি তত বেশি, তবে শক্তি খরচও তত বেশি। সাধারণ মান 7.5 ms থেকে 4 সেকেন্ড পর্যন্ত হয়। ফিটনেস ট্র্যাকারের জন্য, 100 ms যথেষ্ট; অডিওর জন্য — 7.5 ms। মোবাইল ডেভেলপমেন্টে BLE-এর জন্য ট্রান্সমিশন গতি এবং ডিভাইসের ব্যাটারি লাইফের মধ্যে ভারসাম্য প্রয়োজন।
iOS ব্যাকগ্রাউন্ড মোডের মাধ্যমে BLE সমর্থন করে, কিন্তু সীমাবদ্ধতা সহ। ব্যাকগ্রাউন্ডে অ্যাপ বৈশিষ্ট্যগুলি থেকে বিজ্ঞপ্তি পায়, কিন্তু সক্রিয়ভাবে স্ক্যান করতে পারে না। সিস্টেম ডিভাইসের অবস্থান পরিবর্তন হলে স্ক্যানিং পুনরায় চালু করে। Android-এ, ব্যাকগ্রাউন্ড স্ক্যানিংয়ের জন্য একটি স্থায়ী বিজ্ঞপ্তি সহ Foreground Service প্রয়োজন। এটি ছাড়া, মোবাইল সিস্টেম অ্যাপটি মিনিমাইজ করার সময় প্রক্রিয়াটি বন্ধ করে দেবে।
মোবাইল অ্যাপ্লিকেশনে নির্ভরযোগ্য BLE অপারেশনের জন্য, এই নিয়মগুলি অনুসরণ করুন। পোলিংয়ের পরিবর্তে notify ব্যবহার করুন — বিজ্ঞপ্তি সহ একটি বৈশিষ্ট্য পরিবর্তনের সময় ডেটা পাঠায়, যা ব্যাটারি বাঁচায়। সংযোগের শুরুতে সর্বোত্তম MTU সেট করুন। স্ক্যান করার সময় পরিষেবা UUID দ্বারা ডিভাইস ফিল্টার করুন। বিভিন্ন মডেলে BLE স্ট্যাক সামঞ্জস্যতা পরীক্ষা করুন — প্রস্তুতকারকরা (Xiaomi, Huawei, Samsung) Bluetooth আচরণকে প্রভাবিত করে এমন পরিবর্তন করে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Bluetooth Low Energy (BLE) কম শক্তি খরচে ছোট প্যাকেটের পর্যায়ক্রমিক প্রেরণের জন্য অপ্টিমাইজ করা হয়েছে। ক্লাসিক Bluetooth অডিও স্ট্রিম এবং বড় পরিমাণ ডেটার ক্রমাগত প্রেরণের জন্য ডিজাইন করা হয়েছে।
GATT (Generic Attribute Profile) হল BLE-এ একটি ডেটা বিনিময় প্রোটোকল যা Service → Characteristic → Descriptor ক্রমানুসার সংজ্ঞায়িত করে। GATT BLE ডিভাইস থেকে ডেটা পড়া, লেখা এবং বিজ্ঞপ্তি পাওয়ার জন্য ব্যবহৃত হয়।
Android 12-এর আগে, BLE স্ক্যানিং অবস্থান নির্ধারণের জন্য ব্যবহার করা যেত, তাই Google এই অনুমতিগুলি একত্রিত করেছিল। Android 12 থেকে, অবস্থান থেকে পৃথক একটি আলাদা BLUETOOTH_SCAN অনুমতি চালু করা হয়েছে।
Android-এ requestMtu() এবং iOS-এ maximumWriteValueLength-এর মাধ্যমে MTU বাড়ান। Connection Intervalও গতিকে প্রভাবিত করে — এটি যত ছোট, স্থানান্তর তত দ্রুত। সর্বোত্তম সংমিশ্রণ 10 গুণ পর্যন্ত উন্নতি প্রদান করে।
Bonding হল BLE ডিভাইসের মধ্যে একটি স্থায়ী সুরক্ষিত সংযোগ তৈরি করার পদ্ধতি। Bonding-এর পরে, এনক্রিপশন কীগুলি সংরক্ষিত হয়, এবং ডিভাইসগুলি বারবার অনুসন্ধান ছাড়াই স্বয়ংক্রিয়ভাবে সংযুক্ত হয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।