안녕하세요. 오늘은 BLE GAP에 대해 알아보겠습니다.
GAP(Generic Access Profile)은 기기가 서로 어떻게 찾고 연결하는지 관리를 합니다.
GAP는 프로파일 계층에서 최상위에 존재합니다.

GAP가 실제로 어떻게 사용하는지 ESP32와 스마트폰앱(nRF Connect)를 이용해서 알아보겠습니다.
ESP32에 넣은 예제는 "Bluedroid_Beacon" 입니다. 비콘으로 동작하는 펌웨어입니다.
FW : https://github.com/espressif/esp-idf/tree/master/examples/bluetooth/ble_get_started/bluedroid/Bluedroid_Beacon

스마트폰앱으로 보면 위의 그림처럼 나와있습니다.
- Device type : esp_bt_controller_mem_release결과와 Flags비트를 조합해서 표시
- Advertising type : 광고 PDU형식과 Controller PHY 설정으로 판단됨
앱에서 표시된 데이터들이 코드에서 어느부분이 매칭되는지 확인해보겠습니다.
| 표시 항목 | 값 | 설명 |
| Device type | LE only | esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT) |
| Advertising type | Legacy | esp_ble_gap_start_advertising(&adv_params); |
| Flags | LE General Discoverable, BR/EDR Not Supported | ESP_BLE_AD_TYPE_FLAG (0x01) = 0x06 |
| Complete Local Name | Bluedroid_Beacon | ESP_BLE_AD_TYPE_NAME_CMPL (0x09) |
| Tx Power Level | 9 dBm | ESP_BLE_AD_TYPE_TX_PWR (0x0A) = 0x09 |
| Appearance | [512] Generic Tag | ESP_BLE_AD_TYPE_APPEARANCE (0x19) = 0x0200 |
| LE Role | Only Peripheral Role supported | ESP_BLE_AD_TYPE_LE_ROLE (0x1C) = 0x00 |
| BLE Address | DC:DA:0C:22:A4:D2 | esp_ble_gap_get_local_used_addr() 에서 가져옴 |
| URI | https://espressif.com | ESP_BLE_AD_TYPE_URI (0x24) = URI_PREFIX_HTTPS (0x17) + "//espressif.com" |
가장 직관적인 Tx Power Level을 보겠습니다. 값은 9입니다.
AD types의 기본 포맷은 아래의 그림과 같습니다.
length, AD Type, AD Data입니다.

TX Power Level을 보면 아래와 같고 길이가 0x02이고 AD Type은 ESP_BLE_AD_TYPE_TX_PWR이고 데이터는 0x09입니다.
0x02, ESP_BLE_AD_TYPE_TX_PWR, 0x09,
ESP_BLE_AD_TYPE_TX_PWR은 0x0A입니다.
ESP_BLE_AD_TYPE_TX_PWR = 0x0A,
AD Type은 아래의 문서에 정의되어있습니다.
https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/Assigned_Numbers/out/en/Assigned_Numbers.pdf

다른 GAP 데이터들도 찾아보면 해당문서에 나와있것과 일치합니다.
////
BLE 이므로 광고를 계속하는데 아래의 데이터로 설정합니다.
20ms 주기로 광고를 합니다.
해당데이터도 문서에 정의되어있습니다. 해당 adv type 설명은 아래의 링크에 나와있습니다.
https://wowon.tistory.com/377

다음글에서는 GAP를 Sniffer로 측정해보겠습니다.
'지식 > 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 GATT 예시를 통해서 알아보기 (0) | 2025.11.10 |
| BLE GAP을 BLE Sniffer로 측정하기 (0) | 2025.11.08 |