GATT profiles are a way to communicate between Bluetooth central and Peripheral. Lets assume I have an app that reads temperature from a sensor. My current setup is to have the phone act as central, the sensor attached to a bluetooth LE chip as peripheral.
So I communicate to bluetooth LE chip using this profile. In GATT profile declaration in chip, I will be defining a service and two characteristics. Two characteristics being
- Sensor enabler
- Temperature value
Sensor enabler has both read and write permissions, while temperature value has only read permission.
So in your app, whenever you want to read temperature value, you first write 0x01 to enabler characteristic and then read value from temperature value.
To identify the characteristics and services, bluetooth has the concept of UUIDs and handles. UUIDs are globally unique and handles are assigned in the chip.
Services encapsulate the characteristics available. So in a hierarchy you have, Profiles which can multiple services which in turn can have multiple characteristics.
To explain everything in an answer would be too much. Why don't you go through the basics here? I found these documents really useful.