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.
AnimationBluetooth LEGATTATT
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 FocusClient reads server attributes
ATT PDURead By Group Type
CCCD0x0000 disabled
Value Budget20 B notification
TryUse Heart rate monitor, leave ATT MTU at 23 B, select Notify, and switch CCCD off then on for an 18 B value.
ObserveCCCD changes from 0x0000 disabled to the notification setting, while Value Budget remains 20 B until ATT MTU increases.
ExplainServer updates require the characteristic property, sufficient link security, and a client CCCD write; the simple payload ceiling is ATT_MTU - 3 bytes.
Technical boundariesThe exchange begins after connection establishment and models simple ATT values; it omits L2CAP fragmentation, queued writes, caching behaviour, controller acknowledgements, and profile-specific validation.
Colour keybluetooth ble identitycurrent / primaryreference / datasuccesscautionerror / failure
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.
Control The Exchange
Choose a profile, operation, value size, and security state. Use Step to inspect each ATT/GATT move.
23 B default
1 B
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
ClientFind handles
ATT PacketRead By Group Type
ServerReturn services
What The Learner Should Notice
Current StepPrimary service discovery
The client asks for attributes of type Primary Service so it can learn service handle ranges.
Selected AttributeHeart Rate Measurement
The value handle is what later Read, Write, Notify, or Indicate packets refer to.
Transfer DiagnosisFits in one ATT value packet
With ATT_MTU 23, Notify and Indicate can carry 20 bytes after opcode and handle overhead.
Check before coding: properties advertise possible operations, but permissions can still require encryption or authenticated pairing.
Event Trace
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.