BLE-基础知识


协议栈结构图

BLE-协议栈

名词介绍

名词 介绍
低功耗蓝牙(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 广播

广播数据格式

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的;

    NotificationIndication需要客户端通过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字节长度的设备明,一个设备应该只有一个实例化的设备名|
||

BLE-Service

参考

  1. 《Core_v4.2.pdf》
  2. 《UUID 定义》
  3. 【一些官方定义】

文章作者: Alex.Lin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex.Lin !
  目录