Files
esp-idf/examples/bluetooth/bluedroid/ble/gatt_server_service_table/README.md
T
2026-04-02 14:59:40 +08:00

5.6 KiB

Supported Targets ESP32 ESP32-C2 ESP32-C3 ESP32-C5 ESP32-C6 ESP32-C61 ESP32-H2 ESP32-H4 ESP32-S3

ESP-IDF Gatt Server Service Table Example

This example shows how to create a GATT service with an attribute table defined in one place. Provided API releases the user from adding attributes one by one as implemented in BLUEDROID. A demo of the other method to create the attribute table is presented in gatt_server_demo.

Please, check this tutorial for more information about this example.

Flow Diagram

    ┌──────────────────────────────────────────────────────────────────────────┐
    │                    GATT Server Initialization Flow                       │
    └──────────────────────────────────────────────────────────────────────────┘

    ┌───────────────────┐
    │   GATT Server     │
    └─────────┬─────────┘
              │
              │  1. Define Attribute Table (gatt_db[])
              │     ┌─────────────────────────────────────┐
              │     │  [0] Service Declaration            │
              │     │  [1] Char Declaration               │
              │     │  [2] Char Value                     │
              │     │  [3] CCCD (Notify Enable)           │
              │     │  ...                                │
              │     └─────────────────────────────────────┘
              │
              │  2. esp_ble_gatts_create_attr_tab()
              │     - Create all attributes at once
              │
              │  3. ESP_GATTS_CREAT_ATTR_TAB_EVT
              │     - Receive handle table
              │
              │  4. esp_ble_gatts_start_service()
              │
              │  5. Start Advertising
              │
              ▼
    ┌───────────────────┐                         ┌───────────────────┐
    │   GATT Server     │                         │   GATT Client     │
    │   (Advertising)   │                         │                   │
    └─────────┬─────────┘                         └─────────┬─────────┘
              │                                             │
              │                      Scan & Connect         │
              │ <───────────────────────────────────────────│
              │                                             │
              │  Service Discovery                          │
              │ ───────────────────────────────────────────>│
              │                                             │
              │  Read/Write/Notify Operations               │
              │ <──────────────────────────────────────────>│
              │                                             │
    ┌─────────┴─────────┐                         ┌─────────┴─────────┐
    │   GATT Server     │                         │   GATT Client     │
    └───────────────────┘                         └───────────────────┘

How to Use Example

Before project configuration and build, be sure to set the correct chip target using:

idf.py set-target <chip_name>

Hardware Required

  • A development board with ESP32/ESP32-C3/ESP32-H2/ESP32-C2/ESP32-S3 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.)
  • A USB cable for Power supply and programming

See Development Boards for more information about it.

Build and Flash

Run idf.py -p PORT flash monitor to build, flash and monitor the project.

(To exit the serial monitor, type Ctrl-].)

See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.

Example Output

I (0) cpu_start: Starting scheduler on APP CPU.
I (512) BTDM_INIT: BT controller compile version [1342a48]
I (522) system_api: Base MAC address is not set
I (522) system_api: read default base MAC address from EFUSE
I (522) phy_init: phy_version 4670,719f9f6,Feb 18 2021,17:07:07
I (942) GATTS_TABLE_DEMO: create attribute table successfully, the number handle = 8

I (942) GATTS_TABLE_DEMO: SERVICE_START_EVT, status 0, service_handle 40
I (962) GATTS_TABLE_DEMO: advertising start successfully

Troubleshooting

For any technical queries, please open an issue on GitHub. We will get back to you soon.