协议栈结构图
名词介绍
名词 | 介绍 |
---|---|
低功耗蓝牙(BLE) | 支持蓝牙协议4.0或更高的模块。主打低功耗,多用于物联网类型 |
经典蓝牙(BT) | 指支持蓝牙协议在4.0以下的模块。主打短距离数据高速传输,多用于蓝牙耳机等。 |
Basic Rate(BR) | 蓝牙基础速率技术,属于BT |
Enhanced Data Rate(EDR) | 蓝牙增强速率技术,是在BR技术基础上升级出来的,所以可以和BR共存,属于BT |
Alternate MAC/PHYs(AMP)) | 蓝牙核心系统的次要控制器,可切换的媒体访问控制器(Media Access Controller )和物理层(Physical Layer )属于BT |
Low Energy(LE) | 蓝牙低功耗技术,属于BLE |
BLE 广播
广播数据格式
广播类型如下
typedef enum {
ESP_BLE_AD_TYPE_FLAG = 0x01, /* relate to BTM_BLE_AD_TYPE_FLAG in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_16SRV_PART = 0x02, /* relate to BTM_BLE_AD_TYPE_16SRV_PART in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_16SRV_CMPL = 0x03, /* relate to BTM_BLE_AD_TYPE_16SRV_CMPL in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_32SRV_PART = 0x04, /* relate to BTM_BLE_AD_TYPE_32SRV_PART in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_32SRV_CMPL = 0x05, /* relate to BTM_BLE_AD_TYPE_32SRV_CMPL in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_128SRV_PART = 0x06, /* relate to BTM_BLE_AD_TYPE_128SRV_PART in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_128SRV_CMPL = 0x07, /* relate to BTM_BLE_AD_TYPE_128SRV_CMPL in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_NAME_SHORT = 0x08, /* relate to BTM_BLE_AD_TYPE_NAME_SHORT in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_NAME_CMPL = 0x09, /* relate to BTM_BLE_AD_TYPE_NAME_CMPL in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_TX_PWR = 0x0A, /* relate to BTM_BLE_AD_TYPE_TX_PWR in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_DEV_CLASS = 0x0D, /* relate to BTM_BLE_AD_TYPE_DEV_CLASS in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_SM_TK = 0x10, /* relate to BTM_BLE_AD_TYPE_SM_TK in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_SM_OOB_FLAG = 0x11, /* relate to BTM_BLE_AD_TYPE_SM_OOB_FLAG in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_INT_RANGE = 0x12, /* relate to BTM_BLE_AD_TYPE_INT_RANGE in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_SOL_SRV_UUID = 0x14, /* relate to BTM_BLE_AD_TYPE_SOL_SRV_UUID in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_128SOL_SRV_UUID = 0x15, /* relate to BTM_BLE_AD_TYPE_128SOL_SRV_UUID in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_SERVICE_DATA = 0x16, /* relate to BTM_BLE_AD_TYPE_SERVICE_DATA in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_PUBLIC_TARGET = 0x17, /* relate to BTM_BLE_AD_TYPE_PUBLIC_TARGET in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_RANDOM_TARGET = 0x18, /* relate to BTM_BLE_AD_TYPE_RANDOM_TARGET in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_APPEARANCE = 0x19, /* relate to BTM_BLE_AD_TYPE_APPEARANCE in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_ADV_INT = 0x1A, /* relate to BTM_BLE_AD_TYPE_ADV_INT in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_LE_DEV_ADDR = 0x1b, /* relate to BTM_BLE_AD_TYPE_LE_DEV_ADDR in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_LE_ROLE = 0x1c, /* relate to BTM_BLE_AD_TYPE_LE_ROLE in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_SPAIR_C256 = 0x1d, /* relate to BTM_BLE_AD_TYPE_SPAIR_C256 in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_SPAIR_R256 = 0x1e, /* relate to BTM_BLE_AD_TYPE_SPAIR_R256 in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_32SOL_SRV_UUID = 0x1f, /* relate to BTM_BLE_AD_TYPE_32SOL_SRV_UUID in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_32SERVICE_DATA = 0x20, /* relate to BTM_BLE_AD_TYPE_32SERVICE_DATA in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_128SERVICE_DATA = 0x21, /* relate to BTM_BLE_AD_TYPE_128SERVICE_DATA in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_LE_SECURE_CONFIRM = 0x22, /* relate to BTM_BLE_AD_TYPE_LE_SECURE_CONFIRM in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_LE_SECURE_RANDOM = 0x23, /* relate to BTM_BLE_AD_TYPE_LE_SECURE_RANDOM in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_URI = 0x24, /* relate to BTM_BLE_AD_TYPE_URI in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_INDOOR_POSITION = 0x25, /* relate to BTM_BLE_AD_TYPE_INDOOR_POSITION in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_TRANS_DISC_DATA = 0x26, /* relate to BTM_BLE_AD_TYPE_TRANS_DISC_DATA in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_LE_SUPPORT_FEATURE = 0x27, /* relate to BTM_BLE_AD_TYPE_LE_SUPPORT_FEATURE in stack/btm_ble_api.h */
ESP_BLE_AD_TYPE_CHAN_MAP_UPDATE = 0x28, /* relate to BTM_BLE_AD_TYPE_CHAN_MAP_UPDATE in stack/btm_ble_api.h */
ESP_BLE_AD_MANUFACTURER_SPECIFIC_TYPE = 0xFF, /* relate to BTM_BLE_AD_MANUFACTURER_SPECIFIC_TYPE in stack/btm_ble_api.h */
} esp_ble_adv_data_type;
类型 | 值 | 说明 |
---|---|---|
ESP_BLE_AD_TYPE_FLAG | 1 | 低功耗蓝牙定义了如下标识; Bit[0]: 有限可发现模式 Bit[1]:通用可发现模式; Bit[2]:不支持BR/EDR Bit[3]:设备同时支持LE和BR/EDR(控制器) Bit[4]:设备同时支持LE和BR/EDR(主机) |
ESP_BLE_AD_TYPE_16SRV_PART | 0x02 | 不完整的16位服务等级UUID列表 |
ESP_BLE_AD_TYPE_16SRV_CMPL | 0x03 | 16位服务类别UUID的完整列表 |
ESP_BLE_AD_TYPE_32SRV_PART | 0x04 | 不完整的32位服务类UUID列表 |
ESP_BLE_AD_TYPE_32SRV_CMPL | 0x05 | 32位服务类UUID的完整列表 |
ESP_BLE_AD_TYPE_128SRV_PART | 0x06 | 不完整的128位服务等级UUID列表 |
ESP_BLE_AD_TYPE_128SRV_CMPL | 0x07 | 完整的128位服务等级UUID列表 |
ESP_BLE_AD_TYPE_NAME_SHORT | 0x08 | 缩短的本地名称 |
ESP_BLE_AD_TYPE_NAME_CMPL | 0x09 | 完整的本地名称 |
ESP_BLE_AD_TYPE_TX_PWR | 0x0A | 发射功率等级 |
ESP_BLE_AD_TYPE_DEV_CLASS | 0x0D | 设备类别 |
0X0E | 简单配对哈希C | |
0X0E | 简单配对哈希C-192 | |
0X0F | 简单配对随机数R | |
0X0F | 简单配对随机发生器R-192 | |
ESP_BLE_AD_TYPE_SM_TK | 0x10 | 设备编号 |
ESP_BLE_AD_TYPE_SM_OOB_FLAG | 0x11 | 安全管理器带外标志 |
ESP_BLE_AD_TYPE_INT_RANGE | 0x12 | 从站连接间隔范围 |
ESP_BLE_AD_TYPE_SOL_SRV_UUID | 0x14 | 16位服务请求UUID列表 |
ESP_BLE_AD_TYPE_128SOL_SRV_UUID | 0x15 | 128位服务请求UUID列表 |
ESP_BLE_AD_TYPE_SERVICE_DATA | 0x16 | 服务数据 |
ESP_BLE_AD_TYPE_PUBLIC_TARGET | 0x17 | 公共目标地址 |
ESP_BLE_AD_TYPE_RANDOM_TARGET | 0x18 | 随机目标地址 |
ESP_BLE_AD_TYPE_APPEARANCE | 0x19 | 外观 |
ESP_BLE_AD_TYPE_ADV_INT | 0x1A | 广告间隔 |
ESP_BLE_AD_TYPE_LE_DEV_ADDR | 0x1b | LE蓝牙设备地址 |
ESP_BLE_AD_TYPE_LE_ROLE | 0x1c | LE角色 |
ESP_BLE_AD_TYPE_SPAIR_C256 | 0x1d | 简单配对哈希C-256 |
ESP_BLE_AD_TYPE_SPAIR_R256 | 0x1e | 简单配对随机数发生器R-256 |
ESP_BLE_AD_TYPE_32SOL_SRV_UUID | 0x1f | 32位服务请求UUID列表 |
ESP_BLE_AD_TYPE_32SERVICE_DATA | 0x20 | 服务数据-32位UUID |
ESP_BLE_AD_TYPE_128SERVICE_DATA | 0x21 | 服务数据-128位UUID |
ESP_BLE_AD_TYPE_LE_SECURE_CONFIRM | 0x22 | LE安全连接确认值 |
ESP_BLE_AD_TYPE_LE_SECURE_RANDOM | 0x23 | LE安全连接随机值 |
ESP_BLE_AD_TYPE_URI | 0x24 | URI |
ESP_BLE_AD_TYPE_INDOOR_POSITION | 0x25 | 室内定位 |
ESP_BLE_AD_TYPE_TRANS_DISC_DATA | 0x26 | 运输发现数据 |
ESP_BLE_AD_TYPE_LE_SUPPORT_FEATURE | 0x27 | LE支持的功能 |
ESP_BLE_AD_TYPE_CHAN_MAP_UPDATE | 0x28 | 频道地图更新指示 |
ESP_BLE_AD_MANUFACTURER_SPECIFIC_TYPE | 0xFF | 制造商特定数据 |
属性
属性协议格式
Attribute Handle | Attribute Type | Attribute Value | Attribute Permissions |
---|---|---|---|
句柄2字节 | 属性类型2-6字节 | 属性值0~512 | 权限 |
属性UUID分类
- 0X1800-0X26FF 用于服务类通用唯一识别码
- 0X2700-0X27C5 用于标识计量单位
- 0X2800-0X2803 用于区分属性类型(声明服务Declaration)
- 0X2900-0X290F 用于作特性描述(Description)
- 0X2A00-0x2BDC 用于区分特性类型
GATT属性类型
Attribute Type | UUID | Description |
---|---|---|
«Primary Service» | 0x2800 | Primary Service Declaration |
«Secondary Service» | 0x2801 | Secondary Service Declaration |
«Include» | 0x2802 | Include Declaration |
«Characteristic» | 0x2803 | Characteristic Declaration |
«Characteristic Extended Properties» | 0x2900 | Characteristic Extended Properties |
«Characteristic User Description» | 0x2901 | Characteristic User Description Descriptor |
«Client Characteristic Configuration» | 0x2902 | Client Characteristic Configuration Descriptor |
«Server Characteristic Configuration» | 0x2903 | Server Characteristic Configuration Descriptor |
«Characteristic Format» | 0x2904 | Characteristic Format Descriptor |
«Characteristic Aggregate Format» | 0x2905 | Characteristic Aggregate Format Descriptor |
UUID-0x2803
定义
特征声明(characteristic declaration)
格式
特征值被分为3部分,分别是:Properties
(属性)**、Characteristic Value Attribute
(特征值属性句柄)、特征的UUID**。
Handle | Type | Value | Permissions |
---|---|---|---|
0xNNNN | 0x2803 | 属性(1Byte)+特征值属性句柄(2Byte)+特征的UUID(16bit或者128bit) | 只读(Read Only) 无需认证(No Authentication) 无需授权(No Authorization) |
UUID-0x2904
定义
是特征值的一个可选项,用于定义特征值的描述,此定义载特征值之后的定义;<br
如果存在多个特征值描述,采用共存方式;
格式
特征值描述值被分为5部分,分别是:format
(格式), exponent
(指数),unit
(单位), name space
(命名空间),and description
(描述);
Handle | Type | Value | Permissions |
---|---|---|---|
0xNNNN | 0x2904 | 1.[Format]:1B 2.[Exponent]:1B 3.[Unit]:2B 4.[Name Space]:1B 5.[Description]:2B |
1.Read only 2.No Authentication, 3.NO authorization |
注意: Value 按照小端字节序计算 ; |
- Format定义见:Core_V4.2-3.3.3.5.2
- Exponent定义见 :Core_V4.2-3.3.3.5.3
- Unit定义见 :Core_V4.2-3.3.3.5.4, 具体见
- Name Space定义见 :Core_V4.2-3.3.3.5.5 具体见目前好在只支持0X01值
- Description定义见 :Core_V4.2-3.3.3.5.6具体见 Name Space文档的GATT Bluetooth Namespace Descriptors
0x2902(CCCD)
Value : 2Byte
- 0x0001:Notification
- 0x0002:Indication
- 0xFFF4:预留
Notification 和 Indication 的区别
- Notification 不需要应答,所以服务端发送的消息,它自己并不知道消息是否发送成功。
- Indication 需要客户端应答,每次服务端发送完数据都需要客户端发送应答消息。其中有一点很重要,如果你发送的 indication客户端没有应答,你是不能再次发送indication的;
Notification和 Indication需要客户端通过CCCD特征(Client Characteristic Configuration Descriptor)来配置,且服务端要有CCCD特征;
一些已知UUID
Service UUID
范围: 0x1800 - 0x1856
UUID | Name | 类型 | 说明 |
---|---|---|---|
0x1800 | Generic Access | GATT Service | 通用访问 |
0x1801 | Generic Attribute | GATT Service | 通用属性 |
0x1802 | Immediate Alert | GATT Service | 即时闹钟 |
0x1803 | Link Loss | GATT Service | 连接丢失 |
0x1804 | Tx Power | GATT Service | 发送功率 |
0x1805 | Current Time | GATT Service | 当前时间 |
0x1806 | Reference Time Update | GATT Service | 参考时间更新 |
0x1807 | Next DST Change | GATT Service | 下个日光节约时间(夏令时)更改 |
0x1808 | Glucose | GATT Service | 葡萄糖 |
0x1809 | Health Thermometer | GATT Service | 温度计 |
0x180A | Device Information | GATT Service | 设备信息 |
0x180D | Heart Rate | GATT Service | 心率 |
0x180E | Phone Alert Status | GATT Service | 手机报警状态 |
0x180F | Battery | GATT Service | 电池 |
0x1810 | Blood Pressure | GATT Service | 血压 |
0x1811 | Alert Notification | GATT Service | 闹钟推送 |
0x1812 | Human Interface Device | GATT Service | HID设备 |
0x1813 | Scan Parameters | GATT Service | 扫描参数 |
0x1814 | Running Speed and Cadence | GATT Service | 跑步速度、节奏 |
0x1815 | Automation IO | GATT Service | 自动化输入输出 |
0x1816 | Cycling Speed and Cadence | GATT Service | 循环速度、节奏 |
0x1818 | Cycling Power | GATT Service | 骑行能量 |
0x1819 | Location and Navigation | GATT Service | 定位及导航 |
0x181A | Environmental Sensing | GATT Service | 环境传感 |
0x181B | Body Composition | GATT Service | 身体组成 |
0x181C | User Data | GATT Service | 用户数据 |
0x181D | Weight Scale | GATT Service | 体重秤 |
0x181E | Bond Management | GATT Service | 设备绑定管理 |
0x181F | Continuous Glucose Monitoring | GATT Service | 动态血糖检测 |
0x1820 | Internet Protocol Support | GATT Service | 互联网协议支持 |
0x1821 | Indoor Positioning | GATT Service | 室内定位 |
0x1822 | Pulse Oximeter | GATT Service | 脉搏血氧计 |
0x1823 | HTTP Proxy | GATT Service | HTTP代理 |
0x1824 | Transport Discovery | GATT Service | 传输发现 |
0x1825 | Object Transfer | GATT Service | 对象传输 |
0x1826 | Fitness Machine | GATT Service | 健康设备 |
0x1827 | Mesh Provisioning | GATT Service | Mesh配置 |
0x1828 | Mesh Proxy | GATT Service | Mesh代理 |
0x1829 | Reconnection Configuration | GATT Service | 重连配置 |
0x183A | Insulin Delivery | GATT Service | 胰岛素给药 |
0x183B | Binary Sensor | GATT Service | 二元传感器 |
0x183C | Emergency Configuration | GATT Service | 应急配置 |
0x183E | Physical Activity Monitor | GATT Service | 体力活动监视器 |
0x1843 | Audio Input Control | GATT Service | 音频输入控制 |
0x1844 | Volume Control | GATT Service | 音量控制 |
0x1845 | Volume Offset Control | GATT Service | 音量偏移控制 |
0x1846 | Coordinated Set Identification | GATT Service | 协调集识别 |
0x1847 | Device Time | GATT Service | 设备时间 |
0x1848 | Media Control | GATT Service | 多媒体控制 |
0x1849 | Generic Media Control | GATT Service | 通用媒体控制 |
0x184A | Constant Tone Extension | GATT Service | 恒定音调扩展 |
0x184B | Telephone Bearer | GATT Service | 电话持有人 |
0x184C | Generic Telephone Bearer | GATT Service | 通用电话承载 |
0x184D | Microphone Control | GATT Service | 麦克风控制 |
0x184E | Audio Stream Control | GATT Service | 音频流控制 |
0x184F | Broadcast Audio Scan | GATT Service | 广播音频扫描 |
0x1850 | Published Audio Capabilities | GATT Service | 已发布的音频功能 |
0x1851 | Basic Audio Announcement | GATT Service | 基本音频公告 |
0x1852 | Broadcast Audio Announcement | GATT Service | 广播音频公告 |
0x1853 | Common Audio | GATT Service | 普通音频 |
0x1854 | Hearing Access | GATT Service | 听力访问 |
0x1855 | TMAS | GATT Service | |
0x1856 | Public Broadcast Announcemen | GATT Service | 公共广播公告 |
属性声明
范围: 0X2800-0X2803
UUID | Name | 类型 |
---|---|---|
0x2800 | Primary Service | GATT Declarations |
0x2801 | Secondary Service | GATT Declarations |
0x2802 | Include | GATT Declarations |
0x2803 | Characteristic | GATT Declarations |
单位
范围: 0X2700-0X27C5
设备信息
UUID | Name | 类型 |
---|---|---|
0x2A23 | System ID | GATT Characteristic and Object |
0x2A24 | Model Number String | GATT Characteristic and Object |
0x2A25 | Serial Number String | GATT Characteristic and Object |
0x2A26 | Firmware Revision String | GATT Characteristic and Object |
0x2A27 | Hardware Revision String | GATT Characteristic and Object |
0x2A28 | Software Revision String | GATT Characteristic and Object |
0x2A29 | Manufacturer Name String | GATT Characteristic and Object |
0x2A2A | IEEE Data | GATT Characteristic and Object |
HID
UUID | Name | 类型 |
---|---|---|
0x2A4A | HID Information | GATT Characteristic |
0x2A4B | Report Map | GATT Characteristic |
0x2A4C | HID Control Poin | GATT Characteristic |
0x2A4D | Report | GATT Characteristic |
0x2A4E | Protocol Mode | GATT Characteristic |
0x2A22 | BT Keyboard Input Report | GATT Characteristic |
0x2A32 | BT Keyboard Output Report | GATT Characteristic |
0x2A33 | BT Mouse Input Report | GATT Characteristic |
|characteristic|设备名|Device Name|0x2A00|0-248字节长度的设备明,一个设备应该只有一个实例化的设备名|
||