1. 为什么BLE连接过程值得深入研究
在智能穿戴设备、IoT传感器和医疗监测设备中,BLE(Bluetooth Low Energy)技术已经成为无线通信的首选方案。与经典蓝牙相比,BLE最大的特点是极低的功耗——一节纽扣电池可以维持数年的运行。但实现这种低功耗特性的背后,是一套精心设计的连接机制。
我曾在开发一款健康手环时,遇到设备频繁断连的问题。通过抓包分析发现,是由于没有正确理解BLE连接参数的含义,导致手机和手环之间的"对话节奏"不匹配。这个经历让我意识到,透彻理解BLE连接过程对开发稳定可靠的蓝牙产品至关重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. BLE连接建立全流程解析
2.1 广播与扫描阶段
BLE设备在未连接时,会以特定的时间间隔(Advertising Interval)发送广播包。这个间隔通常在20ms到10.24s之间,开发者需要根据应用场景权衡:
- 较短的间隔(如100ms)能更快被发现,但功耗更高
- 较长的间隔(如1s)更省电,但用户可能感觉连接速度慢
广播包中包含以下关键信息:
cpp复制struct AdvertisingData {
uint8_t flags; // 广播能力标志位
uint16_t serviceUUID; // 支持的服务UUID
uint8_t txPower; // 发射功率
std::string name; // 设备名称
};
扫描端(通常是手机)会主动监听这些广播包。当扫描到目标设备后,会发送连接请求(CONNECT_REQ)。这里有个关键细节:扫描窗口(Scan Window)和扫描间隔(Scan Interval)的比值决定了设备能被发现的概率。我建议采用1:1的比例(即持续扫描)来确保快速连接。
2.2 连接参数协商
连接建立时最关键的四个参数:
-
连接间隔(Connection Interval):1.25ms~4s,决定主从设备通信的频率。对于需要实时数据传输的应用(如心率监测),建议设置为15-30ms;对于低频数据(如温湿度传感器),可以设为100ms以上。
-
从机延迟(Slave Latency):0~499,允许从设备跳过的连接事件次数。合理设置可以显著降低功耗。
