1. BLE基础概念:从经典蓝牙到低功耗蓝牙的进化
各位同学好,我是老周。做蓝牙开发十几年了,今天咱们聊聊BLE最基础的东西。很多人一上来就啃协议栈,结果越看越懵。其实你只要搞懂几个核心概念,后面就顺了。
先说说我个人的理解。BLE和经典蓝牙,虽然都叫蓝牙,但设计思路完全不同。经典蓝牙是为了持续传输音频、文件这类大数据流设计的。而BLE,说白了就是为了省电。它不是为了让你一直连着打电话,而是让你传个小数据包,然后赶紧睡觉。
核心观点:BLE不是经典蓝牙的升级版,而是为物联网场景重新设计的一套协议。它牺牲了持续吞吐量,换来了极低的功耗和灵活的拓扑结构。
1.1 BLE与经典蓝牙的区别
我刚开始带项目时,有个同事把BLE当经典蓝牙用,让设备一直保持连接传音频数据。结果电池半天就耗光了。这就是没搞清楚两者的本质区别。
咱们直接看对比表,一目了然:
| 对比维度 | 经典蓝牙 (BR/EDR) | 低功耗蓝牙 (BLE) |
|---|---|---|
| 设计目标 | 持续数据流(音频、文件) | 间歇性小数据包(传感器、控制) |
| 功耗 | 约 1W(持续连接) | 约 0.01W~0.5W(大部分时间休眠) |
| 峰值速率 | 2~3 Mbps | 1~2 Mbps(PHY 升级后可达 2M) |
| 连接建立时间 | 约 100ms | 约 3~6ms |
| 拓扑结构 | 点对点(Piconet) | 点对点、广播、Mesh |
| 应用场景 | 耳机、音箱、车载免提 | 手环、传感器、信标、智能家居 |
你看,BLE的连接建立时间只有经典蓝牙的十分之一。这意味着什么?设备可以快速连一下,传完数据,马上断开。大部分时间都在休眠,功耗自然就下来了。
我的经验:选型时别只看"支持蓝牙"三个字。如果你的产品需要持续传音频,老老实实用经典蓝牙。如果是传温度、开关状态、心率这类小数据,用BLE。我曾经见过一个智能门锁项目,非要上经典蓝牙,结果电池一个月就废了。
1.2 BLE协议栈架构
BLE协议栈分三层:Controller、Host、Application。很多人觉得这很抽象,其实你把它想象成一个公司就好理解了。
- Controller(硬件层):就是收发数据的"快递员"。负责射频收发、跳频、包处理。它只管把数据包发出去、收进来,不关心内容。
- Host(协议层):是"调度中心"。负责数据拆包、重组、安全加密、连接管理。它告诉Controller什么时候发、发给谁。
- Application(应用层):是"老板"。决定发什么数据、怎么用。比如温度到了30度就报警,这就是应用层的事。
我画了一张图,帮你理清这三层的关系:
实际开发中,Controller和Host之间通过HCI(主机控制器接口)通信。有些芯片把Controller和Host都做在内部,你直接调API就行。有些则需要你自己实现HCI传输,比如用UART连接外部蓝牙模块。
注意:很多初学者搞不清GAP和GATT的区别。简单说,GAP管"怎么连",GATT管"连上后传什么"。我见过有人把GATT的读写操作放在GAP的回调里,结果数据死活传不过去。记住:GAP是连接层,GATT是数据层。
1.3 BLE核心角色
BLE定义了四种角色。你想想看,一个设备可以同时扮演多个角色。比如你的手机,既可以当Central连接手环,也可以当Peripheral让别人连你。
| 角色 | 方向 | 典型设备 | 主要行为 |
|---|---|---|---|
| Broadcaster(广播者) | 只发不收 | 信标(Beacon)、温度传感器 | 周期性发送广播包,不建立连接 |
| Observer(观察者) | 只收不发 | 扫描器、信标接收器 | 监听广播包,不发起连接 |
| Peripheral(外设) | 可被连接 | 手环、心率带、智能灯 | 发送广播,等待连接,响应请求 |
| Central(中心) | 主动连接 | 手机、平板、网关 | 扫描、发起连接、读写数据 |
这里有个容易踩的坑。我刚开始做BLE时,以为Peripheral就是"从机",只能被动响应。其实Peripheral也可以主动发数据,只是不能主动建立连接。它通过广播告诉别人"我在这里",然后等Central来连。
避坑指南:我曾经做一个智能手环项目,需要在连接状态下主动把心率数据推给手机。我一开始在Peripheral端用GATT的Write命令直接发,结果手机收不到。后来才发现,Peripheral想主动发数据,得用Notification(通知)或Indication(指示),而不是Write。这个区别后面章节会细讲。
1.4 角色组合与典型场景
实际项目中,角色不是固定的。我给你列几个常见组合:
- 广播+观察(无连接):超市里的信标广播优惠信息,手机App扫描后弹出广告。不需要配对,不需要连接。
- 外设+中心(点对点):手环广播自己,手机扫描后连接,读取步数数据。这是最常见的场景。
- 多角色混合:一个网关设备,既作为Central连接多个传感器,又作为Peripheral把汇总数据发给手机。我做过一个智能家居网关,就是这种模式。
嗯,这里要注意。BLE 4.0时代,一个设备只能扮演一个角色。但从4.1开始,支持多角色并发。比如你的手机可以同时连手表(作为Central)和接收蓝牙键盘(作为Peripheral)。
总结一下:搞懂这四个角色,你就掌握了BLE的"社交关系"。Broadcaster和Observer是"路人",一个喊话一个听。Peripheral和Central是"朋友",先打招呼再聊天。后面的所有应用场景,都是在这四种关系上搭建的。
好了,这一章的基础概念就讲到这里。记住:BLE不是经典蓝牙的简化版,它是为物联网量身定做的。协议栈的三层分工明确,四个角色各司其职。把这些搞清楚了,后面学GATT、GAP、连接参数这些,你就不会迷路。