안녕하세요. 오늘은 BLE GATT에 대해 알아보겠습니다.
GATT(Generic Attribute Profile)는 BLE에서 장치 간 데이터를 교환하기 위해 '서비스'와 '특성'구조로 정의된 통신프로토콜입니다.
GATT가 실제로 어떻게 사용하는지 ESP32와 스마트폰앱(nRF Connect)를 이용해서 알아보겠습니다.
ESP32에 넣은 예제는 "Bluedroid_GATT_Server" 입니다.
https://github.com/espressif/esp-idf/tree/master/examples/bluetooth/ble_get_started/bluedroid/Bluedroid_GATT_Server
스마트폰 앱으로 연결해서 GATT 서비스를 확인한 사진입니다.

각 서비스는 UUID(Universally Unique Identifier)로 구분이 됩니다. UUID의 역할은 데이터가 무엇인지 구분하기 위함입니다.
UUID는 아래의 문서에 정의되어있습니다.
https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/Assigned_Numbers/out/en/Assigned_Numbers.pdf
예시로, 앱에서 0x180D가 Heart Rate로 표시되어 있고, 문서에서도 동일하게 Heart Rate Service로 명시되어 있습니다.
UUID는 원래 128비트(16바이트) 이지만, 표준 UUID는 16비트로 축약하여 표현할 수 있습니다.
따라서 0x180D를 128비트 형식으로 확장하면, Bluetooth SIG에서 정의한 기본 포맷인
0000XXXX-0000-1000-8000-00805F9B34FB에 대입하여 최종적으로 0000180D-0000-1000-8000-00805F9B34FB가 됩니다.

사용자정의 UUID도 있습니다. Bluetooth SIG가 정해놓은 UUID외에 회사가 직접 만들어서 사용하는 128비트 UUID입니다. 해당 UUID는 정해진 포맷이 없습니다.
0x1801 UUID부터 알아보겠습니다.
BLE의 GATT구조(서비스/특성)를 관리하는 서비스입니다.
내부 데이터베이스가 바뀌면 Service Changed 특성으로 클라이언트에게 알립니다.
BLE 스택이 자동으로 추가하기때문에 FW에 명시적으로 넣지 않아도 거의 항상 존재합니다.

Service Changed는 GATT 구조 자체가 바뀔 때만 발생합니다.
여기서 나온 Service의 의미입니다.

Profile : BLE의 최상위 개념입니다. 한 기기의 기능묶음 전체 입니다.
Service : 실제 기능 단위입니다. 하나의 profile안에 여러 서비스가 있을 수 있습니다.(예:0x180D,0x1815)
Include : 한 서비스 안에 다른 서비스를 참조해서 같이 쓰는 기 능입니다.
Characteristic : 데이터 정의(틀)입니다.
Properties : 값에 대해 가능한 동작입니다. (Read/Write/Notify/Indicate등)
Value : 실제 데이터타 값입니다.
Descriptor : 부가정보입니다. (설명, Notify설정, 포맷 등)
0x1800은 Generic Access이고 BLE 장치의 기본 정보를 나타내는 서비스입니다.
장치이름, apperance, 연결방식 등 광고.연결 단계에서 필요한 기본 데이터를 제공합니다.
BLE기기라면 거의 무조건 포함됩니다.

0x2A00: 장치이름
0x2A01 : 장치의 외형 타입입니다. 해당기기가 어떤 종류인지 나타내는 코드입니다.
(ex : 0: unknow, 64: phone, 128: computer .....)
0x2AA6 : BLE장치가 랜덤주소를 실주소로 변환(해석)할 수 있는지 여부를 나타냅니다.
0x180D, 0x1815는 Heart Rate와 Automation IO를 나타냅니다.
Heart Rate는 앱에서 심박수관련 정보를 Read할수있고, Automation IO는 앱에서 OFF/ON를 write 할 수 있습니다.

앱에서 특정 동작이 수행될 경우, BLE 장비 측에서 해당 이벤트 로그가 발생하도록 구성되어 있습니다.

'지식 > BLE' 카테고리의 다른 글
| BLE ESP32 Bluedroid_Beacon 코드 분석하기 2편-코드흐름 (1) | 2025.11.25 |
|---|---|
| BLE ESP32 Bluedroid_Beacon 코드 분석하기 1편-전역변수 (0) | 2025.11.22 |
| BLE GATT를 Ble Sniffer로 측정하기 (0) | 2025.11.16 |
| BLE GAP을 BLE Sniffer로 측정하기 (0) | 2025.11.08 |
| BLE GAP 예시를 통해서 알아보기 (0) | 2025.11.02 |