1. 程式人生 > >CC2541讀取電池電量並且廣播出去

CC2541讀取電池電量並且廣播出去

                                                                                                             CC2541之電池電量查詢並廣播                         

一、簡介

     以SimpleBLEPeripheral工程為例, 介紹如何讀取電量並且廣播。

二、實驗平臺

協議棧版本: 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、我也用過電子供電,結果很理想。


我是一個無線通訊愛好者

希望這篇部落格可以幫到更多的人

注:

      本人新手,寫部落格想記錄成長曆程還有請大神們指正不足之處,還有許多不足的地方,希望各位大神不吝賜教。謝謝

相關推薦

CC2541讀取電池電量並且廣播出去

                                                                                                   

在U-BOOT中實現讀取電池電量

platform: s3c2440 + u-boot 1.1.4 + linux 2.6.18       為了防止低電開機啟動到一半的時候系統down掉,所以有必要在 u-boot 中加入電池電量的偵測。 偵測電池電量只需讀 AN0 口上的 AD 值就可以了,當電量少於 5

【BLE】CC2541電池電量服務

本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文以SimpleBLEPeripheral工程為例,介紹如何新增一個電池電量服務。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體: IAR 8.20.2 硬體平臺: Smar

adb命令檢測apk啟動時間、內存、CPU使用情況、流量、電池電量等——常用的adb命令

serial 信息 proc idg 情況 電量 pid art str ADB:Android Debug Bridge,是Android SDK裏一個可以直接操作安卓模擬器或真實設備的工具,頗為強大。 檢測APP: adb shell am start

【API】Windows 獲取電池電量信息

api 註意 電池 time life per 信息 獲取 word typedef struct _SYSTEM_POWER_STATUS { BYTE ACLineStatus; BYTE BatteryFlag; BYTE BatteryLifePerc

MTK Android O 充電狀態下電池電量100%時不顯示閃電圖示

需求: android 8.1.1版本google原生充電的時候都會顯示一個閃電的形狀,客戶要求在百分之百電量的時候不顯示閃電 修改: frameworks\base\packages\SettingsLib\src\com\android\settingslib\graph\Bat

手機電池電量較準

嘗試電量計校準,方法如下: 一、滿電後持續充電 使用充電器給手機充電,充滿至100%後繼續保持充電狀態1小時左右,即可完成電量計校準。注意過程中手機需保持休眠,不可被操作或者APP後臺喚醒(建議睡覺時,將手機清理後臺、關閉網路充電一晚上)。 二、完整充放電並靜置 手機先充滿電

Android基礎(四)自動服務1.獲取電池電量

xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" a

讀取tif檔案 並且分別儲存

import os import numpy as np import glob import cv2 from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array

QT讀取csv檔案並且繪製折線圖

void MainWindow::readcsvfile() //讀取csv { QFile csvFile("C:/Users/Administrator/Desktop/Demo/0702.CSV"); QStringList csvList; csvList.cl

SIM868——AT+CBC 監測鋰電池電量理解與測試

【鋰電池供電電路及掉電閾值】:可支援輸入的鋰電池電壓為3.4V~4.4V,因訊號傳輸時電流大造成電壓降落,手冊中的測試條件顯示電壓降落最大350mV,而SIM868硬體自動掉電的閾值是3.0V,故設計時監測到鋰電池電壓下降到3.4V就該及時充電了。 【AT指令監測電量】AT+C

[RK3288][Android6.0] 除錯筆記 --- 電池電量一直顯示100%

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 跟蹤發現Android6.0相比之前的Android4.4會判斷Charger是否存在,不

電池電量百分比修改

/bootable/bootloader/lk/target/newmobi6735_66t_v_l1/include/target/cust_battery.h (充電電流修改) /kernel-3

讓狀態列上有顯示電池電量百分比

我們所使用的Android手機的狀態列上,一般都有電池電量百分比的顯示,方便使用者知悉手機剩餘百分之多少電量!我們的P6S手持機和ITAB-01平板上需要下拉狀態列才能看到電池電量百分比:為了讓使用者能夠更直觀的看到我們的產品上電池的使用情況,我在狀態列上添加了電池電量百分比

android 4.4 電池電量管理底層分析(C\C++層)

參考文獻:http://blog.csdn.net/wlwl0071986/article/details/38778897 簡介: Linux電池驅動用於和PMIC互動、負責監聽電池產生的相關事件,例如低電報警、電量發生變化、高溫報警、USB插拔等等。 Android電池

獲取Android裝置電池電量狀態

方法一:註冊廣播 這個方法網上一搜一大堆,我也貼出部分程式碼 IntentFilter filter2 = new IntentFilter(); filter2.addAction(Inten

ZIGBEE學習筆記五——讀取溫度電量資訊

1、感測器節點sensor採集資料發往收集節點collector 什麼時候感測器節點開始讀取溫度電池電量資訊的? 從繫結成功後開始的,看下zb_BindConfirm()這個函式: ********************************* void zb_BindConfirm( uint16

android 獲取充電狀態 電池電量

public class MainActivity extends Activity { /** * 先宣告一個 IntentFilter 物件 */ private IntentFilter mIntentFilter; private TextVie

電池電量資訊顯示

佈局:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"

電池電量報警關機策略和電量圖示變化規則表

為幫助大家除錯和查閱, jwisp總結了電池電量報警, 關機, 電量圖示變化規則表. 如下: 關鍵類和其位置: BatteryService.java (/frameworks/base/services/java/com/android/server/) com_android_server_Batter