Bluetooth و Bluetooth Low Energy استانداردهای ارتباط بیسیم برای انتقال داده در فواصل کوتاه هستند. Bluetooth Classic (BR/EDR) یک کانال جریانی پایدار برای صدا و فایلها فراهم میکند، در حالی که BLE برای کار کممصرف با سنسورها و تجهیزات جانبی بهینه شده است. طبق دادههای Bluetooth SIG، 2025، سالانه بیش از ۵ میلیارد دستگاه با پشتیبانی BLE عرضه میشود — این استاندارد به اساس IoT، الکترونیک پوشیدنی و اکسسوارهای موبایل تبدیل شده است.
نکات اصلی
Bluetooth — یک استاندارد شبکه شخصی بیسیم (WPAN) است که در باند ISM 2.4 گیگاهرتز کار میکند و برای ارتباط دستگاهها در فاصله تا ۱۰۰ متر طراحی شده است. مشخصات IEEE 802.15.1 لایه فیزیکی و MAC را تعریف میکند، و پشته Bluetooth SIG پروفایلهای سطح بالاتر را برای سناریوهای خاص تعریف میکند: هدستهای صوتی (HSP)، انتقال فایل (OPP)، ورودی صفحه کلید (HID).
این استاندارد از نسخه ۴.۰ (۲۰۱۰) به دو شاخه تقسیم شده است: Bluetooth Classic (BR/EDR — Basic Rate / Enhanced Data Rate) و Bluetooth Low Energy (BLE، قبلاً Bluetooth Smart). Classic برای جریانهای پیوسته — تماسهای صوتی، موسیقی، فایلها طراحی شده است. BLE برای برنامههایی که دادهها در بستههای کوتاه با فواصل دهها ثانیه یا دقیقه منتقل میشوند — پالسسنجها، برچسبها، سنسورهای دما ایجاد شده است.
طبق دادههای Bluetooth SIG (۲۰۲۵)، ۹۹٪ گوشیهای هوشمند جدید هر دو نسخه را پشتیبانی میکنند، و اکوسیستم BLE شامل بیش از ۱۵ نوع پروفایل از Blood Pressure تا Environmental Sensing است.
انتخاب بین Classic و BLE به سناریو بستگی دارد: برای انتقال جریانی صدا فقط Classic مناسب است، برای پرسش از سنسور یک بار در ساعت — فقط BLE. BR/EDR از ۷۹ کانال با گام ۱ مگاهرتز و مدولاسیون فرکانس تطبیقی (AFH) استفاده میکند که مقاومت در برابر تداخل Wi-Fi را تضمین میکند.
| پارامتر | Bluetooth Classic (BR/EDR) | Bluetooth Low Energy (BLE) |
|---|---|---|
| سرعت انتقال | ۱–۳ مگابیت/ث (EDR) | ۱۲۵ کیلوبیت/ث – ۲ مگابیت/ث (LE 2M PHY) |
| جریان پیک | ۱۰–۳۰ میلیآمپر | ۵–۱۵ میلیآمپر |
| زمان ارسال | ~۱۰۰ میلیثانیه | ~۳ میلیثانیه |
| توپولوژی | Piconet (۱ master، تا ۷ slave) | Broadcaster / Observer / Peripheral / Central |
| پروفایلها | HFP, A2DP, HSP, SPP, OPP | مبتنی بر GATT (HRS, BLS, CTS و غیره) |
| دستگاههای معمول | هدستها، بلندگوها، دستگاههای hands-free خودرو | دستبندهای تناسباندام، برچسبها، پالسسنجها، سنسورهای IoT |
| سازگاری | در سطح فیزیکی با BLE سازگار نیست | تراشههای دوحالته هر دو پشته را پشتیبانی میکنند |
BLE 5.x LE Coded PHY را برای افزایش برد تا ۱ کیلومتر (در فضای باز) و LE Audio با کدک LC3 اضافه کرد — نسخه جدید به تدریج مرز بین Classic و BLE را برای سناریوهای صوتی محو میکند.
پشته BLE به سه لایه تقسیم میشود: Controller (لایه فیزیکی و پیوند)، Host (L2CAP, ATT, GATT, Security Manager) و Application(پیادهسازی پروفایل در برنامه). این تقسیم به تولیدکننده تراشه اجازه میدهد Controller را در فریموئر پیادهسازی کند، و به توسعهدهنده اپلیکیشن موبایل — فقط با انتزاعات GATT کار کند.
لایه پیوند (LL) زمان ارسال را مدیریت میکند: دستگاه بین حالتهای Standby، Advertising، Scanning، Initiating و Connection جابجا میشود. در حالت Connected، Central و Peripheral در مورد connection interval — فرکانس تبادل بستههای داده توافق میکنند. فاصله معمول ۷٫۵–۱۰۰۰ میلیثانیه است؛ هر چه تبادل مکررتر باشد، پهنای باند بیشتر و مصرف انرژی بالاتر است.
Security Manager (SM) رمزنگاری AES-128 را با تبادل کلید از طریق پروتکل pairing پیادهسازی میکند. سه حالت متمایز میشود: Just Works (بدون وارد کردن PIN)، Passkey Entry (کد ۶ رقمی روی صفحه) و OOB (NFC یا QR). برای دستگاههای پوشیدنی معمولاً از Just Works و برای دستگاههای پزشکی از OOB با تأیید اضافی استفاده میشود.
طبق Bluetooth Core Specification ۵.۴ (۲۰۲۳)، زمان برقراری اتصال امن در حالت LE Secure Connections از ۳۰۰ میلیثانیه در connection interval ۳۰ میلیثانیه تجاوز نمیکند.
پروتکل ATT (Attribute Protocol) — مدل حمل و نقل پایهای که در آن سرور (دستگاه جانبی) ویژگیها را ذخیره میکند و مشتری (گوشی هوشمند) آنها را میخواند یا مینویسد. GATT (Generic Attribute Profile) سلسلهمراتبی را روی ATT میسازد: Service → Characteristic → Descriptor.
هر سرویس یک گروه منطقی از مشخصهها است که یک عملکرد دستگاه را توصیف میکند: Heart Rate Service (UUID 0x180D) شامل مشخصه Heart Rate Measurement (UUID 0x2A37) با Descriptor Client Characteristic Configuration (0x2902) است که اعلانها را مدیریت میکند. توسعهدهنده اپلیکیشن موبایل لیست سرویسها را از طریق discoverServices() دریافت میکند، سپس مشخصه مورد نظر را با UUID پیدا کرده و در اعلانها مشترک میشود.
BLE برای سرویسهای استاندارد Bluetooth SIG از UUID ۱۶ بیتی و برای سرویسهای سفارشی تولیدکننده از UUID ۱۲۸ بیتی استفاده میکند. به عنوان مثال، یک برچسب-ردیاب میتواند سرویس A000-… را با مشخصهای برای انتقال سطح شارژ باتری خود تعریف کند.
private val gattCallback = object BluetoothGattCallback() {
override fun onServicesDiscovered(
gatt: BluetoothGatt, status: Int
) {
val service = gatt.getService(UUID.fromString("0000180d-0000-1000-8000-00805f9b34fb"))
val char = service?.getCharacteristic(
UUID.fromString("00002a37-0000-1000-8000-00805f9b34fb")
)
gatt.setCharacteristicNotification(char, true)
}
override fun onCharacteristicChanged(
gatt: BluetoothGatt, char: BluetoothGattCharacteristic
) {
val heartRate = char.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, 1)
updateUi("نبض: $heartRate ضربان/دقیقه")
}
}
در مثال، برنامه سرویس Heart Rate را با UUID استاندارد Bluetooth SIG پیدا میکند، مشخصه اندازهگیری نبض را دریافت کرده و در اعلانهای آن مشترک میشود — با هر تغییر نبض، دستگاه جانبی دادهها را بدون درخواست صریح از Central ارسال میکند.
Advertising — مکانیزم کلیدی BLE است که در آن دستگاه Peripheral به طور دورهای بستههای پخش (advertising PDUs) را در سه کانال اولیه (۳۷، ۳۸، ۳۹) ارسال میکند. دستگاه مرکزی این کانالها را اسکن میکند، دادههای advertising را دریافت میکند و میتواند اتصال را آغاز کند.
بسته advertising حاوی تا ۳۱ بایت بار مفید است: پرچمها، سطح توان TX، نام محلی، UUID سرویسها، دادههای خاص تولیدکننده. این برای انتقال قرائت سنسور بدون برقراری اتصال کافی است — حالت Connectionless (نوع Broadcaster). برای انتقال مداوم داده (مثلاً دما هر دقیقه) از اتصال با connection interval تا ۱۰۰۰ میلیثانیه استفاده میشود.
در پلتفرم موبایل، اسکن از طریق startScan() (Android) یا scanForPeripherals() (iOS) راهاندازی میشود. فیلتر کردن بر اساس UUID سرویس اجازه میدهد انرژی برای پردازش همه دستگاههای قابل مشاهده هدر نرود — برنامه فقط برای برچسبها یا سنسورهای مورد نظر callback دریافت میکند.
import CoreBluetooth
class ScannerViewController: UIViewController {
private var centralManager: CBCentralManager!
override func viewDidLoad() {
centralManager = CBCentralManager(
delegate: self, queue: nil
)
}
func centralManagerDidUpdateState(central: CBCentralManager) {
if central.state == .poweredOn {
centralManager.scanForPeripherals(
withServices: nil, options: nil
)
}
}
func centralManager(
central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String : Any],
rssi RSSI: NSNumber
) {
if let name = advertisementData[CBAdvertisementDataLocalNameKey] {
print("دستگاه پیدا شد: \(name)")
}
}
}
پس از کشف دستگاه، Central connect() را با ارسال شیء CBPeripheral فراخوانی میکند. پارامترهای اتصال (interval, latency, supervision timeout) در سطح Link Layer توافق میشوند — توسعهدهنده مستقیماً آنها را مدیریت نمیکند، اما میتواند از طریق requestConnectionPriority در اندروید تأثیر بگذارد.
هر دو پلتفرم موبایل APIهای بومی برای کار با BLE ارائه میدهند. Core Bluetooth (iOS) از رویکرد تفویضی استفاده میکند: مدیر مرکزی عملیات را آغاز میکند و شیء جانبی نتایج را از طریق متدهای تفویضی گزارش میدهد. android.bluetooth (Android) بر روی رابطهای callback ساخته شده است و از عملیات GATT موازی با چندین دستگاه پشتیبانی میکند.
تفاوتهای کلیدی بین پلتفرمها:
طبق آزمایشهای Bluetooth SIG (۲۰۲۴)، زمان اتصال BLE گوشی هوشمند با دستبند تناسباندام به طور متوسط ۱۵۰–۳۰۰ میلیثانیه در Android و ۱۰۰–۲۵۰ میلیثانیه در iOS است — تفاوت به سیاستهای مدیریت ماژول رادیویی مربوط میشود.
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
class BleService {
final FlutterBluePlus fbp = FlutterBluePlus();
Future<void> scanAndConnect(String deviceName) async {
await fbp.startScan(timeout: Duration(seconds: 15));
await for (final result in fbp.scanResults) {
if (result.device.advName == deviceName) {
await fbp.stopScan();
await result.device.connect();
break;
}
}
}
}
توسعهدهنده Flutter یک رابط API یکپارچه دریافت میکند که در زیر آن flutter_blue_plus فراخوانیها را به android.bluetooth یا Core Bluetooth بومی ترجمه میکند. این رویکرد زمان توسعه برنامه برای کار با تجهیزات جانبی BLE در هر دو پلتفرم را کاهش میدهد.
سوالات متداول
Bluetooth Classic (BR/EDR) برای انتقال جریانی پیوسته — تماسهای صوتی، موسیقی، انتقال فایل طراحی شده است. BLE برای بستههای کوتاه داده با حداقل مصرف انرژی — سنسورها، برچسبها، ردیابهای تناسباندام بهینه شده است. Classic ۱۰–۳۰ میلیآمپر و BLE ۵–۱۵ میلیآمپر در پیک مصرف میکند.
در سطح فیزیکی آنها ناسازگار هستند — مدولاسیون و نقشه کانال متفاوت. با این حال، اکثر تراشههای مدرن دوحالته (dual-mode) هستند و هر دو پشته را پیادهسازی میکنند. گوشی هوشمند با تراشه دوحالته میتواند همزمان با هدست Classic و ردیاب BLE ارتباط برقرار کند.
connection interval فاصله زمانی بین دو بسته داده در یک اتصال برقرار شده است. مقدار از ۷٫۵ میلیثانیه تا ۴ ثانیه متغیر است. هر چه فاصله کمتر باشد، پهنای باند بیشتر و مصرف انرژی بالاتر است. برای سنسور دمایی که هر دقیقه یک بار قرائت میکند از فاصله ۱۰۰۰ میلیثانیه استفاده میشود.
Pairing فرآیند تبادل کلیدهای رمزنگاری بین Central و Peripheral است. BLE از سه روش پشتیبانی میکند: Just Works (بدون تأیید)، Passkey Entry (وارد کردن PIN روی صفحه) و OOB (تبادل از طریق NFC یا QR). پس از pairing، دستگاهها کلیدها را ذخیره میکنند (bonding) و در اتصال مجدد درخواست تأیید هویت مجدد نمیکنند.
متداولترینها: Heart Rate Profile (0x180D) برای پالسسنجها، Blood Pressure Profile (0x1810) برای فشارسنجها، Environmental Sensing (0x181A) برای سنسورهای دما و رطوبت، Battery Service (0x180F) برای سطح شارژ، Device Information (0x180A) برای مدل و شماره سریال.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید