Peripheral là thiết bị trong kiến trúc Bluetooth Low Energy quảng cáo dịch vụ của mình qua các gói advertising và chờ kết nối từ Central. Trong hệ sinh thái IoT, Peripheral thường là thiết bị có mức tiêu thụ điện thấp: cảm biến nhiệt độ, đèn thông minh, vòng đeo fitness, beacon. Bluetooth Core Specification 5.4 (2023) định nghĩa giao thức quảng cáo: Peripheral định kỳ gửi các gói advertising chứa tên thiết bị, danh sách dịch vụ và dữ liệu tùy chỉnh, trong khi Central quét các gói này và quyết định có kết nối hay không. Sau khi thiết lập kết nối, Peripheral hoạt động như một máy chủ GATT, cung cấp các dịch vụ và đặc tính để đọc và ghi.
Điểm chính
Peripheral là thiết bị BLE triển khai máy chủ GATT và quảng cáo khả năng của mình qua các kênh advertising. Không giống như Central chủ động tìm kiếm thiết bị, Peripheral thụ động chờ kết nối. Đây là mô hình bất đối xứng được tối ưu cho hiệu quả năng lượng của thiết bị chạy bằng pin.
Peripheral có thể ở nhiều chế độ: advertising (quảng cáo), connected (kết nối với Central), sleeping (ngủ với tắt quảng cáo). Ở chế độ advertising, Peripheral định kỳ gửi các gói dữ liệu ngắn với mức tiêu thụ điện tối thiểu. Sau khi kết nối, Peripheral chuyển sang chế độ connected, nơi nó trao đổi dữ liệu với Central theo khoảng kết nối đã thỏa thuận.
Theo Bluetooth Core Specification 5.4 (2023), thiết bị có thể chuyển đổi linh hoạt giữa vai trò Peripheral và Central, nhưng tại bất kỳ thời điểm nào, vai trò được cố định cho một kết nối đơn lẻ. Kịch bản điển hình: cảm biến IoT hoạt động liên tục như Peripheral, trong khi điện thoại thông minh quản lý kết nối như Central.
Nhà phát triển cần hiểu: Peripheral xác định dịch vụ và đặc tính nào có sẵn và quản lý quyền truy cập vào chúng. Cấu trúc máy chủ GATT trên Peripheral xác định dữ liệu mà Central có thể đọc và lệnh mà nó có thể ghi.
Advertising là cơ chế mà Peripheral thông báo sự hiện diện của mình. Peripheral gửi các gói advertising trên ba kênh chuyên dụng (37, 38, 39) với khoảng thời gian từ 20 ms đến 10,24 giây. Mỗi gói advertising chứa thông tin cố định và có thể bao gồm dữ liệu tùy chọn.
Có hai loại gói advertising: advertising PDU (gói chính) và scan response PDU (phản hồi yêu cầu từ Central). Gói chính chứa các trường bắt buộc: loại gói, địa chỉ người gửi, dữ liệu. Nếu Central gửi yêu cầu quét, Peripheral trả lời bằng một gói bổ sung chứa thông tin đầy đủ hơn — ví dụ, tên đầy đủ của thiết bị.
Các thông số advertising ảnh hưởng đến tốc độ phát hiện và mức tiêu thụ điện. Advertising interval là thời gian giữa các lần truyền gói. Khoảng càng ngắn, Central càng phát hiện thiết bị nhanh, nhưng Peripheral tiêu thụ càng nhiều điện. Khoảng được khuyến nghị: 100–1000 ms cho hầu hết các thiết bị.
| Thông số | Phạm vi | Ảnh hưởng | Khuyến nghị |
|---|---|---|---|
| Advertising Interval | 20 ms – 10,24 s | Tốc độ phát hiện, điện | 100–1000 ms để cân bằng |
| Advertising Channels | 37, 38, 39 | Độ tin cậy phát hiện | Cả 3 kênh bắt buộc |
| Công suất Tx | -20 – +10 dBm | Phạm vi, nhiễu | 0 dBm trong nhà, +4 dBm ngoài trời |
| Advertising Timeout | 0 – 180 giây | Thời gian quảng cáo | 0 (vô hạn) cho beacon |
Gói advertising BLE có giới hạn 31 byte cho advertising PDU và thêm 31 byte cho scan response. Bên trong gói, dữ liệu được tổ chức ở định dạng AD Structure (Advertising Data Structure): mỗi trường có loại (1 byte), độ dài (1 byte) và giá trị.
Các loại AD phổ biến nhất: Flags (0x01) — chế độ kết nối và phát hiện, Local Name (0x08 hoặc 0x09) — tên thiết bị, Service UUID List (0x02–0x07) — danh sách UUID dịch vụ, Manufacturer Specific Data (0xFF) — dữ liệu nhà sản xuất. Đóng gói dữ liệu đúng cách vào gói 31 byte là nhiệm vụ quan trọng đối với nhà phát triển thiết bị nhúng.
Đối với các thiết bị cần truyền nhiều dữ liệu hơn, extended advertising (BLE 5.0+) tăng kích thước gói advertising lên 251 byte và thêm các loại gói mới. Extended advertising cũng hỗ trợ các kênh PHY được mã hóa để tăng phạm vi lên đến 1 km ở khu vực mở.
Khi thiết kế gói advertising, hãy nhớ: càng nhiều dữ liệu trong gói advertising, khả năng xung đột với các thiết bị khác càng cao. Để phát hiện nhanh, chỉ nên đặt dữ liệu quan trọng (Service UUID) trong advertising PDU và dữ liệu bổ sung trong scan response.
Máy chủ GATT trên Peripheral chứa tất cả các dịch vụ và đặc tính mà Central có thể khám phá và tương tác. Sau khi kết nối, Central khám phá các dịch vụ, sau đó các đặc tính và tương tác với chúng qua giao thức GATT.
Peripheral với tư cách máy chủ GATT phải xử lý chính xác các yêu cầu từ Central: yêu cầu đọc, yêu cầu ghi, thông báo và chỉ thị. Mỗi yêu cầu đi qua bảng GATT, nơi mỗi thuộc tính (dịch vụ, đặc tính, bộ mô tả) tương ứng với Handle — địa chỉ 16 bit.
Nhà phát triển Peripheral xác định quyền truy cập cho mỗi thuộc tính: chỉ đọc, chỉ ghi, đọc và ghi, có hoặc không mã hóa. Đối với dữ liệu nhạy cảm (thông tin cá nhân, chỉ số y tế), nên bật mã hóa qua MITM Protection.
CBPeripheralManager là lớp Core Bluetooth để triển khai vai trò Peripheral trên iOS. Nó quản lý máy chủ GATT, công bố các dịch vụ và đặc tính và xử lý các yêu cầu từ Centrals. Không giống CBCentralManager, CBPeripheralManager không quét — nó chỉ quảng cáo và quản lý kết nối.
Các bước chính để triển khai Peripheral trên iOS: khởi tạo CBPeripheralManager, thêm dịch vụ qua add, bắt đầu quảng cáo qua startAdvertising, xử lý yêu cầu từ Centrals qua delegate CBPeripheralManagerDelegate.
import CoreBluetooth
class BLEPeripheralManager: NSObject, CBPeripheralManagerDelegate {
private var peripheralManager: CBPeripheralManager!
func startAdvertising() {
let advertisementData: [String: Any] = [
CBAdvertisementDataLocalNameKey: "BLE Sensor",
CBAdvertisementDataServiceUUIDsKey: [
CBUUID("180F")
]
]
peripheralManager.startAdvertising(advertisementData)
}
func peripheralManagerDidUpdateState(
_ peripheral: CBPeripheralManager
) {
if peripheral.state == .poweredOn {
startAdvertising()
}
}
}
iOS cho phép Peripheral hoạt động ở chế độ nền với khóa bluetooth-peripheral trong Background Modes. Ở chế độ nền, iOS có thể quảng cáo với tập dữ liệu hạn chế và quản lý kết nối. Đối với quảng cáo kéo dài (hơn 180 giây), hãy sử dụng tùy chọn CBAdvertisementDataWaitForResponseFromCentral để tiết kiệm điện.
Android cung cấp BluetoothLeAdvertiser để hoạt động ở vai trò Peripheral (từ API 21). API cho phép bắt đầu quảng cáo với các thông số có thể cấu hình: công suất phát, khoảng quảng cáo, dữ liệu gói. Android cũng hỗ trợ extended advertising (BLE 5.0) trên các thiết bị tương thích.
import android.bluetooth.le.*;
private BluetoothLeAdvertiser advertiser;
public void startPeripheral() {
BluetoothAdapter adapter =
BluetoothAdapter.getDefaultAdapter();
advertiser = adapter.getBluetoothLeAdvertiser();
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(
new ParcelUuid(
UUID.fromString("0000180F-0000-1000-8000-00805F9B34FB")
)
)
.build();
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER)
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
.build();
advertiser.startAdvertising(
settings, data, advertiseCallback
);
}
Trên Android, hỗ trợ Peripheral phụ thuộc vào nhà sản xuất và phiên bản hệ điều hành. Không phải tất cả thiết bị đều hỗ trợ BluetoothLeAdvertiser — hãy kiểm tra qua adapter.isMultipleAdvertisementSupported(). Từ Android 10, cần quyền BLUETOOTH_ADVERTISE cho vai trò Peripheral, cùng với yêu cầu runtime cho ứng dụng có target SDK 31+.
Hiệu suất năng lượng là lợi thế chính của BLE và Peripheral đóng vai trò quan trọng trong việc này. Thiết bị có thể chạy bằng pin CR2032 (220 mAh) trong hơn một năm nhờ mức tiêu thụ điện được tối ưu. Phần lớn thời gian, Peripheral ở chế độ ngủ với quảng cáo tắt, chỉ thức dậy để gửi gói advertising hoặc xử lý yêu cầu từ Central.
Mức tiêu thụ điện của Peripheral ở các chế độ khác nhau: chế độ ngủ (ngủ sâu) — 1–5 µA, không hoạt động với bộ định thời — 10–50 µA, advertising — 5–15 mA (khi truyền gói), connected — 5–10 mA (khi có sự kiện kết nối). Với khoảng advertising 1000 ms và thời gian gói 4 ms, dòng điện trung bình khoảng 50–100 µA.
Theo Texas Instruments Application Report (SWRA478, 2024), tối ưu khoảng advertising từ 100 ms xuống 1000 ms giảm mức tiêu thụ điện trung bình 90%. Tiết kiệm bổ sung đạt được nhờ slave latency (bỏ qua các sự kiện kết nối), giảm công suất Tx ở khoảng cách ngắn và tắt quảng cáo sau khi kết nối (connectable advertising).
Câu hỏi thường gặp
Có, thông qua cơ chế thông báo/chỉ thị. Mặc dù Central luôn là người khởi tạo kết nối, sau khi kết nối, Peripheral có thể gửi dữ liệu qua thông báo GATT mà không cần yêu cầu rõ ràng từ Central. Để làm được điều này, Central phải đăng ký trước qua CCCD.
Thời gian quảng cáo không bị giới hạn bởi thông số kỹ thuật, nhưng trong thực tế bị giới hạn bởi năng lượng pin. Trên iOS, Peripheral có thể quảng cáo ở chế độ nền tối đa 180 giây mỗi phiên mà không cần cài đặt thêm. Trên Android, quảng cáo có thể hoạt động vô hạn, nhưng làm giảm đáng kể tuổi thọ pin.
Tăng khoảng advertising (được khuyến nghị 500–1000 ms), sử dụng slave latency để bỏ qua các sự kiện kết nối, tắt quảng cáo sau khi kết nối và chọn công suất Tx tối thiểu đủ cho giao tiếp ổn định ở khoảng cách cần thiết.
Non-connectable advertising là chế độ mà Peripheral quảng cáo nhưng không chấp nhận yêu cầu kết nối. Nó được sử dụng cho các beacon chỉ truyền dữ liệu (ví dụ, mã nhận dạng cửa hàng) mà không thiết lập kết nối hai chiều. Nó tiết kiệm năng lượng so với connectable advertising.
Trong 31 byte, bạn có thể bao gồm: flags (3 byte), tên thiết bị (tối đa 28 byte ở dạng viết tắt), danh sách UUID dịch vụ (2–16 byte mỗi UUID), dữ liệu nhà sản xuất (tối đa 26 byte). Chiến lược tối ưu là đặt UUID dịch vụ trong advertising PDU để lọc và tên đầy đủ trong scan response.
Tổng kế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