Service UUID: چیست، فرمت و کجا استفاده می‌شود

نویسنده: IT Sectr منتشر شده: 2026-07-14 زمان مطالعه: 8 دقیقه

Service UUID — یک شناسه 16 یا 128 بیتی Bluetooth Low Energy (BLE) است که سرویس عملکردی را روی دستگاه به طور یکتا تعریف می‌کند. Bluetooth SIG شناسه‌های استاندارد 16 بیتی را برای سرویس‌های رایج مانند Battery Service (0x180F)، Device Information (0x180A) و Heart Rate (0x180D) اختصاص داده است که سازگاری بین پلتفرمی را ساده می‌کند. طبق Bluetooth Core Specification 5.4 (2023)، سرویس‌های سفارشی توسعه‌دهندگان شخص ثالث باید از UUIDهای 128 بیتی استفاده کنند که فرمت آن‌ها بدون ثبت مرکزی، یکتایی جهانی را تضمین می‌کند. اعلام صحیح Service UUID اولین گام به سوی عملکرد صحیح سرور GATT روی دستگاه جانبی است.

نکات اصلی

  • Service UUID — شناسه سرویس BLE که می‌تواند 16 بیتی (استاندارد) یا 128 بیتی (سفارشی) باشد.
  • Bluetooth SIG بیش از 60 UUID استاندارد را برای سرویس‌های رایج — Battery، Heart Rate، Device Information و غیره اختصاص داده است.
  • UUIDهای 128 بیتی توسط توسعه‌دهنده تولید می‌شوند و یکتایی جهانی سرویس را بدون ثبت در مرجع مرکزی تضمین می‌کنند.
  • هنگام اسکن، Central سرویس‌های Peripheral را با Service UUID آن‌ها شناسایی می‌کند که سازگاری دستگاه‌ها را تعیین می‌کند.
  • یک سرور GATT می‌تواند چندین سرویس با UUIDهای مختلف اعلام کند — هر سرویس شامل ویژگی‌های خاص خود است.

Service UUID در BLE چیست؟

Service UUID — شناسه‌ای است که به سرویس GATT Bluetooth Low Energy برای شناسایی یکتای آن توسط سایر دستگاه‌ها اختصاص می‌یابد. در معماری BLE، هر سرویس یک گروه منطقی از ویژگی‌ها را نشان می‌دهد که با یک عملکرد مشترک متحد شده‌اند. به عنوان مثال، سرویس Battery Service شامل ویژگی Battery Level است که سطح فعلی شارژ باتری را منتقل می‌کند.

Bluetooth SIG (Special Interest Group) رجیستری از UUIDهای استاندارد 16 بیتی را مدیریت می‌کند که به رایج‌ترین سرویس‌ها اختصاص می‌یابند. این به دستگاه‌های تولیدکنندگان مختلف اجازه می‌دهد بدون تنظیمات قبلی، سرویس‌های یکدیگر را شناسایی کنند. ردیاب تناسب اندام هر برندی می‌تواند Heart Rate Service را با UUID 0x180D اعلام کند و هر تلفن هوشمندی متوجه می‌شود که این سرویس ضربان قلب است.

طبق Bluetooth Core Specification 5.4 (2023)، محدوده UUIDهای 16 بیتی (0x0000–0xFFFF) به دو بخش تقسیم می‌شود: از 0x0001 تا 0xFFFE — سرویس‌های استاندارد Bluetooth SIG، و 0xFFFF رزرو شده است. اگر توسعه‌دهنده به سرویس یکتایی نیاز دارد که در رجیستری SIG وجود ندارد، از UUID 128 بیتی استفاده می‌کند.

تفاوت بین UUID استاندارد و سفارشی فقط در طول نیست: UUIDهای 16 بیتی زمان رادیویی بسته تبلیغاتی را ذخیره می‌کنند، زیرا به جای 16 بایت به عنوان 2 بایت منتقل می‌شوند. برای دستگاه‌هایی با محدودیت‌های شدید اندازه بسته advertising (تا 31 بایت) این مسئله حیاتی است.

UUIDهای استاندارد و سفارشی

UUIDهای استاندارد 16 بیتی دسته‌بندی‌های اصلی دستگاه‌های BLE را پوشش می‌دهند: سنسورهای پزشکی، ردیاب‌های تناسب اندام، الکترونیک پوشیدنی و لوازم جانبی. اگر دستگاه یک عملکرد استاندارد را پیاده‌سازی می‌کند — به توسعه‌دهنده توصیه می‌شود برای حداکثر سازگاری از UUID مربوطه از رجیستری Bluetooth SIG استفاده کند.

در اینجا چند نمونه از UUIDهای استاندارد سرویس آورده شده است:

UUID (hex)نام سرویسکاربرد
0x1800Generic Accessمدیریت دسترسی، نام دستگاه، ظاهر خارجی
0x180ADevice Informationتولیدکننده، مدل، شماره سریال، نسخه نرم‌افزار
0x180DHeart Rateاندازه‌گیری ضربان قلب، موقعیت سنسور، انرژی باتری
0x180FBattery Serviceسطح شارژ باتری به درصد
0x181AEnvironmental Sensingدما، رطوبت، فشار، نور
0x181CUser Dataسن، وزن، قد، جنسیت، ضربان قلب در حالت استراحت

UUIDهای سفارشی 128 بیتی زمانی ضروری هستند که دستگاه عملکرد یکتایی ارائه می‌دهد. به عنوان مثال، تولیدکننده قفل هوشمند سرویس اختصاصی Lock Control را با UUID به شکل XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX ایجاد می‌کند. چنین UUID تضمین می‌کند که با سایر سرویس‌ها تداخل نداشته باشد، زیرا فضای مقادیر 128 بیتی عملاً پایان‌ناپذیر است.

فرمت UUID 128 بیتی

UUID 128 بیتی در قالب استاندارد UUID RFC 4122 نوشته می‌شود: هشت کاراکتر هگزادسیمال، خط تیره، چهار، خط تیره، چهار، خط تیره، چهار، خط تیره، دوازده کاراکتر. برای BLE از نسخه‌ای استفاده می‌شود که در آن بخش پایه UUID Bluetooth SIG بیت‌های ثابتی دارد.

Bluetooth SIG UUID پایه را تعریف می‌کند: 0000XXXX-0000-1000-8000-00805F9B34FB. برای سرویس‌های استاندارد 16 بیتی، مقدار UUID در این ماسک جایگزین می‌شود: به عنوان مثال، 0x180F به 0000180F-0000-1000-8000-00805F9B34FB تبدیل می‌شود. سرویس‌های سفارشی از UUID کاملاً مستقل تولید شده توسط توسعه‌دهنده استفاده می‌کنند.

هنگام ایجاد UUID سفارشی می‌توانید از هر مولد UUID (UUID v4) استفاده کنید. UUID v4 تصادفی 122 بیت آنتروپی را فراهم می‌کند که برخورد را عملاً غیرممکن می‌سازد. از نسخه تغییر یافته UUID پایه Bluetooth SIG برای سرویس‌های سفارشی استفاده نکنید — این کار مشخصات را نقض می‌کند.

نحوه اعلام سرویس با UUID در کد

اعلام سرویس با UUID در سمت Peripheral هنگام ایجاد سرور GATT انجام می‌شود. در iOS از Core Bluetooth و در Android از android.bluetooth.le استفاده می‌شود. بیایید هر دو روش را بررسی کنیم.

iOS: Core Bluetooth

در Swift سرویس از طریق CBMutableService با مشخص کردن UUID ایجاد می‌شود و سپس ویژگی‌ها از طریق CBMutableCharacteristic به آن اضافه می‌شوند.

swift
import CoreBluetooth

// UUID 16 بیتی استاندارد
let batteryServiceUUID = CBUUID("180F")

// UUID 128 بیتی سفارشی
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")

let service = CBMutableService(
    type: customServiceUUID,
    primary: true
)

// افزودن ویژگی‌ها
service.characteristics = [characteristic]

// انتشار سرویس از طریق peripheralManager
peripheralManager.add(service)

Android: Bluetooth GATT Server

در Android سرویس از طریق BluetoothGattServer و BluetoothGattService ثبت می‌شود. UUID به عنوان یک رشته در java.util.UUID.fromString منتقل می‌شود.

java
import android.bluetooth.*;

// 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
);

// افزودن ویژگی‌ها
service.addCharacteristic(characteristic);

// ثبت در سرور GATT
gattServer.addService(service);

اسکن سرویس‌ها بر اساس UUID

اسکن بر اساس Service UUID به Central اجازه می‌دهد دستگاه‌هایی را که سرویس مورد نیاز را ارائه می‌دهند بدون اتصال به تمام Peripheralهای شناسایی شده پیدا کند. بسته تبلیغاتی BLE می‌تواند حاوی لیستی از UUIDهای سرویس باشد که به Central امکان فیلتر کردن دستگاه‌ها را در مرحله اسکن می‌دهد.

در iOS، CBCentralManager دستگاه‌ها را با فیلتر بر اساس UUID سرویس اسکن می‌کند. این کار مصرف انرژی را کاهش می‌دهد و شناسایی دستگاه‌های مورد نیاز را تسریع می‌کند.

swift
import CoreBluetooth

let centralManager = CBCentralManager()

func scanForHeartRateMonitor() {
    let services: [CBUUID] = [
        CBUUID("180D") // Heart Rate Service
    ]
    centralManager.scanForPeripherals(
        withServices: services,
        options: nil
    )
}

// دلیگیت فقط دستگاه‌های Heart Rate Service را دریافت می‌کند
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // peripheral فقط دستگاه‌های با UUID 0x180D دارد
}

در Android فیلتر کردن بر اساس UUID نیز از طریق ScanFilter.Builder پشتیبانی می‌شود. این یک راه مؤثر برای محدود کردن دامنه جستجو بدون اتصال به هر دستگاه است.

java
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 و مجموعه ویژگی‌های خاص خود را دارد.

در صورت چندین سرویس، مهم است که محدودیت بسته تبلیغاتی در نظر گرفته شود. بسته advertising BLE می‌تواند تا 31 بایت داده داشته باشد. اگر UUIDهای سرویس فضای زیادی اشغال کنند، ممکن است برخی از آن‌ها در بسته تبلیغاتی جا نشوند. در این حالت از scan response استفاده می‌شود — بسته دومی که به درخواست Central ارسال می‌شود.

طبق Bluetooth Core Specification 5.4 (2023)، حداکثر تعداد سرویس‌های اولیه روی یک سرور GATT توسط مشخصات محدود نشده است، اما در عمل با حافظه دستگاه و الزامات عملکرد محدود می‌شود. برای دستگاه‌های تعبیه‌شده با 256 KB حافظه فلش، بیش از 5–10 سرویس توصیه نمی‌شود.

سوالات متداول

تفاوت UUID 16 بیتی با UUID 128 بیتی چیست؟

UUIDهای 16 بیتی توسط Bluetooth SIG برای سرویس‌های استاندارد رزرو شده‌اند و 2 بایت در بسته تبلیغاتی اشغال می‌کنند. UUIDهای 128 بیتی برای سرویس‌های سفارشی استفاده می‌شوند و 16 بایت اشغال می‌کنند. انتخاب به نوع سرویس بستگی دارد: عملکرد استاندارد از UUID 16 بیتی و عملکرد یکتا از UUID 128 بیتی استفاده می‌کند.

چگونه یک UUID 128 بیتی سفارشی برای سرویس BLE تولید کنیم؟

از UUID v4 استفاده کنید — یک UUID تصادفی که توسط ابزارهای آنلاین، دستور ترمینال uuidgen یا API زبان برنامه‌نویسی شما تولید می‌شود. مثال: UUID.fromString(UUID.randomUUID().toString()) در Java یا UUID() در Swift.

آیا نیاز به ثبت UUID سفارشی در Bluetooth SIG است؟

خیر، ثبت نام الزامی نیست. Bluetooth SIG فقط UUIDهای 16 بیتی را ثبت می‌کند. UUIDهای سفارشی 128 بیتی توسط توسعه‌دهنده به طور مستقل تولید می‌شوند و به دلیل فضای آدرس عظیم (2^128 ترکیب) یکتایی را تضمین می‌کنند.

آیا یک سرویس می‌تواند شامل چندین ویژگی باشد؟

بله، یک سرویس استاندارد GATT می‌تواند تعداد نامحدودی ویژگی داشته باشد. به عنوان مثال، Battery Service می‌تواند شامل Battery Level (0x2A19) و Battery Power State (0x2A1A) باشد. هر ویژگی UUID و مجموعه ویژگی‌های خاص خود را دارد.

اگر دو دستگاه از UUID سفارشی یکسان استفاده کنند چه اتفاقی می‌افتد؟

اگر UUID مطابقت داشته باشد، Central بدون اطلاعات اضافی نمی‌تواند یک سرویس را از دیگری تشخیص دهد. احتمال برخورد UUID v4 تصادفی بسیار ناچیز است — حدود 5.3 × 10^−37. از مولد UUID تصادفی استفاده کنید، نه کپی کردن UUID از مثال‌ها.

خلاصه

  • Service UUID — شناسه جهانی سرویس BLE که می‌تواند 16 بیتی (استاندارد) یا 128 بیتی (سفارشی) باشد.
  • Bluetooth SIG بیش از 60 UUID استاندارد اختصاص داده است — برای سازگاری با دستگاه‌های سایر تولیدکنندگان از آن‌ها استفاده کنید.
  • UUIDهای 128 بیتی توسط توسعه‌دهنده از طریق UUID v4 ایجاد می‌شوند و بدون ثبت مرکزی یکتایی را تضمین می‌کنند.
  • هنگام اسکن، Central دستگاه‌ها را بر اساس Service UUID فیلتر می‌کند که مصرف انرژی را کاهش داده و جستجو را تسریع می‌کند.
  • یک دستگاه می‌تواند چندین سرویس با UUIDهای مختلف اعلام کند — تعداد محدود به حافظه و بسته تبلیغاتی است.
  • در iOS و Android سرویس‌ها به ترتیب از طریق CBMutableService و BluetoothGattService با مشخص کردن UUID اعلام می‌شوند.
  • انتخاب صحیح UUID بر سازگاری، اندازه بسته تبلیغاتی و صحت کار نمایه GATT تأثیر می‌گذارد.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید