GATT
Всё, что смартфон читает из BLE-датчика — температуру, заряд батареи, настройки, — лежит на датчике в виде таблицы атрибутов, разложенной на сервисы и характеристики. Правила этой таблицы и обмена с ней задаёт GATT.
Обновлено Редакция GAW
GATT (Generic Attribute Profile) — часть спецификации Bluetooth LE, которая определяет, как устроены и как передаются данные устройства после соединения. Данные хранятся на сервере в виде атрибутов, а клиент их обнаруживает, читает и пишет; сам обмен идёт по протоколу атрибутов ATT. Роли GATT не связаны с ролями соединения: обычно периферийное устройство — датчик — сервер, а смартфон — клиент, но бывает и наоборот. Подробный обзор стека — в статье «Bluetooth Low Energy».
Иерархия
GATT раскладывает данные сервера в иерархию (Core 6.0, Vol 3, Part G, разд. 2.6.1):
- профиль — набор одного или нескольких сервисов для конкретного сценария применения;
- сервис — группа характеристик и, возможно, включённых других сервисов;
- характеристика — значение и необязательная информация о нём — дескрипторы.
Каждый элемент — атрибут с 16-битным номером (handle), типом (UUID) и правами доступа. Права задаёт спецификация верхнего уровня, и по протоколу их не узнать (Vol 3, Part F, разд. 3.2). Значение атрибута — не длиннее 512 байт.
Чтение, запись и уведомления
Клиент может прочитать или записать значение характеристики. Сервер может без запроса отправить клиенту значение двумя способами (Vol 3, Part F):
| Способ | Подтверждение | Особенность |
|---|---|---|
| Уведомление (notification) | нет | без управления потоком, можно отправлять в любой момент |
| Индикация (indication) | да | следующая — только после подтверждения предыдущей |
Клиент включает их записью в дескриптор конфигурации характеристики. Уведомления — основной способ передавать поток измерений с датчика, индикации — для данных, потеря которых недопустима.
ATT_MTU
За одну операцию передаётся не больше ATT_MTU байт. В LE по умолчанию ATT_MTU — 23 байта (Vol 3, Part G, разд. 5.2.1), и в уведомление помещаются только первые ATT_MTU − 3 = 20 байт значения: 1 байт занимает код операции и 2 — номер атрибута (Vol 3, Part F). Больше передают, договорившись о большем MTU процедурой обмена сразу после соединения. В стеке Bluedroid из ESP-IDF предел — 517 байт, по умолчанию — те же 23 (ESP_GATT_MAX_MTU_SIZE, ESP_GATT_DEF_BLE_MTU_SIZE). Реальная скорость зависит ещё от длины пакета канального уровня и интервала соединения.
До соединения устройство находят по рекламе; пример стека на микроконтроллере — ESP32-C3.
Частые вопросы
Чем сервис отличается от характеристики?
Сервис — группа связанных данных и функций, например «батарея» или «датчик сердечного ритма». Характеристика — конкретное значение внутри сервиса: уровень заряда, измеренный пульс, место ношения датчика. У характеристики есть значение и необязательные дескрипторы — например, дескриптор, которым клиент включает уведомления. Профиль — набор сервисов для одного сценария применения.
Чем уведомление отличается от индикации?
Оба позволяют серверу отправить клиенту значение без запроса, если клиент их включил. Уведомление идёт без подтверждения: управления потоком у него нет, и его можно отправить в любой момент. Индикация требует подтверждения от клиента, поэтому надёжнее, но медленнее: следующую индикацию отправляют только после подтверждения предыдущей.
Почему через BLE приходит только 20 байт?
По умолчанию ATT_MTU в LE равен 23 байтам, а в уведомлении 1 байт занимает код операции и 2 байта — номер атрибута: остаётся 20 байт значения. Больше передают, договорившись о большем MTU после соединения; в стеке Bluedroid ESP-IDF предел — 517 байт. Значение атрибута при этом не может быть длиннее 512 байт.
Источники
- Bluetooth SIG. Bluetooth Core Specification 6.0, Vol 3 Part G — Generic Attribute Profile (GATT) — разд. 2.6.1: верхний уровень иерархии — профиль из одного или нескольких сервисов; сервис — из характеристик или включений других сервисов; характеристика — значение и необязательная информация о нём (дескрипторы); всё хранится в атрибутах на сервере; разд. 5.2.1, табл. 5.1: ATT_MTU по умолчанию в LE — 23 байта
- Bluetooth SIG. Bluetooth Core Specification 6.0, Vol 3 Part F — Attribute Protocol (ATT) — разд. 3.2.9: значение атрибута не длиннее 512 байт; права доступа атрибута — чтение, запись, требования безопасности, задаются спецификацией верхнего уровня и не обнаруживаются по протоколу; уведомления и индикации — передача значения клиенту без запроса; уведомление не имеет ответа и управления потоком; в уведомлении передаются первые ATT_MTU − 3 байта значения
- Espressif Systems. ESP-IDF, components/bt/host/bluedroid/api/include/api/esp_gatt_common_api.h (master, октябрь 2026) — ESP_GATT_MAX_MTU_SIZE = 517, ESP_GATT_DEF_BLE_MTU_SIZE = 23
Нашли ошибку?
Смотрите также
- Bluetooth LE для разработчикаPHY 1M/2M/Coded, каналы 37–39, реклама, GAP и GATT, MTU, интервал соединения, скорость
- Реклама BLE (advertising)Широковещательные пакеты BLE на каналах 37–39 для обнаружения и маячков
- Интервал соединения BLEПериод событий соединения BLE и связанные с ним задержка и тайм-аут
- LE Coded PHYДальний режим Bluetooth LE с кодированием: 125 и 500 кбит/с
- ESP32-C3: выводы и GPIO22 GPIO: функции, свободные и занятые выводы, флеш-память, strapping, USB, JTAG, токи