【BLE】CC2541之连接时广播

一、简介

本篇以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中)

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

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

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

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

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

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

五、实验现象

注:用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”。

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

版权声明:喝水不忘挖井人,转载请注明出处,897503845@qq.com。

不必在乎目的地,在乎的是沿途的风景以及看风景的心情,让心灵去旅行!

【BLE】CC2541之连接时广播

相关文章:

你感兴趣的文章:

标签云: