目录一、 扫描的本质二、 扫描的两种基本模式三、扫描的核心参数3.1 扫描窗口 vs 扫描间隔3.2 扫描类型3.3 扫描滤波① 白名单滤波② 广播数据滤波四、 完整交互流程五、 扫描窗口与间隔的影响六、结语 蓝牙学习系列专栏一、 扫描的本质中心设备的“耳朵”与“雷达”。扫描是中心设备如手机、平板主动寻找和发现外围设备如手环、耳机的唯一手段。其核心流程可以被概括为一种“监听-解析-回应”​ 的循环监听在特定的无线电频率广播信道上监听信号。解析对接收到的广播包进行解码提取出设备地址、信号强度、广播数据等信息。回应可选如果对某个设备感兴趣可以发起“扫描请求”以获取更多信息。上报将发现的设备信息名称、服务、信号强度RSSI等汇总给上层应用。二、 扫描的两种基本模式被动 vs. 主动。扫描并非只有一种“听”法。根据是否需要与广播设备互动分为两种模式其选择对功耗和获取信息的完整性有直接影响。模式比喻行为功耗获取信息被动扫描​“只带耳朵的听众”​只接收广播包绝不发送任何回复。极低​仅限于广播包中携带的基础信息如设备地址、基础服务列表。主动扫描​“带耳朵还带嘴巴的记者”​先接收广播包如果感兴趣会立即发送一个“扫描请求”以索取更多信息。较高​可获得“广播包” “扫描响应包”​ 的全部信息通常包含完整的设备名、详细服务列表等。关键点主动扫描是获取完整设备信息的标准方式。例如一个设备可能将缩短的名称放在广播包而将完整的MyAwesomeHeartRateMonitor长名称放在扫描响应包中只有主动扫描才能拿到全名。三、扫描的核心参数想象一下这个场景你站在一个广场上周围有很多广播车在循环播放广告。你想知道有没有你感兴趣的内容于是你竖起耳朵听——这就是BLE的扫描Scanning。扫描的效率、功耗和快慢由下面几个参数决定3.1 扫描窗口 vs 扫描间隔你是“一直听”还是“听一会儿歇一会儿”这两个参数共同决定了扫描的“节奏”。参数技术定义通俗解释扫描窗口单次扫描的持续时间你每次竖起耳朵听多久扫描间隔两次扫描开始时刻之间的时间你每隔多久听一次两者有一个硬性关系扫描窗口 ≤ 扫描间隔。这句话用“听广播”来解释就特别简单如果窗口 间隔比如你每隔5秒听一次每次听满5秒。这意味着你一直在听没有休息——反应最快但也最累最耗电。如果窗口 间隔比如你每隔5秒听一次但每次只听2秒。这意味着你听一会儿歇一会儿——没那么累省电但可能会错过在你休息时经过的广播车。总结窗口和间隔的差距越大扫描越省电但漏掉广播的可能性也越大。开发者需要在“响应速度”和“功耗”之间找平衡。3.2 扫描类型你是“只听不问”还是“听完再问”BLE支持两种扫描模式扫描类型技术行为通俗解释被动扫描只接收广播包不发送任何请求只听不问——你默默听着广播车在喊什么但不搭理它主动扫描收到广播后发送扫描请求获取更多数据听完再问——你听到一辆广播车路过主动上前问“能再详细介绍一下吗”广播车会回复一个“扫描响应包”补充更多信息被动扫描更省电因为你只接收不发消息但获得的信息有限只有广播包里的31字节。主动扫描信息更全能拿到扫描响应包里的额外数据但要多发一次消息功耗略高也会增加空中的通信负担。3.3 扫描滤波只关心你想听的。如果广场上有几十辆广播车同时喊话你不可能全听一遍——太累了。滤波就是帮你“筛选”的功能让你只关注真正感兴趣的设备。① 白名单滤波技术定义链路层只处理白名单中指定设备的广播包通俗解释你手里有一张“重点关注名单”名单上的车喊话你才听其他人的声音自动过滤掉好处极大降低干扰省电又省心。适合“我只想等我的手表广播”这类场景。不过要注意一点如果定向广播数据包中的目的地址并非自己那么也应该抛弃该数据包即使在自己的白名单中也不例外。② 广播数据滤波技术定义主机或应用层根据广播包内容如服务UUID、设备名称进行过滤通俗解释你不在乎是哪辆车只在乎它在喊什么内容——比如你只对“卖冰淇淋”的广播感兴趣其他的一概不理这种滤波通常在上层实现主机或App可以非常灵活比如“只接收心率服务的设备”。四、 完整交互流程以手机发现智能手环为例让我们将广播与扫描结合起来看一个“手机寻找手环”的完整故事它清晰地展示了一次成功的设备发现所需的所有步骤与时机。图4-1 广播与扫描完整流程上图揭示了设备发现流程中严格的时序依赖关系发现的前提是时序重叠手机的扫描窗口必须与手环的广播事件在时间和信道上都对齐才能成功捕获广播包。任何一方参数设置不当都可能导致“找不到设备”。速度的权衡更短的广播间隔和更长的扫描窗口能提高发现速度但代价是双方设备的功耗都显著上升。完整的发现需要两步在主动扫描模式下一次完整的发现需要“广播-扫描请求-扫描响应”三次成功的数据交换这比单纯的被动监听更能获取信息但也更复杂。五、 扫描窗口与间隔的影响理解参数如何影响实际表现是进行性能优化的关键。场景一快速发现高功耗设置扫描窗口 扫描间隔如均为100ms。这称为连续扫描手机射频几乎不停歇。效果能在极短时间通常一秒内内发现设备。常见于用户主动点击“刷新设备列表”时。场景二低速发现低功耗设置扫描窗口远小于扫描间隔如窗口20ms间隔1s。效果手机每秒钟只工作20毫秒其余时间休眠非常省电。但可能需要多个广播/扫描周期才能对齐发现设备可能需要几秒甚至更久。常见于后台持续扫描的场景。六、结语扫描是广播的完美搭档。一个优雅的设备发现体验需要广播方和扫描方共同优化对于广播方外围设备在需要快速被发现时如配对模式使用较短的广播间隔如20-100ms。将最关键的信息放在广播包将补充信息如长名称放在扫描响应包。对于扫描方中心设备/手机App明确扫描目的需要快速发现就用连续扫描需要后台监听就用间隔扫描。尽可能使用白名单或服务过滤避免处理不相关的广播包节省系统资源。理解RSSI接收信号强度指示值波动很大仅适用于粗略的距离估算或信号强弱排序不能用于厘米级精确定位。由于个人水平有限文中若有任何疏漏或表述不清之处欢迎在评论区指正与交流。后续更新预告我将持续更新ble系列的技术科普下一篇计划《BLE 连接建立过程详解》。如果本文对你有帮助欢迎点赞、收藏、关注这是对我最大的鼓励蓝牙学习系列专栏本系列是系统性的蓝牙低功耗(BLE)技术教程从协议栈原理到实战开发适合嵌入式开发者、物联网工程师和所有对蓝牙技术感兴趣的读者。 **系列导航**本文是《蓝牙学习系列》第4篇 **完整专栏** 蓝牙学习系列专栏