电池电量状态 (0x2A1B) 蓝牙规范是啥意思?

Posted

技术标签:

【中文标题】电池电量状态 (0x2A1B) 蓝牙规范是啥意思?【英文标题】:What does Battery level state (0x2A1B) Bluetooth specification mean?电池电量状态 (0x2A1B) 蓝牙规范是什么意思? 【发布时间】:2018-09-11 17:16:01 【问题描述】:

电池电量状态 (0x2A1B) 未列在蓝牙文档中的 Battery Service 规范下,只有 电池电量 (0x2A19) 列出。但是,当读取 Battery Service 下的特征 Battery Level State (0x2A1B) 时,会发现 0x2A1B 特征并返回 false,而不是错误或 null

找到这个example,其中true在读取电池电量(0x2A19,org.bluetooth.characteristic.battery_level)时返回,它被列为值字段之一电池电量状态 (0x2A1B) 的说明。

电池电量状态“包括”电池电量,根据specs:

编辑:使用 Nordic Connect android 应用读取电池电量状态 (0x2A1B) 时,值为:Invalid data syntax: (0x) 64, "d"

问题:

    电池电量状态 (0x2A1B) 属于什么蓝牙服务?是否是电池服务false 成功返回?其他 *** question 询问 电池电量状态 (0x2A1A),它也列在 电池电量状态 下。这是如何工作的? 读取特征返回的falsetrue 表示什么?

-

背景: 我正在尝试通过 Android 应用程序从 nRF51822 模块(基于Adafruit Bluefruit 32u4 LE)读取电池电量。

发现的服务和特征包括电池服务 (0x180F)电池电量状态特征 (0x2A1B)。还尝试根据Adafruit tutorial 添加自定义特征来读取电池电量,但Android应用找不到新添加的特征。但是,使用 AT 命令读取特征是有效的 - 模块返回 int

我正在阅读 onServicesDiscovered 中的 0x2A1B 特征。我可以成功阅读的其他特征。这是 Android 应用程序中的代码,基于this thread:

static String BATTERY_SERVICE_UUID = "0000180f-0000-1000-8000-00805f9b34fb";
static String BATTERY_LEVEL_UUID = "00002a1b-0000-1000-8000-00805f9b34fb";

@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) 
    if (status == BluetoothGatt.GATT_SUCCESS) 
        //Read the battery level
        getbattery(gatt);
     


void getbattery(BluetoothGatt mGatt) 
    BluetoothGattService batteryService = mGatt.getService(BATTERY_SERVICE_UUID);
    if(batteryService == null) 
        Log.i("BATTERYX", "Battery service not found!");
        return;
    
    Log.i("BATTERYX", "Battery service found!");

    BluetoothGattCharacteristic batteryLevel = batteryService.getCharacteristic(BATTERY_LEVEL_UUID);
    if(batteryLevel == null) 
        Log.i("BATTERY", "Battery characteristic not found!");
        return;
     Log.i("BATTERYX", "Battery characteristic found!");
    Log.i("BATTERYX", String.valueOf(mGatt.readCharacteristic(batteryLevel)));

这是已发现服务和特征的完整列表。

## SERVICES
[UUID=00001800-0000-1000-8000-00805f9b34fb, NAME=Service Unknown, 
UUID=00001801-0000-1000-8000-00805f9b34fb, NAME=Service Unknown, 
UUID=00001530-1212-efde-1523-785feabcd123, NAME=Service Unknown, 
UUID=0000180a-0000-1000-8000-00805f9b34fb, NAME=Service Unknown, 
UUID=6e400001-b5a3-f393-e0a9-e50e24dcca9e, NAME=SERIAL_TRANSFER_SERVICE_UUID, 
UUID=0000180f-0000-1000-8000-00805f9b34fb, NAME=BATTERY_SERVICE_UUID]


## CHARACTERISTICS
[[UUID=00002a00-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown, //Device
UUID=00002a01-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown,   //Appearance
UUID=00002a04-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown],  //Peripheral Preferred Connection Parameters
[UUID=00002a05-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown], //Service Changed

[UUID=00001532-1212-efde-1523-785feabcd123, NAME=Characteristic Unknown, 
UUID=00001531-1212-efde-1523-785feabcd123, NAME=Characteristic Unknown, 
UUID=00001534-1212-efde-1523-785feabcd123, NAME=Characteristic Unknown],

[UUID=00002a29-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown, //Manufacturer Name String
UUID=00002a24-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown,  //Model Number String
UUID=00002a28-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown,  //Software Revision String
UUID=00002a26-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown,  //Firmware Revision String
UUID=00002a27-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown], //Hardware Revision String

[UUID=6e400003-b5a3-f393-e0a9-e50e24dcca9e, NAME=SERIAL_TRANSFER_CHARACTERISTIC, 
UUID=6e400002-b5a3-f393-e0a9-e50e24dcca9e, NAME=Characteristic Unknown],

[UUID=00002a1b-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown]] //Battery level state

【问题讨论】:

【参考方案1】:

电池电量状态应为您提供从 0 到 64 (100) 百分比的电池电量

【讨论】:

以上是关于电池电量状态 (0x2A1B) 蓝牙规范是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

电池电量低于 40% 时是不是可以关闭蓝牙?

睡眠 休眠 关闭硬盘 分别是啥意思?

手机怎样显示蓝牙耳机的电量

在 Linux 上检查连接的蓝牙设备的电池电量

如何在独立的智能手表应用程序或表盘中检查蓝牙连接手机的电池电量? [关闭]

安卓 电量显示小数