如何在 KW36 蓝牙保持连接状态下发起 Beacon 广播

一、概述

本文基于客户提及的一个功能需求,具体可描述为:手机端与设备进行蓝牙配对连接,完成连接后设备端要发起不可连接的 beacon 广播数据,其目的是为了让其他手机可以发现这个广播,知道当前设备已与其中一台手机完成了配对连接。代码修改基于 NXP KW36 的 frdmkw36_wireless_examples_bluetooth_hid_device_freertos 和frdmkw36_wireless_examples_bluetooth_beacon_freertos。


二、Beacon 广播

① 概念性理解

Beacon 属于一种广播数据的规定,符合蓝牙核心规范要求,它基于 BLE 广播,能够使得我们不需要连接到 BLE 设备就可以发现设备的信息。
因此,它的特性之一也是:不可连接性。Beacon 设备使用 BLE 技术向周围发送自己“特有的ID”,接收到该 ID 的应用软件会根据接收到的 ID 和信号源产生互动。不同功率的 BLE 设备的信号范围在 10m-100m 不等,当手机进入信号范围时,能接收到信号源广播的 ID(UUID+Major+Minor), App 通过解析接收到的 ID 向用户推送通知或者其它资讯。

② Beacon 数据格式

Beacon 可分为用于苹果系统的 iBeacon 和普通 Beacon,在此我们只阐述普通 Beacon。其数据格式为:2 字节公司 ID + 1 字节 Beacon 符 + 18 字节 UUID +6 字节数据 + 1 字节发送功率。

代码部分如下图所示:



图一

 

Beacon 广播数据说明以及例程使用指南可参考文档《BLE Demo Applications User's Guide》。


图二

 

如果我们需要在 Beacon 广播中发送一些变化的数据,例如温度或客制化的商家信息等等,就可以将这些数据放到这 6 Byte 数据中。

 
三、具体功能实现

首先,先将 Beacon 广播的配置数据移植到 HID 例程中,即在 app_config.c 中添加 Beacon 广播参数:


图三

我们要将 Beacon 广播类型设置为:不响应连接或扫描请求,即不可被连接。


图四

然后将 NXP 例程中的 Beacon 广播和扫描数据也添加进去:


图五

配对参数以及安全等级设置可用 HID 例程原本的配置,这里为了方便操作,我们可以把配对方式设置成:Just Works 。
我们可以添加一个Beacon 广播打开的标志位 Beacon_Adv_Flag,默认为关闭状态,在按键处理函数 BleApp_HandleKeys 中按下 Button 1 为开启 HID 广播。



图六

其中,void BleApp_Advertise(bool BeaconAdvFlag) 是广播类型切换函数:0---HID 广播,1---Beacon 广播,分别调用对应的广播参数配置函数Gap_SetAdvertisingParameters。在调用完此 API 后,代码会进入 BleApp_GenericCallback 回调函数进行一系列的广播参数设置,我们可以通过上面提到的标志位进行切换。




图七

 

在 Beacon 广播调用 Gap_SetAdvertisingData 函数时,因为其不可连接性,我们可以不去配置扫描应答包的数据,设置为 NULL。
需要注意的是,在广播数据设置完成后,不需要重新设置回调函数 App_StartAdvertising,如果设置了,在停止广播时,不会进入断开连接的事件,导致代码运行流程不完整。
最后,在处理 BLE 连接时间的回调函数 BleApp_ConnectionCallback 中,我们需要在连接事件下配置开启 Beacon 广播。


图八

其中,注意代码注释段,有提到 (void)Gap_StopAdvertising() 这个广播停止的 API 函数,我们在连接成功后,是不能够调用这个 API 的,具体函数说明可参考文档《 Bluetooth® Low Energy Application Developer’s Guide 》,对应说明如下图所示:


图九

但在连接状态下调用此 API 并不会影响代码正常运行,其函数中会先判断当前是否有激活的广播,如果没有就返回非法状态。所以假设我们在开了 Beacon 广播后,就可以成功调用此 API。在断开事件时,先调用 Gap_StopAdvertising(),关闭 Beacon 广播。进行广播参数更新,然后重新打开 HID 广播,恢复默认广播状态。


图十

四、运行结果

可查看具体打印结果,按下 Button1 开始 HID 广播,用手机连接后,重新开启 Beacon 广播。


图十一

以下为手机连接设备,如图所示:


图十二

 

使用 NXP 开发的 IoT Toolbox  查看 Beacon 广播,如下图:


图十三

 五、总结

对于一些产品开发中,我们可能会比较少遇到这类功能需求,如果不去真正尝试一下它的可实现性或者对理论不够掌握,就有可能会给客户说出功能无法实现的结论。面对这种情况,我们要充分阅读相应的文档和搭建功能环境去确认结果,凡事要有理有据,有因有果,这样客户才会对你的技术能力感到信任。


六、参考文档

1、《BLE Demo Applications User's Guide》

2、《Bluetooth® Low Energy Application Developer’s Guide》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论