Bluetooth Low Energy (BLE) ในการพัฒนามือถือ: คืออะไร โปรโตคอล และทำงานอย่างไร

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

Bluetooth Low Energy (BLE) เป็นมาตรฐานการสื่อสารไร้สายที่ปรับให้เหมาะสมสำหรับการส่งข้อมูลปริมาณน้อยโดยใช้พลังงานต่ำที่สุด ตาม Bluetooth SIG, 2025 เทคโนโลยีนี้ถูกใช้ในอุปกรณ์มากกว่า 5 พันล้านเครื่องทั่วโลก GATT (Generic Attribute Profile) จัดระเบียบข้อมูลในลำดับชั้น Service → Characteristic → Descriptor ซึ่งเป็นพื้นฐานของแอปพลิเคชัน BLE ทั้งหมดสำหรับ iOS และ Android

ประเด็นสำคัญ

  • GATT — โปรโตคอลแลกเปลี่ยนข้อมูลใน Bluetooth Low Energy พร้อมลำดับชั้น Service → Characteristic → Descriptor
  • Core Bluetooth — เฟรมเวิร์กของ Apple สำหรับทำงานกับ BLE บน iOS โดยใช้ CBCentralManager และ CBPeripheral
  • BluetoothGatt — API หลักสำหรับการเชื่อมต่อ BLE บน Android ผ่าน BluetoothLeScanner
  • iBeacon — โปรโตคอลบีคอน BLE ของ Apple พร้อมการรองรับแบบเนทีฟผ่าน CLLocationManager บน iOS
  • Bonding — การเชื่อมต่อที่เข้ารหัสแบบถาวรซึ่งไม่ต้องสแกนและจับคู่ซ้ำ

Bluetooth Low Energy (BLE) คืออะไรและทำงานอย่างไร?

Bluetooth Low Energy (BLE) ทำงานบนโมเดลไคลเอนต์-เซิร์ฟเวอร์โดยมีสองบทบาท: Central (อุปกรณ์มือถือ) และ Peripheral (อุปกรณ์) Central สแกนคลื่นและเริ่มการเชื่อมต่อ ในขณะที่ Peripheral ส่งข้อมูล แตกต่างจาก Bluetooth แบบคลาสสิก BLE ไม่ได้ออกแบบมาสำหรับสตรีมเสียง — หน้าที่ของมันคือส่งแพ็กเก็ตขนาดเล็กโดยใช้พลังงานต่ำที่สุด ตาม Bluetooth SIG Core Specification 5.4 (2025) BLE รองรับความเร็วสูงสุด 2 Mbps โดยใช้กระแสไฟน้อยกว่า 15 mA ในโหมดแอคทีฟ

ลำดับชั้น GATT: Service, Characteristic, Descriptor

GATT (Generic Attribute Profile) กำหนดโครงสร้างข้อมูลของ Bluetooth Low Energy Service คือกลุ่มตรรกะของคุณลักษณะ (เช่น Heart Rate Service 0x180D) Characteristic คือจุดข้อมูลที่มีค่าเฉพาะ Descriptor คือข้อมูลเมตาของคุณลักษณะ รวมถึง CCCD สำหรับการจัดการการแจ้งเตือน แต่ละองค์ประกอบมี UUID — 16 บิตสำหรับโปรไฟล์ Bluetooth SIG มาตรฐาน หรือ 128 บิตสำหรับแบบกำหนดเอง

Bluetooth Low Energy ในแอปพลิเคชันมือถือใช้ลำดับชั้นนี้เพื่อจัดระเบียบการแลกเปลี่ยนข้อมูลระหว่างสมาร์ทโฟนและอุปกรณ์ต่อพ่วง ความเข้าใจที่ถูกต้องเกี่ยวกับ GATT เป็นพื้นฐานสำหรับการพัฒนาแอปพลิเคชัน BLE บนทั้งสองแพลตฟอร์ม นักพัฒนาต้องรู้ UUID ของบริการและคุณลักษณะของอุปกรณ์ รวมถึงคุณสมบัติของคุณลักษณะแต่ละอย่าง (read, write, notify, indicate)

Advertising Data และ Scan Response

อุปกรณ์ BLE ส่งแพ็กเก็ตโฆษณา (advertising packets) เพื่อการค้นหา Advertising Data ประกอบด้วยชื่ออุปกรณ์, UUID ของบริการ, RSSI และ Manufacturer Specific Data ขนาดของแพ็กเก็ตโฆษณาจำกัดที่ 31 ไบต์ สำหรับส่งข้อมูลเพิ่มเติม จะใช้ Scan Response — แพ็กเก็ตที่สองที่อุปกรณ์กลางร้องขอหลังจากการค้นหา

BLE บน iOS: Core Bluetooth, CBCentralManager, CBPeripheral

บน iOS เฟรมเวิร์ก Core Bluetooth จัดการ Bluetooth Low Energy CBCentralManager จัดการการสแกนและการเชื่อมต่อ CBPeripheral แสดงถึงอุปกรณ์ BLE ระยะไกล กระบวนการเป็นมาตรฐาน: เริ่มต้น CBCentralManager, ตรวจสอบสถานะ poweredOn, เริ่ม scanForPeripherals, เชื่อมต่อและค้นพบบริการ Core Bluetooth จัดการพลังงานของโมดูลวิทยุโดยอัตโนมัติ — ถ้าไม่ได้ใช้ BLE ก็จะปิด

BLE ในการพัฒนามือถือบน iOS ต้องคำนึงถึงโหมดพื้นหลัง โหมดพื้นหลังของ Core Bluetooth เปิดใช้งานผ่าน Capabilities ของโปรเจ็กต์ (Uses Bluetooth LE accessories) ในพื้นหลัง แอปสามารถรับการแจ้งเตือนจากคุณลักษณะได้ แต่การสแกนมีข้อจำกัด — ระบบจะเริ่มการสแกนใหม่เฉพาะเมื่ออุปกรณ์เคลื่อนที่ สำหรับ iBeacon การสแกนพื้นหลังทำงานได้อย่างแข็งขันมากขึ้นผ่าน CLLocationManager

ตัวอย่างการสแกน BLE ใน Swift

swift
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 เปิดอยู่บนอุปกรณ์มือถือหรือไม่ หลังจากการเริ่มต้นสำเร็จ การสแกนจะเริ่มขึ้น Callback didDiscover ถูกเรียกสำหรับแต่ละอุปกรณ์ที่พบ

การเชื่อมต่อและอ่านคุณลักษณะใน Core Bluetooth

หลังจากค้นพบอุปกรณ์ ต้องเรียก connect และ discoverServices CBPeripheralDelegate มีเมธอดสำหรับจัดการแต่ละขั้นตอน: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor แต่ละเมธอดเป็นแบบอะซิงโครนัส — ข้อมูลมาถึงผ่าน callback ของตัวแทน RSSI (Received Signal Strength Indicator) แสดงระดับสัญญาณ: ยิ่งค่าใกล้ 0 มากเท่าไร สัญญาณยิ่งแรง

BLE บน Android: BluetoothAdapter, BluetoothGatt, BluetoothLeScanner

บน Android Bluetooth Low Energy ถูกใช้งานผ่านแพ็กเกจ android.bluetooth BluetoothAdapter เป็นจุดเริ่มต้นสำหรับการดำเนินการ BLE ทั้งหมด BluetoothLeScanner เริ่มการสแกนด้วย callback ScanCallback หลังจากค้นพบอุปกรณ์ จะสร้าง BluetoothGatt — การเชื่อมต่อกับอุปกรณ์ต่อพ่วง BluetoothGattCallback จัดการเหตุการณ์: การเชื่อมต่อ, การค้นพบบริการ, การอ่านคุณลักษณะ, การเปลี่ยนแปลง RSSI

Bluetooth Low Energy ในแอปพลิเคชันมือถือบน Android ต้องได้รับอนุญาต BLUETOOTH_SCAN, BLUETOOTH_CONNECT และ ACCESS_FINE_LOCATION อย่างชัดเจน ตั้งแต่ Android 12 สิทธิ์ถูกแยกออกจากกัน: BLUETOOTH_SCAN สำหรับการสแกน, BLUETOOTH_CONNECT สำหรับการเชื่อมต่อ ACCESS_FINE_LOCATION จำเป็นสำหรับการสแกนอุปกรณ์บางประเภทเท่านั้น หากไม่มีสิทธิ์เหล่านี้ แอปจะไม่สามารถทำงานกับ BLE ได้

ตัวอย่างการสแกน BLE ใน Kotlin

kotlin
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 การกรองช่วยลดการใช้พลังงานและเร่งการค้นหาอุปกรณ์ที่ต้องการ

BluetoothGatt: การอ่านและการแจ้งเตือนบน Android

หลังจากสร้าง BluetoothGatt ผ่าน connectGatt แอปจะเรียก discoverServices BluetoothGattCallback ประกอบด้วย onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged เพื่อรับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงคุณลักษณะ ต้องเรียก setCharacteristicNotification กระบวนการนี้ต้องใช้ความระมัดระวัง: การดำเนินการ GATT แต่ละครั้งเป็นแบบอะซิงโครนัส และผลลัพธ์มาใน callback ที่แยกต่างหาก

iBeacon, Bonding และ Advertising Data ในระบบนิเวศ BLE

iBeacon คือเทคโนโลยีของ Apple สำหรับบีคอน BLE ที่ส่ง UUID, Major และ Minor อุปกรณ์บีคอน จะกระจายแพ็กเก็ตโฆษณา และแอปพลิเคชันมือถือจะระบุตำแหน่งและระยะทางตามข้อมูลนี้ บน iOS iBeacon รองรับแบบเนทีฟผ่าน CLLocationManager บน Android ต้องใช้ไลบรารีของบริษัทอื่น (เช่น AltBeacon หรือ Android iBeacon Library)

Bonding คือขั้นตอนการสร้างการเชื่อมต่อที่ปลอดภัยแบบถาวรระหว่างอุปกรณ์ BLE หลังจาก Bonding คีย์การเข้ารหัสจะถูกบันทึก และอุปกรณ์จะเชื่อมต่อโดยอัตโนมัติเมื่อเข้ามาใกล้กันอีกครั้ง บน iOS bonding ถูกจัดการโดยระบบโดยอัตโนมัติ บน Android — ผ่าน BluetoothDevice.createBond() Bonding มีความสำคัญสำหรับอุปกรณ์สวมใส่และเครื่องติดตามฟิตเนสที่ต้องการการเชื่อมต่อใหม่อย่างรวดเร็ว

แพ็กเก็ตโฆษณาและ Manufacturer Specific Data

Advertising Data เป็นกลไกการค้นหาที่สำคัญใน Bluetooth Low Energy ผู้ผลิตอุปกรณ์ สามารถเพิ่ม Manufacturer Specific Data ในแพ็กเก็ตโฆษณาเพื่อส่งข้อมูลที่กำหนดเอง รูปแบบแพ็กเก็ตประกอบด้วย Company Identifier (2 ไบต์) และข้อมูลตามต้องการ บน iOS CBCentralManager รับอาร์เรย์ของ UUID บริการเพื่อการกรอง — ซึ่งช่วยประหยัดแบตเตอรี่ บน Android ScanFilter ทำงานบนหลักการเดียวกัน

การเปรียบเทียบ iOS และ Android สำหรับการพัฒนา BLE

พารามิเตอร์iOS (Core Bluetooth)Android (BluetoothGatt)
ผู้จัดการCBCentralManagerBluetoothLeScanner
การเชื่อมต่อconnect(to:)connectGatt()
บริการdiscoverServices()discoverServices()
การอ่านreadValue(for:)readCharacteristic()
การแจ้งเตือนsetNotifyValue(_:for:)setCharacteristicNotification()
สิทธิ์อัตโนมัติBLUETOOTH_SCAN, BLUETOOTH_CONNECT
iBeaconCLLocationManager (เนทีฟ)AltBeacon / ไลบรารี

การปรับแต่ง BLE: MTU, Connection Interval และโหมดพื้นหลัง

MTU (Maximum Transmission Unit) คือขนาดสูงสุดของแพ็กเก็ตข้อมูล Bluetooth Low Energy หนึ่งแพ็กเก็ต โดยค่าเริ่มต้น MTU คือ 23 ไบต์ (3 ไบต์ส่วนหัว + 20 ไบต์ข้อมูล) การเพิ่ม MTU เป็น 512 ไบต์ช่วยเร่งการส่งข้อมูลอย่างมากเมื่อแลกเปลี่ยนการกำหนดค่าหรือบันทึก บน iOS maximumWriteValueLength แสดง MTU ที่มีอยู่ บน Android ใช้ requestMtu() เพื่อเพิ่ม MTU

Connection Interval คือความถี่ที่อุปกรณ์กลางสอบถามอุปกรณ์ต่อพ่วง ยิ่งช่วงห่างสั้น ความเร็วในการส่งยิ่งสูง แต่การใช้พลังงานก็มากขึ้นเช่นกัน ค่าทั่วไปอยู่ระหว่าง 7.5 ms ถึง 4 วินาที สำหรับเครื่องติดตามฟิตเนส 100 ms ก็เพียงพอ สำหรับเสียง — 7.5 ms BLE ในการพัฒนามือถือต้องมีความสมดุลระหว่างความเร็วในการส่งและอายุการใช้งานแบตเตอรี่ของอุปกรณ์

โหมดพื้นหลังบน iOS และ Android

iOS รองรับ BLE ในโหมดพื้นหลังผ่าน Background Modes แต่มีข้อจำกัด แอปในพื้นหลัง รับการแจ้งเตือนจากคุณลักษณะ แต่ไม่สามารถสแกนอย่างแข็งขันได้ ระบบจะเริ่มการสแกนใหม่เมื่อตำแหน่งของอุปกรณ์เปลี่ยนไป บน Android การสแกนพื้นหลังต้องใช้ Foreground Service พร้อมการแจ้งเตือนถาวร หากไม่มี ระบบมือถือจะหยุดกระบวนการเมื่อย่อแอป

คำแนะนำการปรับแต่งในทางปฏิบัติ

สำหรับการทำงาน BLE ที่เชื่อถือได้ในแอปพลิเคชันมือถือ ให้ปฏิบัติตามกฎเหล่านี้ ใช้ notify แทนการ polling — คุณลักษณะที่มีการแจ้งเตือนจะส่งข้อมูลเมื่อมีการเปลี่ยนแปลง ช่วยประหยัดแบตเตอรี่ ตั้งค่า MTU ที่เหมาะสมที่สุดเมื่อเริ่มการเชื่อมต่อ กรองอุปกรณ์ตาม UUID ของบริการเมื่อสแกน ตรวจสอบความเข้ากันได้ของสแต็ก BLE ในรุ่นต่างๆ — ผู้ผลิต (Xiaomi, Huawei, Samsung) ทำการเปลี่ยนแปลงที่ส่งผลต่อพฤติกรรมของ Bluetooth

คำถามที่พบบ่อย

BLE แตกต่างจาก Bluetooth แบบคลาสสิกอย่างไร?

Bluetooth Low Energy (BLE) ถูกปรับให้เหมาะสมสำหรับการส่งแพ็กเก็ตขนาดเล็กเป็นระยะด้วยการใช้พลังงานต่ำ Bluetooth แบบคลาสสิก ออกแบบมาสำหรับสตรีมเสียงและการส่งข้อมูลปริมาณมากอย่างต่อเนื่อง

GATT ใน Bluetooth Low Energy คืออะไร?

GATT (Generic Attribute Profile) คือโปรโตคอลแลกเปลี่ยนข้อมูลใน BLE ที่กำหนดลำดับชั้น Service → Characteristic → Descriptor GATT ใช้สำหรับอ่าน เขียน และรับการแจ้งเตือนจากอุปกรณ์ BLE

ทำไม Android ต้องขอสิทธิ์ ACCESS_FINE_LOCATION สำหรับ BLE?

ก่อน Android 12 การสแกน BLE สามารถใช้ระบุตำแหน่งได้ ดังนั้น Google จึงรวมสิทธิ์เหล่านี้เข้าด้วยกัน ตั้งแต่ Android 12 มีการแนะนำสิทธิ์ BLUETOOTH_SCAN แยกต่างหากโดยไม่เกี่ยวข้องกับตำแหน่ง

วิธีเพิ่มความเร็วในการถ่ายโอนข้อมูล BLE?

เพิ่ม MTU ผ่าน requestMtu() บน Android และ maximumWriteValueLength บน iOS Connection Interval ก็ส่งผลต่อความเร็วเช่นกัน — ยิ่งสั้น การถ่ายโอนยิ่งเร็ว การรวมกันที่เหมาะสมที่สุดช่วยเพิ่มได้ถึง 10 เท่า

Bonding ใน BLE คืออะไร?

Bonding คือขั้นตอนการสร้างการเชื่อมต่อที่ปลอดภัยแบบถาวรระหว่างอุปกรณ์ BLE หลังจาก Bonding คีย์การเข้ารหัสจะถูกบันทึก และอุปกรณ์จะเชื่อมต่อโดยอัตโนมัติโดยไม่ต้องค้นหาซ้ำ

สรุป

  • Bluetooth Low Energy — มาตรฐานการสื่อสารไร้สายสำหรับ IoT ด้วยการใช้พลังงานต่ำที่สุดและความเร็วสูงสุด 2 Mbps
  • GATT จัดระเบียบข้อมูลในลำดับชั้น Service → Characteristic → Descriptor พร้อม UUID สำหรับแต่ละองค์ประกอบ
  • Core Bluetooth — เฟรมเวิร์กของ Apple สำหรับ BLE บน iOS พร้อม CBCentralManager, CBPeripheral และโหมดพื้นหลัง
  • BluetoothGatt — API หลักของ Android พร้อม BluetoothAdapter, BluetoothLeScanner และสิทธิ์ BLUETOOTH_SCAN ที่ชัดเจน
  • iBeacon — เทคโนโลยีบีคอน BLE พร้อมการรองรับแบบเนทีฟบน iOS ผ่าน CLLocationManager
  • Bonding ช่วยให้เชื่อมต่อใหม่โดยอัตโนมัติหลังจากบันทึกคีย์การเข้ารหัส
  • Bluetooth Low Energy ในแอปพลิเคชันมือถือต้องคำนึงถึง MTU, Connection Interval และข้อจำกัดพื้นหลังของแต่ละแพลตฟอร์ม

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

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

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