Central là thiết bị trong kiến trúc Bluetooth Low Energy khởi tạo quét, thiết lập kết nối và quản lý trao đổi dữ liệu với các thiết bị ngoại vi. Trong bối cảnh phát triển di động, Central là điện thoại thông minh hoặc máy tính bảng chạy iOS hoặc Android kết nối với cảm biến BLE, máy theo dõi sức khỏe và phụ kiện thông minh. Theo Bluetooth Core Specification 5.4 (2023), Central có thể hỗ trợ đồng thời tới 7 kết nối đồng thời với các Peripheral khác nhau, mặc dù giới hạn thực tế phụ thuộc vào nhà sản xuất chip và phiên bản hệ điều hành. Core Bluetooth trên iOS và android.bluetooth.le trên Android cung cấp API đầy đủ để quản lý vai trò Central.
Những điểm chính
Central là máy khách GATT trong kiến trúc Bluetooth Low Energy khởi tạo tất cả giao tiếp. Không giống như Peripheral thụ động chờ kết nối và quảng cáo dịch vụ của mình, Central chủ động quét sóng, phát hiện gói quảng cáo và khởi tạo kết nối.
Mô hình bất đối xứng Central-Peripheral là đặc điểm cơ bản của BLE. Central quản lý logic tương tác: quyết định kết nối với thiết bị nào, khám phá dịch vụ nào và đọc/ghi đặc tính nào. Peripheral hoạt động như máy chủ dữ liệu — lưu trữ dịch vụ và đặc tính nhưng không khởi tạo kết nối.
Theo Bluetooth Core Specification 5.4 (2023), một thiết bị có thể đồng thời là Central và Peripheral (vai trò kép). Ví dụ, điện thoại thông minh có thể là Central cho vòng đeo sức khỏe và là Peripheral cho một điện thoại thông minh khác đang truyền tệp. Tuy nhiên, hoạt động đồng thời ở cả hai vai trò làm tăng mức tiêu thụ năng lượng và độ phức tạp quản lý kết nối.
Trong hệ sinh thái phát triển di động, vai trò Central là kịch bản phổ biến nhất. Ứng dụng trên điện thoại thông minh tìm kiếm thiết bị BLE (cảm biến, tai nghe, vòng đeo), kết nối với chúng và nhận dữ liệu. Nhà phát triển sử dụng API hệ điều hành để làm việc với Central: CBCentralManager trên iOS, BluetoothLeScanner và BluetoothGatt trên Android.
Quét là giai đoạn đầu tiên trong hoạt động của Central. Thiết bị lắng nghe trên các kênh vô tuyến BLE (37, 38, 39) để phát hiện các gói quảng cáo mà Peripheral gửi định kỳ. Mỗi gói quảng cáo chứa tên thiết bị, danh sách UUID dịch vụ và dữ liệu tùy chỉnh.
Central có thể hoạt động ở hai chế độ quét: quét thụ động (chỉ nhận gói quảng cáo) và quét chủ động (gửi yêu cầu quét để nhận thêm dữ liệu qua phản hồi quét). Quét thụ động tiết kiệm năng lượng nhưng cung cấp ít thông tin hơn. Quét chủ động cho phép nhận dữ liệu đầy đủ của gói quảng cáo, bao gồm tên thiết bị và danh sách dịch vụ hoàn chỉnh.
Lọc theo UUID là một tối ưu hóa quan trọng. Central chỉ có thể quét các thiết bị có Service UUID cụ thể, bỏ qua phần còn lại. Điều này không chỉ tiết kiệm năng lượng mà còn đơn giản hóa logic ứng dụng: ủy quyền chỉ nhận được các thiết bị liên quan.
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
]
)
}
}
}
Quản lý kết nối là trách nhiệm chính của Central. Sau khi phát hiện Peripheral phù hợp, Central khởi tạo kết nối. Kết nối BLE được thiết lập thông qua quy trình thiết lập kết nối bao gồm trao đổi tham số: khoảng thời gian kết nối, độ trễ slave và thời gian chờ giám sát.
Khoảng thời gian kết nối xác định tần suất Central và Peripheral trao đổi dữ liệu sau khi kết nối. Khoảng thời gian có thể từ 7,5 ms đến 4 giây. Khoảng thời gian càng ngắn, thông lượng càng cao nhưng mức tiêu thụ năng lượng cũng càng lớn. Độ trễ slave cho phép Peripheral bỏ qua nhiều sự kiện kết nối để tiết kiệm năng lượng. Thời gian chờ giám sát là thời gian tối đa không có phản hồi, sau đó kết nối được coi là bị mất.
Central chịu trách nhiệm kết thúc kết nối sau khi hoàn tất trao đổi dữ liệu. Thiết bị BLE thường không duy trì kết nối vĩnh viễn — Central kết nối, lấy dữ liệu và ngắt kết nối. Đây là mẫu tiêu chuẩn cho cảm biến IoT: Central quét, tìm cảm biến nhiệt độ, kết nối, đọc giá trị và ngắt kết nối.
| Tham số | Phạm vi | Mục đích | Khuyến nghị |
|---|---|---|---|
| Khoảng thời gian kết nối | 7,5 ms – 4 s | Tần suất trao đổi dữ liệu | 30–50 ms cho luồng, 1–4 s cho dữ liệu không thường xuyên |
| Độ trễ slave | 0–499 sự kiện | Bỏ qua sự kiện Peripheral | 4–10 để tiết kiệm năng lượng cảm biến |
| Thời gian chờ giám sát | 100 ms – 32 s | Thời gian chờ mất kết nối | 6–10 giây cho hầu hết các kịch bản |
| MTU | 23–517 byte | Kích thước gói ATT | Yêu cầu tối đa khi kết nối |
Core Bluetooth là framework của Apple để làm việc với BLE trên iOS và macOS. Lớp CBCentralManager cung cấp API đầy đủ để triển khai vai trò Central: quét, kết nối, quản lý kết nối. Làm việc với Central trên iOS dựa trên mô hình ủy quyền: CBCentralManagerDelegate nhận các sự kiện thay đổi trạng thái, phát hiện thiết bị và kết quả kết nối.
Các bước chính cho Central trên iOS: khởi tạo CBCentralManager, kiểm tra trạng thái Bluetooth, bắt đầu quét, xử lý thiết bị được phát hiện qua ủy quyền, kết nối với Peripheral đã chọn, khám phá dịch vụ và đặc tính, trao đổi dữ liệu.
// Kết nối với Peripheral đã phát hiện
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// Giữ tham chiếu đến peripheral và kết nối
discoveredPeripheral = peripheral
central.connect(peripheral, options: nil)
}
// Kết nối thành công
func centralManager(
_ central: CBCentralManager,
didConnect peripheral: CBPeripheral
) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}
iOS giới hạn công việc BLE nền: ở chế độ nền, ứng dụng chỉ có thể quét với các khóa cụ thể trong Info.plist và các thiết bị đã kết nối có thể thông báo cho Central về thay đổi dữ liệu. Đối với các ứng dụng quan trọng (thiết bị y tế), hãy sử dụng Chế độ nền với khóa bluetooth-central.
Android cung cấp API BluetoothLeScanner để quét thiết bị BLE và BluetoothGatt để quản lý kết nối. Bắt đầu từ Android 5.0 (API 21), BluetoothLeScanner đã thay thế startLeScan cũ. API yêu cầu quyền BLUETOOTH, BLUETOOTH_ADMIN và ACCESS_FINE_LOCATION (hoặc ACCESS_BACKGROUND_LOCATION cho Android 10+).
import android.bluetooth.le.*;
import android.bluetooth.*;
private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;
// Cấu hình quét
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
// Bắt đầu quét
scanner.startScan(null, settings, new ScanCallback() {
@Override
public void onScanResult(
int callbackType,
ScanResult result
) {
BluetoothDevice device = result.getDevice();
// Kết nối với thiết bị
bluetoothGatt = device.connectGatt(
context, false, gattCallback
);
}
});
Trên Android, cần xem xét các giới hạn quét: bắt đầu từ Android 7 (API 24), quét không thể được bắt đầu quá 5 lần trong 30 giây ở các ứng dụng không sử dụng vị trí. Android 12+ yêu cầu quyền BLUETOOTH_SCAN, BLUETOOTH_CONNECT và ADVERTISE, cũng như yêu cầu thời gian chạy các quyền này.
Mức tiêu thụ năng lượng của Central cao hơn Peripheral do cần quét liên tục các kênh vô tuyến. Central nhận gói BLE, xử lý chúng, quản lý kết nối và thường thực hiện tính toán trên bộ xử lý ứng dụng. Theo Bluetooth SIG, quét tiêu thụ từ 30 mA đến 100 mA tùy thuộc vào chế độ.
Có một số chiến lược tiết kiệm năng lượng cho Central. Quét ngắt quãng là phương pháp hiệu quả nhất: Central quét trong các cửa sổ ngắn (cửa sổ quét) với thời gian tạm dừng dài (khoảng thời gian quét). Ví dụ, với cửa sổ quét 30 ms và khoảng thời gian quét 1000 ms, mức tiêu thụ năng lượng giảm 97% so với quét liên tục.
Tối ưu hóa bổ sung là lọc theo UUID. Central chỉ xử lý nhanh các gói quảng cáo liên quan, bỏ qua phần còn lại. Điều này giảm tải CPU và tăng tuổi thọ pin của thiết bị. Cũng nên dừng quét ngay sau khi tìm thấy thiết bị mong muốn và không duy trì kết nối lâu hơn cần thiết.
Câu hỏi thường gặp
Có, BLE hỗ trợ vai trò kép: thiết bị có thể đồng thời là Central cho một số thiết bị và Peripheral cho các thiết bị khác. Ví dụ, điện thoại thông minh đọc dữ liệu từ cảm biến (với tư cách Central) và đồng thời quảng cáo dịch vụ riêng (với tư cách Peripheral) để truyền dữ liệu đến thiết bị khác.
Đặc tả BLE xác định giới hạn 7 kết nối cho một Central. Trên thực tế, giới hạn phụ thuộc vào nhà sản xuất chip: chip Nordic nRF52840 hỗ trợ tới 20 kết nối, trong khi một số bộ điều hợp Bluetooth giá rẻ chỉ hỗ trợ 3–4 kết nối.
Nguyên nhân có thể khác nhau: cảm biến không quảng cáo (không ở chế độ quảng cáo), bộ lọc UUID quá nghiêm ngặt, Bluetooth bị tắt trên điện thoại thông minh, thiếu quyền cần thiết (vị trí trên Android) hoặc cảm biến ngoài phạm vi (khuyến nghị tới 10 mét trong nhà).
Không nhất thiết. Đối với nhiều kịch bản, mẫu kết nối-và-đọc được sử dụng: Central quét, kết nối, đọc dữ liệu cần thiết và ngắt kết nối. Kết nối liên tục chỉ cần thiết cho dữ liệu luồng (mạch, ECG) hoặc điều khiển thiết bị thời gian thực.
Sử dụng quét ngắt quãng với cửa sổ quét 30–50 ms và khoảng thời gian quét 500–1000 ms. Lọc thiết bị theo UUID để chỉ xử lý các gói quảng cáo liên quan. Dừng quét ngay sau khi tìm thấy Peripheral mong muốn.
Tóm tắt
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm