BLE GATT Profile Workbench

Explore BLE services, characteristics, descriptors, ATT operations, CCCD subscriptions, and MTU limits.

animation
bluetooth
ble
protocols
short-range
gatt
Interactive BLE GATT animation showing client and server roles, attribute hierarchy, service discovery, Read, Write, Notify, Indicate, CCCD configuration, characteristic permissions, and ATT MTU payload limits.
Animation Bluetooth LE GATT ATT

BLE GATT Profile Workbench

Step through how a BLE client discovers a server's attribute database, reads and writes characteristics, enables the CCCD, and chooses Notify or Indicate while the ATT MTU limits each packet.

Role Focus Client reads server attributes
ATT PDU Read By Group Type
CCCD 0x0000 disabled
Value Budget 20 B notification
1

Map The Database

Services, characteristics, and descriptors are all ATT attributes with handles. Discovery finds the handles a client will use later.

2

Pick The Operation

Read pulls a value, Write configures the server, Notify pushes updates, and Indicate pushes with an ATT confirmation.

3

Enable Push First

The server cannot start GATT notifications or indications for a characteristic until the client writes the CCCD.

4

Check Size And Security

Characteristic properties say what is possible; permissions and MTU decide whether a specific transfer succeeds.

Service Discovery From Client To Server

The client discovers primary services first, then characteristics and descriptors so later packets can use handles instead of names.

Step 1 of 6
BLE GATT client and server attribute exchange A BLE client exchanges ATT packets with a server that stores services, characteristics, and descriptors as an attribute database. GATT Client usually phone or gateway ATT bearer Initiates requests GATT Server sensor or peripheral Attribute DB Stores values Discover Response Confirmation Attribute Hierarchy Heart Rate Profile Service: Heart Rate UUID 0x180D, handles 0x0010-0x0018 Characteristic: Measurement Value 0x0012, props Notify Descriptor: CCCD UUID 0x2902, value 0x0000 Service: Device Information UUID 0x180A, read-only identity Selected handle 0x0012 Server value 18 B sensor value ATT frame view Opcode 0x10, start handle 0x0001, end handle 0xFFFF, type 0x2800 ATT_MTU 23 B, current value capacity 20 B for Notify/Indicate/Write
Client Find handles
ATT Packet Read By Group Type
Server Return services

BLE GATT Quick Reference

Use these cards as the compact memory aid after interacting with the workbench.

01

Client Starts Most Traffic

The GATT client sends ATT requests, commands, and confirmations. The server stores the attribute database and sends responses or server-initiated value updates.

02

Handles Are Runtime Addresses

Discovery maps UUIDs to handles. Later packets usually target handles because they are compact and unambiguous inside that connection.

03

Services Group Characteristics

A primary service such as 0x180D Heart Rate contains characteristics such as 0x2A37 Heart Rate Measurement.

04

Descriptors Add Metadata

Descriptors can describe format, name, valid range, or client configuration. The CCCD 0x2902 enables Notify or Indicate.

05

Notify Has No ATT Confirmation

Notification is efficient for frequent values. Indication adds an ATT confirmation when the application needs an explicit received signal.

06

MTU Limits Each ATT PDU

With the default 23 byte ATT_MTU, Notify, Indicate, and Write Request carry up to 20 value bytes in this teaching model.

07

Properties Are Not Permissions

A characteristic can advertise Read or Write while still requiring encryption, authentication, or authorization before access succeeds.

08

Use Assigned UUIDs Carefully

Bluetooth SIG 16-bit UUIDs are assigned numbers. Custom services should use implementer-controlled 128-bit UUIDs unless a short UUID is officially assigned.

Learning Support
  • Start with Discover: it explains why a client needs service and characteristic handles before normal data exchange.
  • Use Notify and Indicate back to back: both require CCCD setup, but only Indicate adds the confirmation step.
  • Increase the value size: once it exceeds the operation budget, the page shows why long values need Read Blob or long-write procedures.
  • Switch profiles: standard services teach interoperability, while the pump profile shows custom UUIDs and stronger permission requirements.
Technical Accuracy Notes
  • The animation shows GATT over ATT after a BLE connection already exists; advertising and link establishment are covered in separate animations.
  • GATT roles are independent of BLE central/peripheral roles, although phone-as-client and sensor-as-server is the common IoT pattern.
  • The page uses ATT_MTU - 3 as the teaching payload budget for notifications, indications, and simple write requests because the ATT opcode and attribute handle consume three bytes.
  • Notification lacks an ATT confirmation. That is different from the BLE link layer's own packet acknowledgements during a connection.
  • Custom UUID examples are 128-bit application UUIDs and are intentionally not shown as arbitrary 16-bit assigned-number values.