CC2541读取电池电量并且广播出去
来源:互联网 发布:淘宝官方活动 编辑:程序博客网 时间:2024/05/22 10:37
CC2541之电池电量查询并广播
一、简介
以SimpleBLEPeripheral工程为例, 介绍如何读取电量并且广播。
协议栈版本: BLE-CC254x-1.4.0
编译软件: IAR 8.20.2
硬件平台: CC2541 + USB-RS232 USB dongle
手机平台: 苹果4s
APP: LightBlue
三、实现步骤
1.保证项目中有hal_adc.c和hal_adc.h
2.添加Profile如下图所示
我的文件路径在:C:\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\Profiles\Batt
(如果找不到建议下载一个“光速搜索”,这个软件用起来很好用)
3.添加两文件的路径(因为我的改了名字,你们的不必和我的一致,和你们的名字相同就行了)
4.打开ADC采样的宏
5.添加头文件(simpleBLEPeripheral.c)
#include "battservice.h"
static uint8 advertData[] =
{
0x07,
GAP_ADTYPE_MANUFACTURER_SPECIFIC, // manufacturer specific advertisement data type
0x20, //给MAC地址预留位置 2
0x20,
0x20,
0x20,
0x20,
0x20, // 7
0x01,
GAP_ADTYPE_MANUFACTURER_SPECIFIC, // manufacturer specific advertisement data type
0x20,//给电池电量预留的位置 10
7.添加相应的变量 (simpleBLEPeripheral.c)
8、添加相应的代码(simpleBLEPeripheral.c)
//读取电池电量
Batt_GetParameter(BATT_PARAM_LEVEL,battLevel);
osal_memcpy (advertData + 10, battLevel,1);
//更新广播数据
GAP_UpdateAdvertisingData(simpleBLEPeripheral_TaskID,TRUE,sizeof(advertData),advertData );
读取电池电量这里需要注意我在simpleBLEPeripheral.c中调用battservice.c中调用下面这个函数
不能用,我也添加了相应的声明在“.h”文件中 并且把static去掉了还是不能再其他的.c文件中调用。只能在
battservice.c中调用(这个希望大神们指导)
在下面这个函数中调用battMeasure函数读取相应的电池电量。(battservice.c)
bStatus_t Batt_GetParameter( uint8 param, void *value )
{
bStatus_t ret = SUCCESS;
switch ( param )
{
case BATT_PARAM_LEVEL:
//wodejiqing
battLevel = battMeasure();
*((uint8*)value) = battLevel;
break;
9、在 simpleBLEperipheral.h中添加一个新的事件
10、在 simpleBLEperipheral.c中下面位置启动这个事件
11.添加相应的处理函数(我的是广播30秒后不再广播)
//周期性广播处理事件
if ( events & SBP_ADV_PERIODIC_PROCESS_EVT )
{
static uint8 k = 0;
osal_memcpy (advertData + 2, ownAddress,6);
osal_memcpy (advertData + 10, battLevel,1);
// GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );
GAP_UpdateAdvertisingData(simpleBLEPeripheral_TaskID,TRUE,sizeof(advertData),advertData ); //更新广播数据
k += 2;
if(k <= 30 )
{
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_ADV_PERIODIC_PROCESS_EVT, adv_per_time );
}else{
uint8 initial_advertising_enable = FALSE;
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );
}
return (events ^ SBP_ADV_PERIODIC_PROCESS_EVT);
}
然后就可以了
下面是运行结果因为用的是usb供电所以电量一直未100、我也用过电子供电,结果很理想。
我是一个无线通信爱好者
希望这篇博客可以帮到更多的人
注:
本人新手,写博客想记录成长历程还有请大神们指正不足之处,还有许多不足的地方,希望各位大神不吝赐教。谢谢
- CC2541读取电池电量并且广播出去
- CC2541之电池电量服务
- CC2541之电池电量服务
- 【BLE】CC2541之电池电量服务
- cc2541 低功耗广播
- CC2541广播MAC地址
- 如何实现只收听一次sticky的广播,读取电池电量的值
- 广播接收器-BroadcastReceiver 电池电量显示
- 监听电池电量之粘性广播
- 读取bq26500电池电量 Driver
- 系统广播详解之电池电量广播
- 【BLE】CC2541之广播MAC
- 【BLE】CC2541之动态广播
- CC2541之连接时广播
- BLE CC2541修改广播时间
- c# Windows CE读取电池电量
- 【BLE】CC2541之开启广播过程
- [BLE] CC2541的开启广播过程
- IT行业专业术语
- SSM框架——实现分页和搜索分页
- 线性表
- 【深入Java虚拟机】之二:Class类文件结构
- 开启博客之旅
- CC2541读取电池电量并且广播出去
- 习题 6-5 UVA 1600 Patrol Robot 巡逻的机器人
- Drupal:为什么用中文搜索没有结果?
- 【深入Java虚拟机】之三:类初始化
- ios Apple Pay 简单使用
- android官网图像与动画章节demo的分析
- 闭包
- 【bzoj4104】[Thu Summer Camp 2015]解密运算 乱搞
- Codeforces Round #343 (Div. 2) Problem A & B