硬件:st的sensortile,其中使用了bluenrg芯片作为蓝牙通信
已经实现的功能:建立服务,实现读写
期待的新功能:在不影响原有通信的基础上,使得bluenrg仍然可以发送beacon广播。
问题:
经过我的测试,新功能中,aci_gap_set_non_connectable_IDB05A1(ADV_NONCONN_IND, STATIC_RANDOM_ADDR);设置成不可连接状态后,调用aci_gap_update_adv_data(31, data_array);这时能实现beacon功能。
但是原有的代码是aci_gap_set_discoverable(ADV_IND, 0, 0,。。。),建立连接后才能实现蓝牙服务的读写。
这两个功能单独测试都成功了,现在的问题是,两端代码放在一起就不能正常工作。
应该怎么做呢?
你连接之后,继续设置广播,获取设置成2从模式。
你目前代码可能在连接之后关闭广播了,你可以看看。
引用: wangerxian 发表于 2021-11-7 14:23 你目前代码可能在连接之后关闭广播了,你可以看看。
还是不知道为啥啊。。。芯片是bluenrg-ms,st官网上的en.X-CUBE-BLE1_v6.2.2示例代码,beacon那一部分,示例里面也是先调用aci_gap_set_discoverable函数将蓝牙设置为不可连接状态,然后再调用aci_gap_update_adv_data函数,发送beacon广播数据。问题是最开始我需要先建立蓝牙连接(可连接状态),建立连接后再准备发送beacon就会使得之前的连接中断了。
引用: SENSORTILE 发表于 2021-11-9 15:50 还是不知道为啥啊。。。芯片是bluenrg-ms,st官网上的en.X-CUBE-BLE1_v6.2.2示例代码,beacon那一部分, ...
而且,也没有看到有关闭广播的代码。示例代码SampleApp那一章,建立连接的回调函数GAP_ConnectionComplete_CB中只是简单设置了几个全局flag,没有关闭广播。emmmmmm很是疑惑。。。
引用: SENSORTILE 发表于 2021-11-9 15:50 还是不知道为啥啊。。。芯片是bluenrg-ms,st官网上的en.X-CUBE-BLE1_v6.2.2示例代码,beacon那一部分, ...
你可以看aci_gap_set_discoverable实现了什么,你连接之后,实现这个函数和aci_gap_update_adv_data函数就可以了。
你要实现的这个功能应该不是难事。
首先可以确认的是你提及的应用场景是可以实现的,即先发送可连接广播,连接后再同时地发送不可连接广播。
需要先说明的是,发送广播的步骤为:
1. 配置广播参数:aci_gap_set_advertising_configuration
2. 提供广播数据:aci_gap_set_advertising_data
3. 使能广播:aci_gap_set_advertising_enable
以上步骤,可在每一个广播链路(L2CAP 层)上启用,每个广播链路,通过 Advertising_Handle 来标识。
你在上述三个 API 中都可以找到 Advertising_Handle 参数。
对于你的应用场景,你可以先使能扩展广播 (EXTENDED_ADV ),然后:
一、
1. aci_gap_set_advertising_configuration(0, ...) // 可连接广播
2. aci_gap_set_advertising_data (0, ...)
3. aci_gap_set_advertising_enable(0, ...)
二、
1. aci_gap_set_advertising_configuration(1, ...) // 不可连接广播
2. aci_gap_set_advertising_data (1, ...)
3. aci_gap_set_advertising_enable(1, ...)
来实现。
感谢大家回复。emmmm,sensortile的蓝牙芯片是支持4.2标准的bluenrg-ms芯片(不是-2这种蓝牙5.*的芯片)。我查阅了一下,应该是不支持多从模式,也不支持扩展广播。
现在我感觉,其中一个可行的方案是,利用4.2协议可以主从一体的特性。
1,sensortile作为central,连接我的遥控(esp32, 设置成peripheral)。然后不断去读esp32的服务。
2,sensortile作为peripheral,可以设置成disconnectable,然后发送beacon(项目中是为了室内基站定位)
引用: SENSORTILE 发表于 2021-11-10 14:31 感谢大家回复。emmmm,sensortile的蓝牙芯片是支持4.2标准的bluenrg-ms芯片(不是-2这种蓝牙5.*的芯片)。 ...
你看8楼给你的回复了吗?
引用: nmg 发表于 2021-11-10 14:48 你看8楼给你的回复了吗?
看了啊,我查了,扩展广播是5.0的新特性。。。在我这4.2的sdk中,广播那些api都没有广播句柄,不支持多个广播。
引用: SENSORTILE 发表于 2021-11-10 14:53 看了啊,我查了,扩展广播是5.0的新特性。。。在我这4.2的sdk中,广播那些api都没有广播句柄,不支持多个 ...
广播包还是 legacy 的广播包,没有用到扩展广播相关的标志。
上述是借用了扩展广播的”能力“,而没有用到扩展广播包。
BlueNRG-1/2 的 SDK 的蓝牙 API 确实没 BlueNRG-LP 的那么灵活。
但是,BlueNRG-1/2 上,“多从”也是可以实现的。
你可以先发一个可连接广播出来;连上之后,再执行上述开启广播的步骤(不使用 adv handler),把不可连接广播发出来。
主要调试、实现操作如下:
1. 配置协议栈,使其支持多个链路
2. 实现两个函数:start_connectable_adv(); start_beacon_adv(); 然后单独验证其可行性。
3. 实现流程:先发可连接广播,连接成功后发 beacon 广播,断开连接后再发可连接广播