【BLE】CC2541之通过广播发送自定义数据
来源:互联网 发布:青牛软件手机卡 编辑:程序博客网 时间:2024/06/04 20:13
本篇博文最后修改时间:2017年01月06日,11:06。
一、简介
本文以SimpleBLEPeripheral为例,将自定义的数据写入广播数据中,通过一个周期事件定时刷新广播数据。
二、实验平台
协议栈版本:BLE-CC254x-1.4.0
编译软件:IAR 8.20.2
硬件平台:Smart RF(主芯片CC2541)、USB dongle
三、版权声明
博主:甜甜的大香瓜
声明:喝水不忘挖井人,转载请注明出处。
原文地址:http://blog.csdn.NET/feilusia
联系方式:897503845@qq.com
香瓜BLE之CC2541群:127442605
香瓜BLE之CC2640群:557278427
香瓜BLE之Android群:541462902
五、基础知识
暂无
六、实验步骤
1、修改初始化广播数据(SimpleBLEPeripheral.c中)
static uint8 advertData[] ={ //自定义的广播数据段 0x03, GAP_ADTYPE_MANUFACTURER_SPECIFIC, 0,//自定义数据1 0,//自定义数据2 // Flags; this sets the device to use limited discoverable // mode (advertises for 30 seconds at a time) instead of general // discoverable mode (advertises indefinitely) 0x02, // length of this data GAP_ADTYPE_FLAGS, DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED, // service UUID, to notify central devices what services are included // in this peripheral 0x03, // length of this data GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all LO_UINT16( SIMPLEPROFILE_SERV_UUID ), HI_UINT16( SIMPLEPROFILE_SERV_UUID ),};
2、定义两个变量(SimpleBLEPeripheral.c中)
static uint8 sTemperature_H = 0; //温度高位static uint8 sTemperature_L = 0; //温度低位本篇的自定义数据是两个温度数据,一个高位数据,一个低位数据。
3、定义一个周期事件
1)定义一个周期事件(SimpleBLEPeripheral.c的SimpleBLEPeripheral_ProcessEvent中)
//周期性广播处理事件 if ( events & SBP_ADV_PERIODIC_PROCESS_EVT ) { advertData[2] = ++sTemperature_H; //把温度高位值放到广播数据中 advertData[3] = ++sTemperature_L; //把温度低位值放到广播数据中 GAP_UpdateAdvertisingData(simpleBLEPeripheral_TaskID, TRUE, sizeof(advertData), advertData ); //更新广播数据 osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_ADV_PERIODIC_PROCESS_EVT, sBp_adv_periodic_process_evt_period ); return (events ^ SBP_ADV_PERIODIC_PROCESS_EVT); }这里将温度值变量累加,以便快速看到广播数据改变的现象。
2)定义一个周期事件的宏(SimpleBLEPeripheral.h中)
#define SBP_ADV_PERIODIC_PROCESS_EVT 0x2000 //周期性广播处理事件
static uint32 sBp_adv_periodic_process_evt_period = 1000; //周期时间默认是1000,也就是1S。
如果需要2S更新一次温度数据,则改为2000。
4、启动周期事件(SimpleBLEPeripheral.c的SimpleBLEPeripheral_ProcessEvent中)
if ( events & SBP_START_DEVICE_EVT ) { // Start the Device VOID GAPRole_StartDevice( &simpleBLEPeripheral_PeripheralCBs ); // Start Bond Manager VOID GAPBondMgr_Register( &simpleBLEPeripheral_BondMgrCBs ); // Set timer for first periodic event //osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD ); //启动周期性广播处理事件 osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_ADV_PERIODIC_PROCESS_EVT, sBp_adv_periodic_process_evt_period ); return ( events ^ SBP_START_DEVICE_EVT ); }
七、注意事项
手机可能缓存了之前的代码(在更新过CC2541的代码之后,都需要清除手机端的缓存!!!),因此要清除缓存,清除缓存的方法如下:
方法一:关闭app、关闭蓝牙总开关、打开蓝牙总开关、打开app。
方法二:手机重启。
八、实验结果
1、当广播的数据的温度值为0x09时,时间为942490us。
2、当广播的数据的温度值为0x0A时,时间为1891854us。
所以,更新一次广播数据的时间为1891854us-942490us=949364us,约为1S,协议栈的定时时间会有误差。
因此成功地定时通过广播发送出了自定义的数据,实验成功。
- 【BLE】CC2541之通过广播发送自定义数据
- 【BLE】CC2541之广播MAC
- 【BLE】CC2541之动态广播
- 【BLE】CC2541之主机端获取广播包数据
- 【BLE】CC2541之自定义按键
- 【BLE】CC2541之开启广播过程
- 【BLE】CC2541之修改广播时间
- 【BLE】CC2541之修改广播通道
- 【BLE】CC2541之连接时广播
- 【BLE】CC2541之通过RSSI测距
- 【BLE】CC2541之通过RSSI测距
- 【BLE】CC2541之添加自定义服务
- 【BLE】CC2541之自定义长短按键
- 【BLE】CC2541之添加自定义任务
- 【BLE】CC2541之自定义IO输出
- 【BLE】CC2541之数据加密与解密
- BLE CC2541修改广播时间
- 【BLE】CC2541之notify
- 在摄影表中把所有骨骼关键帧显示出来
- LeetCode 70 Climbing Stairs(爬楼梯)(动态规划)(*)
- Android UI之AutoCompleteTextView
- Android UI基础之Dialog对话框的使用
- Derivatives of matrix
- 【BLE】CC2541之通过广播发送自定义数据
- 欢迎使用CSDN-markdown编辑器
- Python字典
- 二十一(随机初始化在无监督特征学习中的作用)
- 二十二(linear decoder练习)
- 二十三(Convolution和Pooling练习)
- 二十四(stacked autoencoder练习)
- 二十五(Kmeans单层网络识别性能)
- STL vector提高效率注意事项与技巧