1. 蓝牙UUID基础概念解析
在BLE(蓝牙低功耗)开发中,UUID(通用唯一标识符)是服务和服务特征的唯一标识。就像每个人的身份证号码一样,UUID确保了蓝牙设备间通信时能够准确识别特定的服务和特征。
UUID主要分为两种格式:
- 16位UUID:采用蓝牙技术联盟(SIG)定义的标准UUID,格式为0xXXXX
- 128位UUID:开发者自定义的完整UUID,格式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
在实际项目中,16位UUID通常用于标准蓝牙服务(如电池服务0x180F),而128位UUID则用于开发者自定义的私有服务。沁恒蓝牙芯片默认使用16位UUID,但很多物联网应用场景需要自定义128位UUID来实现特定功能。
注意:UUID的字节序问题经常是开发中的坑点。蓝牙协议采用小端序(Little-Endian),即低字节在前,高字节在后。这在后续代码修改时需要特别注意。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 16位UUID修改实战
2.1 代码修改要点
在沁恒蓝牙协议栈中,16位UUID通常通过宏定义进行配置。以下是典型修改示例:
c复制// 原始16位UUID定义(以简单配置文件服务为例)
#define SIMPLEPROFILE_SERV_UUID 0xFFF0
#define SIMPLEPROFILE_CHAR1_UUID 0xFFF1
// 修改为自定义16位UUID
#define SIMPLEPROFILE_SERV_UUID 0xABCD
#define SIMPLEPROFILE_CHAR1_UUID 0x1234
修改后需要重新编译整个协议栈,因为UUID定义通常被多处引用。建议使用全局搜索确认所有引用位置。
2.2 服务声明调整
服务UUID的声明通常在GATT配置文件(如simple_gatt_profile.c)中:
c复制// 修改前的服务UUID声明(16位)
const uint8_t simpleProfileServUUID[ATT_BT_UUID_SIZE] = {
LO_UINT16(SIMPLEPROFILE_SERV_UUID), HI_UINT16(SIMPLEPROFILE
