第三讲:BLE广播与扫描——让贴片“喊”出来

好,咱们进入实战课程的第三讲。广播与扫描,说白了就是蓝牙设备之间怎么“打招呼”。

你想想看,一个医疗贴片贴在身上,它得让手机找到它吧?这个过程,就是广播。我刚开始做BLE项目时,总觉得广播嘛,不就是发几个包?结果第一次调试,手机死活搜不到设备。后来才发现,广播参数没配对。嗯,这里面的门道,咱们今天一次讲透。

3.1 广播模式:四种“打招呼”的方式

BLE的广播模式有四种。我个人习惯把它们分成两类:能连的和不能连的。

广播模式 英文名 典型场景
可连接广播 Connectable Advertising 医疗贴片等待手机连接
可扫描广播 Scannable Advertising 发送额外数据,但不接受连接
不可连接广播 Non-connectable Advertising 信标(Beacon)广播
定向广播 Directed Advertising 快速重连已知设备

我在做血糖贴片时,用的就是可连接广播。因为贴片需要把数据传给手机,手机也要下发指令。如果你只是做一个体温信标,那用不可连接广播就够了,省电。

核心要点:医疗贴片99%的情况用“可连接广播”。别选错了,否则手机连不上。

3.2 广播参数:三个关键数字

广播参数里,有三个数字我每次都会反复检查。为什么?因为踩过坑。

  • 广播间隔(Advertising Interval):范围20ms到10.24s。我建议医疗贴片用100ms-500ms。太短了费电,太长了手机发现慢。
  • 广播通道(Advertising Channels):37、38、39三个通道。别改,默认全开就行。
  • 广播超时(Advertising Timeout):很多芯片默认180秒后自动停止广播。我曾经因为这个,贴片贴上去半小时后手机就找不到了。后来我改成0,表示一直广播。

避坑指南:我曾经遇到一个项目,贴片广播间隔设成了20ms。结果功耗飙升,电池半天就没了。后来改成200ms,续航直接翻倍。记住:广播间隔每缩短一半,功耗大约增加一倍。

3.3 广播数据包结构:里面到底装了什么?

广播数据包,说白了就是一个“自我介绍”。结构其实很简单,就是一堆AD Structure(广告数据结构)串在一起。

每个AD Structure长这样:

| Length (1字节) | AD Type (1字节) | AD Data (N字节) |

举个例子,一个典型的医疗贴片广播包:

// 假设我们发一个包含设备名称和电池电量的广播包
// 伪代码示例
uint8_t adv_data[] = {
  0x02, 0x01, 0x06,           // Flags: BLE General Discoverable
  0x0A, 0x09, 'M', 'e', 'd', 'P', 'a', 't', 'c', 'h', '0', '1',  // 设备名称 "MedPatch01"
  0x03, 0x19, 0x00, 0x18,     // 外观:医疗设备 (0x1800)
  0x02, 0x0A, 0x64            // TX Power Level: 100 (-100dBm)
};

嗯,这里要注意:广播包最大只有31字节。所以你得精打细算。我一般只放:设备名称、电池电量、一个自定义的UUID。

3.4 扫描参数:手机怎么“听”到贴片?

扫描是广播的反过程。手机端的扫描参数,决定了它多久能发现你的贴片。

关键参数有两个:

  • 扫描窗口(Scan Window):每次扫描持续多久。典型值30ms-100ms。
  • 扫描间隔(Scan Interval):两次扫描之间隔多久。典型值100ms-500ms。

扫描窗口越大,发现设备越快,但手机耗电也大。我建议医疗App里,扫描窗口设60ms,扫描间隔设200ms。这样既快又省电。

实战技巧:如果你发现手机扫描不到贴片,先检查广播间隔和扫描窗口是否匹配。比如你广播间隔500ms,但扫描窗口只有10ms,那很可能错过。我一般让扫描窗口 ≥ 广播间隔的1/5。

3.5 实战中的广播策略

做医疗贴片,广播策略不能死板。我总结了一套“三段式”广播法:

  1. 快速广播阶段(贴片刚上电):广播间隔100ms,持续30秒。让手机快速发现。
  2. 正常广播阶段:广播间隔300ms,持续到连接建立。省电。
  3. 低功耗广播阶段(如果长时间未连接):广播间隔1秒,持续广播。防止彻底失联。

这个策略,我在心电贴片项目里用过,效果很好。既保证了用户体验,又延长了电池寿命。

3.6 常见问题与排查

最后,分享几个我经常遇到的坑:

  • 广播包太大:超过31字节,手机收不到。检查一下你的AD Structure总长度。
  • 广播通道被干扰:Wi-Fi在2.4GHz频段会干扰BLE。如果发现广播不稳定,试试换地方。
  • 广播超时:很多芯片默认180秒后停止广播。记得关掉这个功能,或者用定时器重新开启。

一句话总结:广播是贴片和手机之间的“第一声招呼”。参数配好了,连接就成功了一半。我每次做新项目,都会先花半小时调广播参数,后面省心很多。

好,这一讲就到这里。下一讲咱们聊聊连接与配对,看看贴片和手机怎么“握手”。