微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > CC2541读取苹果手机电量实现

CC2541读取苹果手机电量实现

时间:10-02 整理:3721RD 点击:

CC2541读取苹果手机电量实现       

一、简介

以TI 的SimpleBLEPeripheral工程为例, 介绍CC2541如何读取苹果手机电量并且广播。


二、实验平台

协议栈版本: BLE-CC254x-1.4.0
编译软件: IAR 8.20.2
硬件平台: CC2541 + USB-RS232      USB dongle

手机平台: 苹果4s
APP: LightBlue

三、实现步骤

1.保证项目中有hal_adc.chal_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"


6.修改代码给电源电量预留的位置( simpleBLEPeripheral.c)

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、我也用过电子供电,结果很理想。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top