Service UUID: คืออะไร รูปแบบ และการนำไปใช้

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-07-14 เวลาอ่าน: 8 นาที

Service UUID คือตัวระบุเฉพาะแบบ 16 หรือ 128 บิตของ Bluetooth Low Energy (BLE) ที่กำหนดบริการเชิงฟังก์ชันบนอุปกรณ์อย่างชัดเจน Bluetooth SIG ได้จัดสรร UUID 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 ได้จัดสรร UUID มาตรฐานมากกว่า 60 รายการ สำหรับบริการทั่วไป — Battery, Heart Rate, Device Information และอื่น ๆ
  • UUID 128 บิตถูกสร้างขึ้นโดยนักพัฒนาและรับประกัน ความเป็นเอกลักษณ์ระดับโลก ของบริการโดยไม่ต้องลงทะเบียนกับหน่วยงานกลาง
  • เมื่อสแกน อุปกรณ์ศูนย์กลางจะตรวจจับบริการของอุปกรณ์รอบข้างผ่าน 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 บิตช่วยประหยัด เวลาออกอากาศ ในแพ็กเก็ตโฆษณา เนื่องจากถูกส่งเป็น 2 ไบต์แทนที่จะเป็น 16 ไบต์ สำหรับอุปกรณ์ที่มีข้อจำกัดด้านขนาดแพ็กเก็ตโฆษณาที่เข้มงวด (สูงสุด 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

// 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: เซิร์ฟเวอร์ GATT Bluetooth

บน Android บริการถูกลงทะเบียนผ่าน BluetoothGattServer และ BluetoothGattService UUID ถูกส่งเป็นสตริงผ่าน java.util.UUID.fromString

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

การสแกนบริการตาม UUID

การสแกนตาม Service UUID ช่วยให้อุปกรณ์ศูนย์กลางค้นหาอุปกรณ์ที่ให้บริการที่ต้องการโดยไม่ต้องเชื่อมต่อกับอุปกรณ์รอบข้างทั้งหมดที่ตรวจพบ แพ็กเก็ตโฆษณา BLE สามารถมีรายการ UUID ของบริการ ซึ่งช่วยให้อุปกรณ์ศูนย์กลางกรองอุปกรณ์ในขั้นตอนการสแกน

ใน 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
    )
}

// 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 เช่นกัน ซึ่งเป็นวิธีที่มีประสิทธิภาพในการจำกัดขอบเขตการค้นหาโดยไม่ต้องเชื่อมต่อกับแต่ละอุปกรณ์

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 ของตัวเองและชุดคุณลักษณะของตัวเอง

เมื่อมีบริการหลายรายการ สิ่งสำคัญคือต้องพิจารณา ข้อจำกัดของแพ็กเก็ตโฆษณา แพ็กเก็ตโฆษณา BLE สามารถมีข้อมูลได้สูงสุด 31 ไบต์ หาก UUID ของบริการใช้พื้นที่มากเกินไป บางรายการอาจไม่พอดีกับแพ็กเก็ตโฆษณา ในกรณีนี้ จะใช้การตอบสนองการสแกน — แพ็กเก็ตที่สองที่ส่งตามคำขอของอุปกรณ์ศูนย์กลาง

ตาม 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 ตรงกัน อุปกรณ์ศูนย์กลางจะไม่สามารถแยกแยะบริการหนึ่งจากอีกบริการหนึ่งได้หากไม่มีข้อมูลเพิ่มเติม ความน่าจะเป็นของการชนกันของ UUID v4 แบบสุ่มนั้นน้อยมาก — ประมาณ 5.3 × 10^−37 ใช้ตัวสร้าง UUID แบบสุ่ม อย่าคัดลอก UUID จากตัวอย่าง

สรุป

  • Service UUID คือตัวระบุบริการ BLE ระดับโลกที่สามารถเป็น 16 บิต (มาตรฐาน) หรือ 128 บิต (กำหนดเอง)
  • Bluetooth SIG ได้จัดสรร UUID มาตรฐานมากกว่า 60 รายการ — ใช้เพื่อความเข้ากันได้กับอุปกรณ์จากผู้ผลิตรายอื่น
  • UUID 128 บิตถูกสร้างขึ้นโดยนักพัฒนาผ่าน UUID v4 และรับประกันความเป็นเอกลักษณ์โดยไม่ต้องมีทะเบียนกลาง
  • เมื่อสแกน อุปกรณ์ศูนย์กลางจะกรองอุปกรณ์ตาม Service UUID ซึ่งช่วยลดการใช้พลังงานและเร่งการค้นหา
  • อุปกรณ์หนึ่งเครื่องสามารถประกาศ บริการหลายรายการ ด้วย UUID ที่แตกต่างกัน — จำนวนถูกจำกัดด้วยหน่วยความจำและแพ็กเก็ตโฆษณา
  • ใน iOS และ Android บริการถูกประกาศผ่าน CBMutableService และ BluetoothGattService ตามลำดับ โดยระบุ UUID
  • การเลือก UUID ที่ถูกต้องส่งผลต่อ ความเข้ากันได้ ขนาดแพ็กเก็ตโฆษณา และการทำงานที่ถูกต้องของโปรไฟล์ GATT

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม