<蓝牙BLE>cc2540从机连接时的动态广播


转自大香瓜的博客

一、简介

本篇以SimpleBLEPeripheral工程为例,介绍实现连接时广播的方法。


二、实验平台

协议栈版本:BLE-CC254x-1.4.0

编译软件:IAR 8.20.2

硬件平台:Smart RF开发板


、连接时广播有什么用?

答:自己想了两个理论上可行的功能,能不能实现还是要实践才知道,欢迎大家给我留言、私信补充:

用途一:广播出连接状态

主机1连上从机后,从机可通过改变广播数据,来告知主机2“本从机已经被连接”。


用途二:手机修改广播内容

主机1连上从机后,主机1给从机发送广播数据,从机再把广播数据广播出去。(需要配对加密,否则大家都可连接)


四、修改步骤

1、修改IAR设置中的宏

将xPLUS_BROADCASTER改为PLUS_BROADCASTER。


注:只修改这一句,手机连接时CC2541就仍能广播。但是手机断开后会出现两个问题:

1)CC2541的显示屏会显示“disconnected”。

2)CC2541的广播停了。


2、解决上面两个问题

修改peripheralStateNotificationCB函数的GAPROLE_WAITING代码(simpleBLEPeripheral.c中)

<蓝牙BLE>cc2540从机连接时的动态广播_第1张图片

上述俩问题的原因是:当手机断开连接后,由于此时广播的相关变量仍显示从机在广播,所以协议栈的判断开广播的代码会开启不起来。

所以在这里从机超时后不进行当前广播状态的判断,直接紧接着开广播。


注:此时又出现了新的问题,也就是只有手机连接CC2541第一次时能“连接时广播”,第二次连接就没有广播数据了。


3、解决上述的“只在第一次连接时能广播”问题

修改peripheralStateNotificationCB函数的GAPROLE_CONNECTED代码(simpleBLEPeripheral.c中)

<蓝牙BLE>cc2540从机连接时的动态广播_第2张图片

默认是只会在第一次连接时默认开广播,把红框中的语句注释掉以后每次连接时都能自动开广播。


五、实验现象

注:用packet sniffer抓包。

1、CC2541上电广播时:广播包的间隔约为103127us(100ms),LCD显示“Adverting”。


2、手机连接CC2541时:有时候packet sniffer会看不到连接中的广播包,需要packet sniffer软件“停止-开始”地重开一下。此时广播包间隔约为1290036us(1.2S),LCD显示“Connected Adverting”,手机仍可正常与CC2541通信数据。


3、手机断开CC2541时:CC2541重新开始广播,间隔约为105628us(100ms),LCD显示“Aderting”。

所以,实现了连接时广播。


你可能感兴趣的:(连接,蓝牙,广播,BLE)