Central คืออุปกรณ์ในสถาปัตยกรรม Bluetooth Low Energy ที่เริ่มต้นการสแกน สร้างการเชื่อมต่อ และจัดการการแลกเปลี่ยนข้อมูลกับอุปกรณ์รอบข้าง ในบริบทของการพัฒนามือถือ Central คือสมาร์ทโฟนหรือแท็บเล็ตที่ใช้ iOS หรือ Android ซึ่งเชื่อมต่อกับเซ็นเซอร์ BLE เครื่องติดตามฟิตเนส และอุปกรณ์เสริมอัจฉริยะ ตาม Bluetooth Core Specification 5.4 (2023) Central สามารถรองรับการเชื่อมต่อพร้อมกันได้สูงสุด 7 การเชื่อมต่อกับ Peripheral ที่แตกต่างกัน แม้ว่าข้อจำกัดจริงจะขึ้นอยู่กับผู้ผลิตชิปและเวอร์ชันของระบบปฏิบัติการ Core Bluetooth บน iOS และ android.bluetooth.le บน Android ให้ API ที่สมบูรณ์สำหรับการจัดการบทบาท Central
ประเด็นสำคัญ
Central คือไคลเอนต์ GATT ในสถาปัตยกรรม Bluetooth Low Energy ที่เริ่มต้นการสื่อสารทั้งหมด ไม่เหมือน Peripheral ที่รอการเชื่อมต่ออย่าง passive และโฆษณาบริการของตน Central จะสแกนคลื่นอากาศอย่าง active ค้นพบแพ็กเก็ตโฆษณาและเริ่มต้นการเชื่อมต่อ
โมเดลแบบไม่สมมาตร Central-Peripheral เป็นคุณลักษณะพื้นฐานของ BLE Central จัดการตรรกะการโต้ตอบ: ตัดสินใจว่าจะเชื่อมต่อกับอุปกรณ์ใด สำรวจบริการใด และอ่านเขียนคุณลักษณะใด Peripheral ทำหน้าที่เป็นเซิร์ฟเวอร์ข้อมูล — จัดเก็บบริการและคุณลักษณะแต่ไม่เริ่มต้นการเชื่อมต่อ
ตาม Bluetooth Core Specification 5.4 (2023) อุปกรณ์สามารถเป็นทั้ง Central และ Peripheral พร้อมกัน (บทบาทคู่) ตัวอย่างเช่น สมาร์ทโฟนสามารถเป็น Central สำหรับสายรัดฟิตเนสและเป็น Peripheral สำหรับสมาร์ทโฟนอีกเครื่องที่ถ่ายโอนไฟล์ อย่างไรก็ตาม การทำงานพร้อมกันในทั้งสองบทบาทจะเพิ่มการใช้พลังงานและความซับซ้อนในการจัดการการเชื่อมต่อ
ในระบบนิเวศการพัฒนามือถือ บทบาท Central เป็นสถานการณ์ที่พบบ่อยที่สุด แอพบนสมาร์ทโฟนค้นหา อุปกรณ์ BLE (เซ็นเซอร์ หูฟัง สายรัด) เชื่อมต่อและรับข้อมูล นักพัฒนาใช้ API ของระบบปฏิบัติการเพื่อทำงานกับ Central: CBCentralManager บน iOS, BluetoothLeScanner และ BluetoothGatt บน Android
การสแกน คือขั้นตอนแรกของการทำงานของ Central อุปกรณ์ฟังบนช่องสัญญาณวิทยุ BLE (37, 38, 39) เพื่อตรวจจับแพ็กเก็ตโฆษณาที่ Peripheral ส่งเป็นระยะ แพ็กเก็ตโฆษณาแต่ละรายการประกอบด้วยชื่ออุปกรณ์ รายการ Service UUID และข้อมูลที่กำหนดเอง
Central สามารถทำงานในโหมดสแกนสองโหมด: การสแกนแบบ passive (รับเฉพาะแพ็กเก็ตโฆษณา) และการสแกนแบบ active (ส่งคำขอสแกนเพื่อรับข้อมูลเพิ่มเติมผ่านการตอบสนองการสแกน) การสแกนแบบ passive ประหยัดพลังงานแต่ให้ข้อมูลน้อยกว่า การสแกนแบบ active ช่วยให้ได้รับข้อมูลที่สมบูรณ์ของแพ็กเก็ตโฆษณา รวมถึงชื่ออุปกรณ์และรายการบริการที่สมบูรณ์
การกรองตาม 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 ถูกสร้างขึ้นผ่านกระบวนการสร้างการเชื่อมต่อซึ่งรวมถึงการแลกเปลี่ยนพารามิเตอร์: ช่วงเวลาการเชื่อมต่อ ระยะหน่วง slave และ timeout การดูแล
ช่วงเวลาการเชื่อมต่อกำหนดว่า Central และ Peripheral แลกเปลี่ยนข้อมูลบ่อยเพียงใดหลังการเชื่อมต่อ ช่วงเวลาสามารถอยู่ระหว่าง 7.5 ms ถึง 4 วินาที ยิ่งช่วงเวลาสั้นลง ปริมาณงานยิ่งสูงขึ้น แต่การใช้พลังงานก็สูงขึ้นเช่นกัน ระยะหน่วง slave ช่วยให้ Peripheral ข้ามเหตุการณ์การเชื่อมต่อหลายรายการเพื่อประหยัดพลังงาน Timeout การดูแลคือระยะเวลาสูงสุดที่ไม่มีการตอบสนอง หลังจากนั้นจะถือว่าการเชื่อมต่อขาดหาย
Central รับผิดชอบในการ สิ้นสุดการเชื่อมต่อ หลังจากเสร็จสิ้นการแลกเปลี่ยนข้อมูล อุปกรณ์ BLE มักจะไม่คงการเชื่อมต่ออย่างถาวร — Central เชื่อมต่อ รับข้อมูล และตัดการเชื่อมต่อ ซึ่งเป็นรูปแบบมาตรฐานสำหรับเซ็นเซอร์ IoT: Central สแกน ค้นหาเซ็นเซอร์อุณหภูมิ เชื่อมต่อ อ่านค่า และตัดการเชื่อมต่อ
| พารามิเตอร์ | ช่วง | วัตถุประสงค์ | คำแนะนำ |
|---|---|---|---|
| ช่วงเวลาการเชื่อมต่อ | 7.5 ms – 4 s | ความถี่ในการแลกเปลี่ยนข้อมูล | 30–50 ms สำหรับสตรีมมิ่ง, 1–4 s สำหรับข้อมูลที่ไม่บ่อย |
| ระยะหน่วง slave | 0–499 เหตุการณ์ | การข้ามเหตุการณ์ Peripheral | 4–10 เพื่อประหยัดพลังงานเซ็นเซอร์ |
| Timeout การดูแล | 100 ms – 32 s | Timeout การสูญเสียการเชื่อมต่อ | 6–10 วินาทีสำหรับสถานการณ์ส่วนใหญ่ |
| MTU | 23–517 ไบต์ | ขนาดแพ็กเก็ต ATT | ขอค่าสูงสุดเมื่อเชื่อมต่อ |
Core Bluetooth คือเฟรมเวิร์กของ Apple สำหรับทำงานกับ BLE บน iOS และ macOS คลาส CBCentralManager ให้ API ที่สมบูรณ์สำหรับการนำเสนอบทบาท Central: การสแกน การเชื่อมต่อ การจัดการการเชื่อมต่อ การทำงานกับ Central บน iOS ขึ้นอยู่กับโมเดลตัวแทน: CBCentralManagerDelegate รับเหตุการณ์การเปลี่ยนแปลงสถานะ การค้นพบอุปกรณ์ และผลการเชื่อมต่อ
ขั้นตอนหลักสำหรับ Central บน iOS: เริ่มต้น 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 ให้ API BluetoothLeScanner สำหรับสแกนอุปกรณ์ BLE และ BluetoothGatt สำหรับจัดการการเชื่อมต่อ ตั้งแต่ Android 5.0 (API 21) เป็นต้นไป BluetoothLeScanner ได้แทนที่ startLeScan ที่เลิกใช้งานแล้ว API ต้องการสิทธิ์ BLUETOOTH, BLUETOOTH_ADMIN และ ACCESS_FINE_LOCATION (หรือ ACCESS_BACKGROUND_LOCATION สำหรับ Android 10+)
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) เป็นต้นไป การสแกนไม่สามารถเริ่มได้มากกว่า 5 ครั้งใน 30 วินาทีในแอปที่ไม่ได้ใช้ตำแหน่ง 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 กำหนด ขีดจำกัด 7 การเชื่อมต่อ สำหรับ Central หนึ่งตัว ในทางปฏิบัติ ข้อจำกัดขึ้นอยู่กับผู้ผลิตชิป: ชิป Nordic nRF52840 รองรับสูงสุด 20 การเชื่อมต่อ ในขณะที่อะแดปเตอร์ Bluetooth ราคาถูกบางตัวรองรับไม่เกิน 3–4
สาเหตุอาจแตกต่างกัน: เซ็นเซอร์ไม่ได้โฆษณา (ไม่อยู่ในโหมดโฆษณา) ตัวกรอง UUID เข้มงวดเกินไป Bluetooth ปิดอยู่บนสมาร์ทโฟน ขาดสิทธิ์ที่จำเป็น (ตำแหน่งบน Android) หรือเซ็นเซอร์อยู่นอกระยะ (แนะนำสูงสุด 10 เมตรในอาคาร)
ไม่จำเป็น สำหรับหลายสถานการณ์ จะใช้รูปแบบ เชื่อมต่อและอ่าน: Central สแกน เชื่อมต่อ อ่านข้อมูลที่จำเป็น และตัดการเชื่อมต่อ การเชื่อมต่ออย่างต่อเนื่องจำเป็นสำหรับข้อมูลสตรีมมิ่ง (ชีพจร, ECG) หรือการควบคุมอุปกรณ์แบบเรียลไทม์เท่านั้น
ใช้ การสแกนเป็นช่วง ด้วยหน้าต่างสแกน 30–50 ms และช่วงเวลาสแกน 500–1000 ms กรองอุปกรณ์ตาม UUID เพื่อประมวลผลเฉพาะแพ็กเก็ตโฆษณาที่เกี่ยวข้อง หยุดสแกนทันทีหลังจากพบ Peripheral ที่ต้องการ
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ