Services, Characteristics, Descriptors and Declarations in Bluetooth BLE

Thuật ngữ

Khi chúng ta tương tác với thiết bị BLE (Bluetooth Low Energy), chúng ta tương tác với các phần tử Attribute (thuộc tính) cụ thể nào đó. Attribute có thể là Service (dịch vụ) , Characteristic (đặc tính) , Descriptor (mô tả) và Declaration (khai báo).

  1. Service: Dịch vụ - một hộp chứa các mục dữ liệu Bluetooth liên quan nhau về mặt logic (các đặc tính). Một Service có thể được coi là chủ sở hữu của các đặc tính bên trong nó.
  2. Characteristic: Đặc tính - đầu mục dữ liệu liên quan đến trạng thái cụ thể bên trong thiết bị hoặc có thể là một số trạng thái của môi trường mà thiết bị có thể đo bằng cảm biến.
  3. Descriptor: Mô tả - chứa thông tin và thuộc tính bổ sung cho Characteristic. Chúng có thể được sử dụng để mô tả các tính năng của Characteristic hoặc để kiểm soát các hành vi nhất định của Characteristic.
  4. Declaration: Khai báo - được sử dụng để phân tách các nhóm thuộc tính riêng biệt (in services and inside a service in characteristics).
  5. Property: Thuộc tính - mô tả những gì thiết bị khác (client) có thể thực hiện với một Characteristic qua Bluetooth. Các thao tác như READ, WRITE, NOTIFY hoặc INDICATE có được phép hay không.
  6. READ: Đọc - thao tác đọc giá trị của một Characteristic qua Bluetooth.
  7. WRITE: Ghi - thao tác thay đổi giá trị của một Characteristic qua Bluetooth.
  8. NOTIFY: Thông báo - thao tác đăng ký nhận cập nhật khi có sự thay đổi giá trị của một Characteristic qua Bluetooth.
  9. INDICATE: Chỉ thị - thao tác xác nhận khi Server nhận được request từ Client ứng với một Characteristic qua Bluetooth.

Cấu trúc thông tin trong thiết bị BLE

Khả năng của thiết bị BLE được xác định bởi các Service mà thiết bị BLE đó cung cấp. Về cơ bản, một Service là một vùng chứa các đầu mục dữ liệu khác nhau - từng mục dữ liệu này có thể được read (ví dụ: đọc giá trị cảm biến từ SensorTag) hoặc write (ví dụ: chúng ta có thể ghi một giá trị để định cấu hình cảm biến - như đặt động phạm vi cho cảm biến gia tốc kế).

Để hiểu về một thiết bị BLE, chúng ta cần nghiên cứu các Attribute của thiết bị đó; bắt đầu từ các Service để xác định cụm chức năng rồi đến Characteristic của từng Service để biết từng chức năng cụ thể trong cụm chức năng đó, cuối cùng là Descriptor để nắm các thông tin bổ sung cho Characteristic chứa nó.

Ví dụ về các Attribute thuộc một thiết bị BLE
2.49US $ 50% OFF|AT 09 Android IOS BLE 4.0 Bluetooth module for arduino CC2540 CC2541 Serial Wireless Module compatible HM 10|Integrated Circuits| - AliExpress
Smarter Shopping, Better Living! Aliexpress.com

Hoạt động của ThunderBoard Sense SensorTag được gói gọn (encapsulate) trong các Service sau:

  1. Generic Access Service - Dịch vụ truy cập chung ( UUID = 0x1800 );
  2. Generic Attribute Service -Dịch vụ thuộc tính chung ( UUID = 0x1801 );
  3. Device Information Service - Dịch vụ thông tin thiết bị ( UUID = 0x180A );
  4. Battery Service - Dịch vụ pin ( UUID = 0x180F );
  5. Environment Sensing Service - Dịch vụ Cảm biến Môi trường ( UUID = 0x181A );
  6. Power Management Service - Dịch vụ quản lý nguồn ( UUID = EC61A454-ED00-A5E8-B8F9-DE9EC026EC51 );
  7. Indoor Air Quality Service - Dịch vụ chất lượng không khí trong nhà ( UUID = EFD658AE-C400-EF33-76E7-91B00019103B );
  8. User Interface Service - Dịch vụ giao diện người dùng ( UUID = FCB89C40-C600-59F3-7DC3-5ECE444A401B );
  9. Automation IO Service - Dịch vụ IO tự động hóa ( UUID = 0x1815 )
  10. Acceleration Orientation Service - Dịch vụ Định hướng và Gia tốc ( UUID = A4E649F4-4BE5-11E5-885D-FEFF819CDC9F ).

Mã định danh của các loại Attribute

Từng Service, Characteristic và Descriptor phải được xác định bằng một mã định danh duy nhất (UUID). UUID có thể là giá trị 16 hoặc 128 bit. Ví dụ: Generic Access Service (được trình bày ở trên) có UUID trên giá trị 16 bit (0x1800) trong khi Acceleration Orientation Service (được trình bày ở trên) có UUID 128 bit (A4E649F4-4BE5-11E5-885D-FEFF819CDC9F).

Trong thiết bị Bluetooth, một Service có thể chứa một hoặc nhiều Characteristic. Một Service luôn cần có Characteristic. Một Characteristic có thể có hoặc không có Descriptor. Ngoài Descriptor thì một Characteristic còn chứa các Property (thuộc tính). Chúng giúp xác định các thao tác như READ, WRITE, NOTIFY hoặc INDICATE - ứng với Characteristic đó - có được phép hay không.

Đi vào chi tiết hơn, hãy xem lại thông tin về Acceleration Orientation Service Service bên trên (với UUID ngắn = 0x1815 và với UUID dài = 00001815-0000-1000-8000-00805F9B34FB). Nó có hai Characteristic. Cái đầu tiên với UUID_0 {0x2a56} và cái thứ hai với UUID_1 {0x2a56}. Characteristic đầu tiên sở hữu ba Descriptor, với UUID: 0x2902, 0x2904 và 0x2909 .Characteristic thứ hai chỉ sở hữu hai Descriptor với UUID: 0x2902 và 0x2909.

Các Characteristic UUID có thể được xác định trước - giống như các Characteristic được trình bày ở trên với UUID {0x2a56}. Các UUID được xác định trước này có các chức năng cụ thể được theo tiêu chuẩn Bluetooth BLE. Characteristic UUID được xác định theo tiêu chuẩn Bluetooth BLE luôn tuân theo các định dạng: (a) 0x2A[xx] - trong đó [xx] là hai giá trị hex và (b) 0x2B[yy] - trong đó [yy] là giá trị hex .

Descriptor là các loại thuộc tính đặc biệt mô tả cho một Characteristic. Chúng chứa các loại metadata khác nhau, dựa trên thông tin này, chúng bổ sung thông tin cho Characteristic mà chúng được liên kết. Client Characteristic Configuration Descriptor (viết tắt là CCCD) - là một Descriptor rất quan trọng - dựa trên Descriptor, các tin nhắn thông báo có thể được bật hoặc tắt. Hiện tại, các Descriptor chỉ sử dụng các UUID ngắn (16 bit). Số nhận dạng UUID của Descriptor luôn tuân theo định dạng: 0x290[y] - trong đó giá trị [y] là một số hex.

Một loại Attribute đặc biệt là Declaration. Các Declaration được sử dụng để phân tách các nhóm Attribute, giúp tiện xác định cái nào là Service, cái nào là Characteristic. Service Declaration luôn có UUID chuẩn là giá trị 0x2800. Characteristic Declaration có UUID tiêu chuẩn là giá trị 0x2803. Declaration luôn tuân theo định dạng: 0x280[z] - trong đó [z] giá trị là một số hex như sau {0, 1, 2, 3}.

Lấy ví dụ về Indoor Air Quality Service. Nó có ba Characteristic - được trình bày như trong hình trên. Một Service bắt đầu bằng Service Declaration (UUID = 0x2800) và mỗi Characteristic được tách biệt với nhau bằng một Characteristic Declaration (UUID = 0x2803). Tất cả các Characteristic UUID của Service này không được xác định theo tiêu chuẩn Bluetooth BLE - mà theo tiêu chuẩn sẽ có dạng 0x2A [xx]0x2AB [yy]. Characteristic thứ ba chỉ chứa một Descriptor - CCCD. Hai Characteristic đầu chỉ cho phép client thực hiện thao tác READ - [R] như trong hình.

Mình rất mong các bạn qua bài viết này đã có thể nắm được các thuật ngữ cơ bản được sử dụng trong BLE như Service, Characteristic, Descriptor, Property cũng như cấu trúc dữ liệu BLE. Nếu bạn còn có thắc mắc thì cứ bình luận trong phần bình luận cuối bài viết. Đừng quên đăng ký tài khoản để nhận các bài viết mới trong tương lai nhé!

P/S: Do board Arduino / ESP8266 không hỗ trợ BLE nên để kết nối các board mạch này với điện thoại di động (smartphone) qua kết nối BLE, bạn sẽ cần trang bị module mở rộng. Các loại module BLE phổ biến hiện tại là: AT-09 hoặc HM-10. Board ESP32 thì đã hỗ trợ sẵn BLE & Wifi rồi nên bạn sẽ không cần mua thêm module BLE nữa.

Bên dưới là link mua AT-09 giá tốt, freeship đến Việt Nam cho bạn nào cần nhé:

2.49US $ 50% OFF|AT 09 Android IOS BLE 4.0 Bluetooth module for arduino CC2540 CC2541 Serial Wireless Module compatible HM 10|Integrated Circuits| - AliExpress
Smarter Shopping, Better Living! Aliexpress.com