Central হলো Bluetooth Low Energy আর্কিটেকচারের একটি ডিভাইস যা স্ক্যানিং শুরু করে, সংযোগ স্থাপন করে এবং পেরিফেরাল ডিভাইসের সাথে ডেটা আদান-প্রদান পরিচালনা করে। মোবাইল ডেভেলপমেন্টের প্রসঙ্গে, Central হলো একটি স্মার্টফোন বা ট্যাবলেট যা iOS বা Android-এ চলে এবং BLE সেন্সর, ফিটনেস ট্র্যাকার এবং স্মার্ট আনুষাঙ্গিকগুলির সাথে সংযোগ স্থাপন করে। Bluetooth Core Specification 5.4 (2023) অনুসারে, Central একসাথে 7টি ভিন্ন Peripheral-এর সাথে সংযোগ সমর্থন করতে পারে, যদিও প্রকৃত সীমা চিপ প্রস্তুতকারক এবং OS সংস্করণের উপর নির্ভর করে। iOS-এ Core Bluetooth এবং Android-এ android.bluetooth.le Central ভূমিকা পরিচালনার জন্য সম্পূর্ণ API প্রদান করে।
মূল পয়েন্ট
Central হলো Bluetooth Low Energy আর্কিটেকচারের একটি GATT ক্লায়েন্ট যা সমস্ত যোগাযোগ শুরু করে। Peripheral-এর বিপরীতে, যা নিষ্ক্রিয়ভাবে সংযোগের জন্য অপেক্ষা করে এবং তার পরিষেবাগুলি বিজ্ঞাপন দেয়, Central সক্রিয়ভাবে ইথার স্ক্যান করে, বিজ্ঞাপন প্যাকেট আবিষ্কার করে এবং সংযোগ শুরু করে।
অসমমিত Central-Peripheral মডেল BLE-এর একটি মৌলিক বৈশিষ্ট্য। Central মিথস্ক্রিয়া যুক্তি পরিচালনা করে: এটি সিদ্ধান্ত নেয় কোন ডিভাইসের সাথে সংযোগ স্থাপন করতে হবে, কোন পরিষেবাগুলি অন্বেষণ করতে হবে এবং কোন বৈশিষ্ট্যগুলি পড়তে ও লিখতে হবে। Peripheral ডেটা সার্ভার হিসেবে কাজ করে — এটি পরিষেবা এবং বৈশিষ্ট্য সংরক্ষণ করে কিন্তু সংযোগ শুরু করে না।
Bluetooth Core Specification 5.4 (2023) অনুসারে, একটি ডিভাইস একসাথে Central এবং Peripheral (দ্বৈত ভূমিকা) হতে পারে। উদাহরণস্বরূপ, একটি স্মার্টফোন ফিটনেস ব্যান্ডের জন্য Central এবং অন্য একটি স্মার্টফোনের জন্য Peripheral হতে পারে যা ফাইল স্থানান্তর করে। তবে, উভয় ভূমিকায় একসাথে কাজ করলে শক্তি খরচ এবং সংযোগ ব্যবস্থাপনার জটিলতা বাড়ে।
মোবাইল ডেভেলপমেন্ট ইকোসিস্টেমে, Central ভূমিকা সবচেয়ে সাধারণ দৃশ্যকল্প। স্মার্টফোনের একটি অ্যাপ BLE ডিভাইস (সেন্সর, হেডফোন, ব্যান্ড) খুঁজে বের করে, সেগুলির সাথে সংযোগ স্থাপন করে এবং ডেটা গ্রহণ করে। ডেভেলপার Central-এর সাথে কাজ করার জন্য অপারেটিং সিস্টেম API ব্যবহার করে: iOS-এ CBCentralManager, Android-এ BluetoothLeScanner এবং BluetoothGatt।
স্ক্যানিং Central-এর কার্যক্রমের প্রথম ধাপ। ডিভাইসটি BLE রেডিও চ্যানেলে (37, 38, 39) শোনে যাতে Peripheral-এর periodically পাঠানো বিজ্ঞাপন প্যাকেট সনাক্ত করতে পারে। প্রতিটি বিজ্ঞাপন প্যাকেটে ডিভাইসের নাম, Service UUID-এর তালিকা এবং কাস্টম ডেটা থাকে।
Central দুটি স্ক্যানিং মোডে কাজ করতে পারে: প্যাসিভ স্ক্যানিং (শুধুমাত্র বিজ্ঞাপন প্যাকেট গ্রহণ) এবং অ্যাক্টিভ স্ক্যানিং (স্ক্যান প্রতিক্রিয়ার মাধ্যমে অতিরিক্ত ডেটা পেতে স্ক্যান অনুরোধ পাঠানো)। প্যাসিভ স্ক্যানিং শক্তি সঞ্চয় করে কিন্তু কম তথ্য দেয়। অ্যাক্টিভ স্ক্যানিং ডিভাইসের নাম এবং সম্পূর্ণ পরিষেবা তালিকা সহ বিজ্ঞাপন প্যাকেটের সম্পূর্ণ ডেটা পাওয়ার অনুমতি দেয়।
UUID দ্বারা ফিল্টারিং একটি গুরুত্বপূর্ণ অপ্টিমাইজেশন। Central শুধুমাত্র একটি নির্দিষ্ট Service UUID যুক্ত ডিভাইস স্ক্যান করতে পারে, বাকিগুলি উপেক্ষা করে। এটি কেবল শক্তি সঞ্চয় করে না বরং অ্যাপ্লিকেশন যুক্তিও সরল করে: ডেলিগেট শুধুমাত্র প্রাসঙ্গিক ডিভাইস গ্রহণ করে।
import CoreBluetooth
class BLECentralManager: NSObject, CBCentralManagerDelegate {
private var centralManager: CBCentralManager!
override init() {
super.init()
centralManager = CBCentralManager(
delegate: self,
queue: nil
)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
central.scanForPeripherals(
withServices: nil,
options: [
CBCentralManagerScanOptionAllowDuplicatesKey: false
]
)
}
}
}
সংযোগ ব্যবস্থাপনা Central-এর মূল দায়িত্ব। উপযুক্ত Peripheral আবিষ্কারের পর, Central সংযোগ শুরু করে। BLE সংযোগ সংযোগ স্থাপন প্রক্রিয়ার মাধ্যমে প্রতিষ্ঠিত হয় যাতে প্যারামিটার আদান-প্রদান অন্তর্ভুক্ত থাকে: সংযোগ ব্যবধান, স্লেভ লেটেন্সি এবং সুপারভিশন টাইমআউট।
সংযোগ ব্যবধান নির্ধারণ করে যে সংযোগের পর Central এবং Peripheral কতবার ডেটা আদান-প্রদান করে। ব্যবধান 7.5 ms থেকে 4 সেকেন্ড পর্যন্ত হতে পারে। ব্যবধান যত কম হবে, থ্রুপুট তত বেশি হবে, কিন্তু শক্তি খরচও তত বেশি হবে। স্লেভ লেটেন্সি Peripheral-কে শক্তি সঞ্চয়ের জন্য একাধিক সংযোগ ইভেন্ট এড়িয়ে যাওয়ার অনুমতি দেয়। সুপারভিশন টাইমআউট হলো প্রতিক্রিয়া ছাড়া সর্বোচ্চ সময়, যার পরে সংযোগটি হারিয়ে গেছে বলে মনে করা হয়।
Central ডেটা আদান-প্রদান সম্পন্ন হওয়ার পর সংযোগ শেষ করার জন্য দায়ী। BLE ডিভাইস সাধারণত স্থায়ীভাবে সংযোগ রাখে না — Central সংযোগ স্থাপন করে, ডেটা পায় এবং সংযোগ বিচ্ছিন্ন করে। এটি IoT সেন্সরের জন্য একটি মানক প্যাটার্ন: Central স্ক্যান করে, তাপমাত্রা সেন্সর খুঁজে পায়, সংযোগ স্থাপন করে, মান পড়ে এবং সংযোগ বিচ্ছিন্ন করে।
| প্যারামিটার | সীমা | উদ্দেশ্য | সুপারিশ |
|---|---|---|---|
| সংযোগ ব্যবধান | 7.5 ms – 4 s | ডেটা আদান-প্রদানের ফ্রিকোয়েন্সি | স্ট্রিমিং-এর জন্য 30–50 ms, বিরল ডেটার জন্য 1–4 s |
| স্লেভ লেটেন্সি | 0–499 ইভেন্ট | Peripheral ইভেন্ট এড়িয়ে যাওয়া | সেন্সর শক্তি সঞ্চয়ের জন্য 4–10 |
| সুপারভিশন টাইমআউট | 100 ms – 32 s | সংযোগ হারানোর টাইমআউট | অধিকাংশ দৃশ্যকল্পের জন্য 6–10 সেকেন্ড |
| MTU | 23–517 বাইট | ATT প্যাকেট আকার | সংযোগে সর্বোচ্চ অনুরোধ করুন |
Core Bluetooth হলো iOS এবং macOS-এ BLE-এর সাথে কাজ করার জন্য Apple-এর ফ্রেমওয়ার্ক। CBCentralManager ক্লাস Central ভূমিকা বাস্তবায়নের জন্য সম্পূর্ণ API প্রদান করে: স্ক্যানিং, সংযোগ, সংযোগ ব্যবস্থাপনা। iOS-এ Central-এর সাথে কাজ ডেলিগেট মডেলের উপর ভিত্তি করে: CBCentralManagerDelegate অবস্থা পরিবর্তন, ডিভাইস আবিষ্কার এবং সংযোগ ফলাফলের ইভেন্ট গ্রহণ করে।
iOS-এ Central-এর মূল ধাপ: CBCentralManager আরম্ভ করা, Bluetooth অবস্থা পরীক্ষা করা, স্ক্যানিং শুরু করা, ডেলিগেটের মাধ্যমে আবিষ্কৃত ডিভাইসগুলি পরিচালনা করা, নির্বাচিত Peripheral-এর সাথে সংযোগ স্থাপন করা, পরিষেবা এবং বৈশিষ্ট্য আবিষ্কার করা, ডেটা আদান-প্রদান করা।
// আবিষ্কৃত Peripheral-এর সাথে সংযোগ করুন
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// Peripheral-এর রেফারেন্স রাখুন এবং সংযোগ করুন
discoveredPeripheral = peripheral
central.connect(peripheral, options: nil)
}
// সফল সংযোগ
func centralManager(
_ central: CBCentralManager,
didConnect peripheral: CBPeripheral
) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}
iOS ব্যাকগ্রাউন্ড BLE কাজ সীমিত করে: ব্যাকগ্রাউন্ডে, একটি অ্যাপ শুধুমাত্র Info.plist-এ নির্দিষ্ট কী সহ স্ক্যান করতে পারে এবং সংযুক্ত ডিভাইসগুলি Central-কে ডেটা পরিবর্তন সম্পর্কে জানাতে পারে। গুরুত্বপূর্ণ অ্যাপ্লিকেশনের (চিকিৎসা ডিভাইস) জন্য, bluetooth-central কী সহ ব্যাকগ্রাউন্ড মোড ব্যবহার করুন।
Android BLE ডিভাইস স্ক্যান করার জন্য BluetoothLeScanner API এবং সংযোগ ব্যবস্থাপনার জন্য BluetoothGatt প্রদান করে। Android 5.0 (API 21) থেকে শুরু করে, BluetoothLeScanner পুরানো startLeScan-কে প্রতিস্থাপন করেছে। API-তে BLUETOOTH, BLUETOOTH_ADMIN এবং ACCESS_FINE_LOCATION অনুমতি (বা Android 10+-এর জন্য ACCESS_BACKGROUND_LOCATION) প্রয়োজন।
import android.bluetooth.le.*;
import android.bluetooth.*;
private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;
// স্ক্যানিং কনফিগার করুন
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
// স্ক্যানিং শুরু করুন
scanner.startScan(null, settings, new ScanCallback() {
@Override
public void onScanResult(
int callbackType,
ScanResult result
) {
BluetoothDevice device = result.getDevice();
// ডিভাইসে সংযোগ করুন
bluetoothGatt = device.connectGatt(
context, false, gattCallback
);
}
});
Android-এ, স্ক্যানিং সীমাবদ্ধতা বিবেচনা করা গুরুত্বপূর্ণ: Android 7 (API 24) থেকে শুরু করে, অবস্থান ব্যবহার করে না এমন অ্যাপে স্ক্যানিং 30 সেকেন্ডে 5 বারের বেশি শুরু করা যাবে না। Android 12+-এর জন্য BLUETOOTH_SCAN, BLUETOOTH_CONNECT এবং ADVERTISE অনুমতি, সেইসাথে এই অনুমতিগুলির রানটাইম অনুরোধ প্রয়োজন।
Central-এর শক্তি খরচ Peripheral-এর চেয়ে বেশি কারণ এটিকে ক্রমাগত রেডিও চ্যানেল স্ক্যান করতে হয়। Central BLE প্যাকেট গ্রহণ করে, সেগুলি প্রক্রিয়া করে, সংযোগ পরিচালনা করে এবং প্রায়শই অ্যাপ্লিকেশন প্রসেসরে গণনা করে। Bluetooth SIG-এর মতে, স্ক্যানিং মোডের উপর নির্ভর করে 30 mA থেকে 100 mA পর্যন্ত খরচ করে।
Central-এর জন্য শক্তি সঞ্চয়ের বেশ কয়েকটি কৌশল আছে। ব্যবধান স্ক্যানিং সবচেয়ে কার্যকর পদ্ধতি: Central দীর্ঘ বিরতি (স্ক্যান ব্যবধান) সহ ছোট উইন্ডোতে (স্ক্যান উইন্ডো) স্ক্যান করে। উদাহরণস্বরূপ, 30 ms-এর স্ক্যান উইন্ডো এবং 1000 ms-এর স্ক্যান ব্যবধানে, ধারাবাহিক স্ক্যানিং-এর তুলনায় শক্তি খরচ 97% কমে যায়।
একটি অতিরিক্ত অপ্টিমাইজেশন হলো UUID ফিল্টারিং। Central শুধুমাত্র প্রাসঙ্গিক বিজ্ঞাপন প্যাকেট দ্রুত প্রক্রিয়া করে, বাকিগুলি উপেক্ষা করে। এটি CPU লোড কমায় এবং ডিভাইসের ব্যাটারি জীবন বাড়ায়। পছন্দসই ডিভাইস খুঁজে পাওয়ার সাথে সাথে স্ক্যানিং বন্ধ করার এবং প্রয়োজনের বেশি সময় সংযোগ না রাখারও সুপারিশ করা হয়।
সচরাচর জিজ্ঞাসা
হ্যাঁ, BLE দ্বৈত ভূমিকা সমর্থন করে: একটি ডিভাইস একসাথে কিছু ডিভাইসের জন্য Central এবং অন্যদের জন্য Peripheral হতে পারে। উদাহরণস্বরূপ, একটি স্মার্টফোন সেন্সর থেকে ডেটা পড়ে (Central হিসেবে) এবং একই সাথে অন্য একটি ডিভাইসে ডেটা প্রেরণের জন্য নিজস্ব পরিষেবা বিজ্ঞাপন দেয় (Peripheral হিসেবে)।
BLE স্পেসিফিকেশন একটি Central-এর জন্য 7টি সংযোগের সীমা নির্ধারণ করে। বাস্তবে, সীমা চিপ প্রস্তুতকারকের উপর নির্ভর করে: Nordic nRF52840 চিপ 20টি সংযোগ পর্যন্ত সমর্থন করে, যখন কিছু সস্তা Bluetooth অ্যাডাপ্টার 3–4-এর বেশি সমর্থন করে না।
কারণ বিভিন্ন হতে পারে: সেন্সর বিজ্ঞাপন দিচ্ছে না (বিজ্ঞাপন মোডে নেই), UUID ফিল্টার খুব কঠোর, স্মার্টফোনে Bluetooth বন্ধ আছে, প্রয়োজনীয় অনুমতি অনুপস্থিত (Android-এ অবস্থান), বা সেন্সর সীমার বাইরে (ঘরের ভিতরে 10 মিটার পর্যন্ত সুপারিশ করা হয়)।
অগত্যা না। অনেক দৃশ্যকল্পের জন্য, সংযোগ-এবং-পড়া প্যাটার্ন ব্যবহার করা হয়: Central স্ক্যান করে, সংযোগ স্থাপন করে, প্রয়োজনীয় ডেটা পড়ে এবং সংযোগ বিচ্ছিন্ন করে। ধারাবাহিক সংযোগ শুধুমাত্র স্ট্রিমিং ডেটা (নাড়ি, ECG) বা রিয়েল-টাইম ডিভাইস নিয়ন্ত্রণের জন্য প্রয়োজন।
30–50 ms-এর স্ক্যান উইন্ডো এবং 500–1000 ms-এর স্ক্যান ব্যবধান সহ ব্যবধান স্ক্যানিং ব্যবহার করুন। শুধুমাত্র প্রাসঙ্গিক বিজ্ঞাপন প্যাকেট প্রক্রিয়া করতে UUID দ্বারা ডিভাইস ফিল্টার করুন। পছন্দসই Peripheral খুঁজে পাওয়ার সাথে সাথে স্ক্যানিং বন্ধ করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন