1. BLE基础概念:低功耗蓝牙简介
大家好,我是你们的嵌入式讲师。今天咱们聊聊BLE,也就是低功耗蓝牙。
说实话,我刚入行那会儿,蓝牙就是蓝牙,哪分什么经典不经典。直到2010年蓝牙4.0出来,才正式把BLE和经典蓝牙分开了。我个人习惯把BLE叫做“瘦身版蓝牙”——它不是为了传大文件设计的,而是为了“省电”这两个字。
1.1 低功耗蓝牙简介
BLE,全称Bluetooth Low Energy。你想想看,一颗纽扣电池能让设备跑几个月甚至几年,这就是BLE的厉害之处。
我在项目中遇到过不少客户,上来就问:“能不能用BLE传高清图片?”我通常会反问一句:“你希望设备多久换一次电池?”如果答案是“半年以上”,那BLE就是你的菜。
BLE的核心设计理念就三个:
- 极低功耗:待机微安级,峰值也就十几毫安
- 短数据包:一次传几十个字节,不搞大包
- 快速连接:几毫秒就能建立连接,用完就断
核心要点:BLE不是用来替代经典蓝牙的,它们是互补关系。BLE负责“小数据、低频次”的场景,经典蓝牙负责“大数据、高质量”的场景。
1.2 BLE与经典蓝牙区别
很多新手容易搞混这两个东西。我刚开始做项目时也犯过傻——用BLE去传音频,结果卡得不行。后来才明白,这俩根本不是一个路子。
直接看对比表吧,一目了然:
| 对比项 | 经典蓝牙(BR/EDR) | 低功耗蓝牙(BLE) |
|---|---|---|
| 诞生时间 | 蓝牙1.0(1999年) | 蓝牙4.0(2010年) |
| 功耗 | 高(约1W) | 极低(约0.01W) |
| 传输速率 | 1-3 Mbps | 125 Kbps - 2 Mbps |
| 传输距离 | 约10米 | 约100米(空旷环境) |
| 数据包大小 | 大(几百字节) | 小(最多255字节) |
| 应用场景 | 音频耳机、文件传输 | 传感器、手环、信标 |
| 连接方式 | 持续连接 | 广播/连接两种模式 |
我的经验:选型时记住一句话——“传音频用经典,传数据用BLE”。如果你要做智能灯泡、温湿度计、心率带,闭着眼睛选BLE就对了。
1.3 BLE协议栈架构
嗯,这里要注意。BLE协议栈分两层:Controller和Host。中间通过HCI(主机控制器接口)隔开。
为什么会这样设计?说白了就是为了灵活性。芯片厂商做底层射频,你做上层应用,各管各的。
我画个简化的分层图给你看:
+----------------------------+
| Application | ← 你的代码
+----------------------------+
| GATT | ← 属性协议,最常用
+----------------------------+
| ATT | ← 属性读写
+----------------------------+
| L2CAP | ← 数据封装
+----------------------------+
| HCI | ← 主机与控制器接口
+----------------------------+
| Link Layer | ← 链路层,核心
+----------------------------+
| Physical Layer | ← 物理层,2.4GHz
+----------------------------+
每个层都有它的活:
- Physical Layer:负责发信号,40个信道,3个广播信道+37个数据信道
- Link Layer:我最喜欢的一层。它管状态机——待机、广播、扫描、发起、连接。我在调试连接失败问题时,90%都是这层配置不对
- L2CAP:把上层数据切成小包,加上头,传给下层
- ATT/GATT:这俩是兄弟。ATT定义怎么读写属性,GATT定义属性怎么组织。说白了,GATT就是你的“数据字典”
避坑指南:我曾经在GATT层犯过一个低级错误——把Service的UUID写错了,结果手机死活扫描不到设备。后来查了三天才发现,UUID大小写搞反了。记住,BLE的UUID是16位或128位,大小写敏感!
1.4 BLE角色与拓扑
BLE里有四种角色,我习惯用“说话”来理解:
- Broadcaster(广播者):只管喊,不管有没有人听。比如信标
- Observer(观察者):只管听,不回应。比如扫描器
- Peripheral(外设):可以广播,也可以被连接。比如手环
- Central(中心):主动扫描并发起连接。比如手机
你想想看,一个设备可以同时扮演多个角色吗?答案是——可以。但我不建议你这么干,容易搞乱状态机。
拓扑结构方面,BLE支持两种:
- 点对点:一个Central连一个Peripheral。最常见,比如手机连手环
- 广播拓扑:一个Broadcaster发,多个Observer收。比如商场里的信标推送
还有一种叫“Mesh网络”,那是蓝牙5.0之后的事了,咱们后面章节再细聊。
我的建议:刚开始做BLE开发,先玩透“点对点”模式。一个Central连一个Peripheral,把GATT的读写搞明白,再考虑复杂的拓扑。我见过太多人一上来就想搞Mesh,结果连广播包都发不出去。
好了,第一章就到这里。记住一句话:BLE的核心是“省电”,所有设计都围绕这个目标。下一章咱们聊聊GATT和Service,那是你真正写代码的地方。