SENSORTILE 发表于 2021-11-5 17:29

bluenrg如何在建立通信的同时,对外发送beacon广播?

<p>硬件:st的sensortile,其中使用了bluenrg芯片作为蓝牙通信</p>

<p>已经实现的功能:建立服务,实现读写</p>

<p>期待的新功能:在不影响原有通信的基础上,使得bluenrg仍然可以发送beacon广播。</p>

<p>问题:</p>

<p>经过我的测试,新功能中,aci_gap_set_non_connectable_IDB05A1(ADV_NONCONN_IND, STATIC_RANDOM_ADDR);设置成不可连接状态后,调用aci_gap_update_adv_data(31, data_array);这时能实现beacon功能。</p>

<p>但是原有的代码是aci_gap_set_discoverable(ADV_IND, 0, 0,。。。),建立连接后才能实现蓝牙服务的读写。</p>

<p>这两个功能单独测试都成功了,现在的问题是,两端代码放在一起就不能正常工作。</p>

<p>应该怎么做呢?</p>

Jacktang 发表于 2021-11-6 08:30

<p>代码的移植没有做好吧</p>

wangerxian 发表于 2021-11-7 14:23

<p>你连接之后,继续设置广播,获取设置成2从模式。</p>

wangerxian 发表于 2021-11-7 14:23

<p>你目前代码可能在连接之后关闭广播了,你可以看看。</p>

SENSORTILE 发表于 2021-11-9 15:50

wangerxian 发表于 2021-11-7 14:23
你目前代码可能在连接之后关闭广播了,你可以看看。

<p>还是不知道为啥啊。。。芯片是bluenrg-ms,st官网上的en.X-CUBE-BLE1_v6.2.2示例代码,beacon那一部分,示例里面也是先调用aci_gap_set_discoverable函数将蓝牙设置为不可连接状态,然后再调用aci_gap_update_adv_data函数,发送beacon广播数据。问题是最开始我需要先建立蓝牙连接(可连接状态),建立连接后再准备发送beacon就会使得之前的连接中断了。</p>

SENSORTILE 发表于 2021-11-9 15:57

SENSORTILE 发表于 2021-11-9 15:50
还是不知道为啥啊。。。芯片是bluenrg-ms,st官网上的en.X-CUBE-BLE1_v6.2.2示例代码,beacon那一部分, ...

<p>而且,也没有看到有关闭广播的代码。示例代码SampleApp那一章,建立连接的回调函数GAP_ConnectionComplete_CB中只是简单设置了几个全局flag,没有关闭广播。emmmmmm很是疑惑。。。</p>

wangerxian 发表于 2021-11-9 16:25

<div class='shownolgin' data-isdigest='no'>SENSORTILE 发表于 2021-11-9 15:50
还是不知道为啥啊。。。芯片是bluenrg-ms,st官网上的en.X-CUBE-BLE1_v6.2.2示例代码,beacon那一部分, ...

<p>你可以看aci_gap_set_discoverable实现了什么,你连接之后,实现这个函数和aci_gap_update_adv_data函数就可以了。<br />
你要实现的这个功能应该不是难事。</p>
</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

yibin_cai 发表于 2021-11-10 11:47

<div class='shownolgin' data-isdigest='no'><p>首先可以确认的是你提及的应用场景是可以实现的,即先发送可连接广播,连接后再同时地发送不可连接广播。</p>

<p>&nbsp;</p>

<p>需要先说明的是,发送广播的步骤为:</p>

<p>1.&nbsp;配置广播参数:aci_gap_set_advertising_configuration</p>

<p>2.&nbsp;提供广播数据:aci_gap_set_advertising_data&nbsp;</p>

<p>3.&nbsp;使能广播:aci_gap_set_advertising_enable</p>

<p>&nbsp;</p>

<p>以上步骤,可在每一个广播链路(L2CAP&nbsp;层)上启用,每个广播链路,通过&nbsp;Advertising_Handle&nbsp;来标识。</p>

<p>你在上述三个 API&nbsp;中都可以找到&nbsp;Advertising_Handle&nbsp;参数。</p>

<p>&nbsp;</p>

<p>对于你的应用场景,你可以先使能扩展广播 (EXTENDED_ADV ),然后:<br />
一、</p>

<p>1. aci_gap_set_advertising_configuration(0, ...) //&nbsp;可连接广播</p>

<p>2. aci_gap_set_advertising_data (0, ...)</p>

<p>3. aci_gap_set_advertising_enable(0, ...)</p>

<p>二、</p>

<p>1. aci_gap_set_advertising_configuration(1, ...) //&nbsp;不可连接广播</p>

<p>2. aci_gap_set_advertising_data (1, ...)</p>

<p>3. aci_gap_set_advertising_enable(1, ...)</p>

<p>来实现。</p>
</div><script>showreplylogin();</script>

SENSORTILE 发表于 2021-11-10 14:31

<div class='shownolgin' data-isdigest='no'><p>感谢大家回复。emmmm,sensortile的蓝牙芯片是支持4.2标准的bluenrg-ms芯片(不是-2这种蓝牙5.*的芯片)。我查阅了一下,应该是不支持多从模式,也不支持扩展广播。</p>

<p>现在我感觉,其中一个可行的方案是,利用4.2协议可以主从一体的特性。</p>

<p>1,sensortile作为central,连接我的遥控(esp32, 设置成peripheral)。然后不断去读esp32的服务。</p>

<p>2,sensortile作为peripheral,可以设置成disconnectable,然后发送beacon(项目中是为了室内基站定位)</p>
</div><script>showreplylogin();</script>

nmg 发表于 2021-11-10 14:48

<div class='shownolgin' data-isdigest='no'>SENSORTILE 发表于 2021-11-10 14:31
感谢大家回复。emmmm,sensortile的蓝牙芯片是支持4.2标准的bluenrg-ms芯片(不是-2这种蓝牙5.*的芯片)。 ...

<p>你看8楼给你的回复了吗?</p>
</div><script>showreplylogin();</script>

SENSORTILE 发表于 2021-11-10 14:53

<div class='shownolgin' data-isdigest='no'>nmg 发表于 2021-11-10 14:48
你看8楼给你的回复了吗?

<p>看了啊,我查了,扩展广播是5.0的新特性。。。在我这4.2的sdk中,广播那些api都没有广播句柄,不支持多个广播。</p>
</div><script>showreplylogin();</script>

yibin_cai 发表于 2021-11-10 17:46

<div class='shownolgin' data-isdigest='no'>SENSORTILE 发表于 2021-11-10 14:53
看了啊,我查了,扩展广播是5.0的新特性。。。在我这4.2的sdk中,广播那些api都没有广播句柄,不支持多个 ...

<p>广播包还是&nbsp;legacy&nbsp;的广播包,没有用到扩展广播相关的标志。</p>

<p>上述是借用了扩展广播的&rdquo;能力&ldquo;,而没有用到扩展广播包。</p>

<p>BlueNRG-1/2&nbsp;的 SDK&nbsp;的蓝牙 API 确实没&nbsp;BlueNRG-LP&nbsp;的那么灵活。</p>

<p>&nbsp;</p>

<p>但是,BlueNRG-1/2&nbsp;上,&ldquo;多从&rdquo;也是可以实现的。</p>

<p>&nbsp;</p>

<p>你可以先发一个可连接广播出来;连上之后,再执行上述开启广播的步骤(不使用&nbsp;adv handler),把不可连接广播发出来。</p>

<p>主要调试、实现操作如下:</p>

<p>1.&nbsp;配置协议栈,使其支持多个链路</p>

<p>2.&nbsp;实现两个函数:start_connectable_adv();&nbsp; start_beacon_adv();&nbsp;然后单独验证其可行性。</p>

<p>3.&nbsp;实现流程:先发可连接广播,连接成功后发&nbsp;beacon&nbsp;广播,断开连接后再发可连接广播</p>

<p>&nbsp;</p>

<p>&nbsp;</p>
</div><script>showreplylogin();</script>
页: [1]
查看完整版本: bluenrg如何在建立通信的同时,对外发送beacon广播?