如何从 android 中的 BLE 设备获取实际值?
How to get actual values from BLE device in android?
在获得血压服务的所有特征后,我无法获得值(来自血压测量机的收缩压、舒张压和脉搏) (uuid: 00002a35-0000-1000-8000-00805f9b34fb) 而且我没有理解所有这些特征和描述符的要点。所以请任何人帮助我解决 BLE 设备中的这个问题。
你问的太笼统了。可能您需要从这个 link.
了解 Android BLE 流程
一个GATT
数据库实现一个或多个profiles(Heart Rate, Audio etc)
,每个配置文件由一个或多个services
组成,每个服务由一个或多个characteristics
.
只是为了让您一瞥,characteristics
是属性,您可以在其中定义要用于读取或写入的属性。
descriptors
是您将数据写入 enable/send 数据的对象。
UUID
您用于发送和接收数据的内容在客户端和服务器之间应该相同。
尝试解析扫描记录,你可能会在那里找到一些信息
Kotlin 代码
enum class EBLE {
EBLE_ZERO, // Zero element
EBLE_FLAGS, //«Flags» Bluetooth Core Specification:
EBLE_16BitUUIDInc, //«Incomplete List of 16-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_16BitUUIDCom, //«Complete List of 16-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_32BitUUIDInc,//«Incomplete List of 32-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_32BitUUIDCom,//«Complete List of 32-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_128BitUUIDInc,//«Incomplete List of 128-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_128BitUUIDCom,//«Complete List of 128-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_SHORTNAME,//«Shortened Local Name» Bluetooth Core Specification:
EBLE_LOCALNAME,//«Complete Local Name» Bluetooth Core Specification:
EBLE_TXPOWERLEVEL,//«Tx Power Level» Bluetooth Core Specification:
EBLE_DEVICECLASS,//«Class of Device» Bluetooth Core Specification:
EBLE_SIMPLEPAIRHASH,//«Simple Pairing Hash C» Bluetooth Core Specification:«Simple Pairing Hash C-192» Core Specification Supplement, Part A, section 1.6
EBLE_SIMPLEPAIRRAND,//«Simple Pairing Randomizer R» Bluetooth Core Specification:«Simple Pairing Randomizer R-192» Core Specification Supplement, Part A, section 1.6
EBLE_DEVICEID,//«Device ID» Device ID Profile v1.3 or later,«Security Manager TK Value» Bluetooth Core Specification:
EBLE_SECURITYMANAGER,//«Security Manager Out of Band Flags» Bluetooth Core Specification:
EBLE_SLAVEINTERVALRA,//«Slave Connection Interval Range» Bluetooth Core Specification:
EBLE_16BitSSUUID,//«List of 16-bit Service Solicitation UUIDs» Bluetooth Core Specification:
EBLE_128BitSSUUID, //«List of 128-bit Service Solicitation UUIDs» Bluetooth Core Specification:
EBLE_SERVICEDATA,//«Service Data» Bluetooth Core Specification:«Service Data - 16-bit UUID» Core Specification Supplement, Part A, section 1.11
EBLE_PTADDRESS,//«Public Target Address» Bluetooth Core Specification:
EBLE_RTADDRESS,//«Random Target Address» Bluetooth Core Specification:
EBLE_APPEARANCE,//«Appearance» Bluetooth Core Specification:
EBLE_DEVADDRESS,//«LE Bluetooth Device Address» Core Specification Supplement, Part A, section 1.16
EBLE_LEROLE,//«LE Role» Core Specification Supplement, Part A, section 1.17
EBLE_PAIRINGHASH,//«Simple Pairing Hash C-256» Core Specification Supplement, Part A, section 1.6
EBLE_PAIRINGRAND,//«Simple Pairing Randomizer R-256» Core Specification Supplement, Part A, section 1.6
EBLE_32BitSSUUID,//«List of 32-bit Service Solicitation UUIDs» Core Specification Supplement, Part A, section 1.10
EBLE_32BitSERDATA,//«Service Data - 32-bit UUID» Core Specification Supplement, Part A, section 1.11
EBLE_128BitSERDATA,//«Service Data - 128-bit UUID» Core Specification Supplement, Part A, section 1.11
EBLE_SECCONCONF,//«LE Secure Connections Confirmation Value» Core Specification Supplement Part A, Section 1.6
EBLE_SECCONRAND,//«LE Secure Connections Random Value» Core Specification Supplement Part A, Section 1.6
EBLE_3DINFDATA, //«3D Information Data» 3D Synchronization Profile, v1.0 or later
EBLE_MANDATA; //«Manufacturer Specific Data» Bluetooth Core Specification:
companion object {
private val map = EBLE.values()
fun fromInt(type: Int) = if (type > 0) map[type] else EBLE_MANDATA
fun getDistance(rssi: Int, txPower: Int) = {
/*
* RSSI = TxPower - 10 * n * lg(d)
* n = 2 (in free space)
*
* d = 10 ^ ((TxPower - RSSI) / (10 * n))
*/
Math.pow(10.0, (txPower.toDouble() - rssi) / (10 * 2))
}
/*
BLE Scan record parsing
*/
fun ParseRecord(scanRecord: ByteArray): Map<EBLE, ByteArray> {
val ret = HashMap<EBLE, ByteArray>()
var index = 0
while (index < scanRecord.size) {
val length = scanRecord[index++].toInt()
//Zero value indicates that we are done with the record now
if (length == 0) break
val type = scanRecord[index].toInt()
//if the type is zero, then we are pass the significant section of the data,
// and we are thud done
if (type == 0) break
Arrays.copyOfRange(scanRecord, index + 1, index + length)?.let {
ret[EBLE.fromInt(type)] = it //HexUtil.formatHexString(it)
}
index += length
}
return ret
}
}
}
在获得血压服务的所有特征后,我无法获得值(来自血压测量机的收缩压、舒张压和脉搏) (uuid: 00002a35-0000-1000-8000-00805f9b34fb) 而且我没有理解所有这些特征和描述符的要点。所以请任何人帮助我解决 BLE 设备中的这个问题。
你问的太笼统了。可能您需要从这个 link.
了解 Android BLE 流程一个GATT
数据库实现一个或多个profiles(Heart Rate, Audio etc)
,每个配置文件由一个或多个services
组成,每个服务由一个或多个characteristics
.
只是为了让您一瞥,characteristics
是属性,您可以在其中定义要用于读取或写入的属性。
descriptors
是您将数据写入 enable/send 数据的对象。
UUID
您用于发送和接收数据的内容在客户端和服务器之间应该相同。
尝试解析扫描记录,你可能会在那里找到一些信息
Kotlin 代码
enum class EBLE {
EBLE_ZERO, // Zero element
EBLE_FLAGS, //«Flags» Bluetooth Core Specification:
EBLE_16BitUUIDInc, //«Incomplete List of 16-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_16BitUUIDCom, //«Complete List of 16-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_32BitUUIDInc,//«Incomplete List of 32-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_32BitUUIDCom,//«Complete List of 32-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_128BitUUIDInc,//«Incomplete List of 128-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_128BitUUIDCom,//«Complete List of 128-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_SHORTNAME,//«Shortened Local Name» Bluetooth Core Specification:
EBLE_LOCALNAME,//«Complete Local Name» Bluetooth Core Specification:
EBLE_TXPOWERLEVEL,//«Tx Power Level» Bluetooth Core Specification:
EBLE_DEVICECLASS,//«Class of Device» Bluetooth Core Specification:
EBLE_SIMPLEPAIRHASH,//«Simple Pairing Hash C» Bluetooth Core Specification:«Simple Pairing Hash C-192» Core Specification Supplement, Part A, section 1.6
EBLE_SIMPLEPAIRRAND,//«Simple Pairing Randomizer R» Bluetooth Core Specification:«Simple Pairing Randomizer R-192» Core Specification Supplement, Part A, section 1.6
EBLE_DEVICEID,//«Device ID» Device ID Profile v1.3 or later,«Security Manager TK Value» Bluetooth Core Specification:
EBLE_SECURITYMANAGER,//«Security Manager Out of Band Flags» Bluetooth Core Specification:
EBLE_SLAVEINTERVALRA,//«Slave Connection Interval Range» Bluetooth Core Specification:
EBLE_16BitSSUUID,//«List of 16-bit Service Solicitation UUIDs» Bluetooth Core Specification:
EBLE_128BitSSUUID, //«List of 128-bit Service Solicitation UUIDs» Bluetooth Core Specification:
EBLE_SERVICEDATA,//«Service Data» Bluetooth Core Specification:«Service Data - 16-bit UUID» Core Specification Supplement, Part A, section 1.11
EBLE_PTADDRESS,//«Public Target Address» Bluetooth Core Specification:
EBLE_RTADDRESS,//«Random Target Address» Bluetooth Core Specification:
EBLE_APPEARANCE,//«Appearance» Bluetooth Core Specification:
EBLE_DEVADDRESS,//«LE Bluetooth Device Address» Core Specification Supplement, Part A, section 1.16
EBLE_LEROLE,//«LE Role» Core Specification Supplement, Part A, section 1.17
EBLE_PAIRINGHASH,//«Simple Pairing Hash C-256» Core Specification Supplement, Part A, section 1.6
EBLE_PAIRINGRAND,//«Simple Pairing Randomizer R-256» Core Specification Supplement, Part A, section 1.6
EBLE_32BitSSUUID,//«List of 32-bit Service Solicitation UUIDs» Core Specification Supplement, Part A, section 1.10
EBLE_32BitSERDATA,//«Service Data - 32-bit UUID» Core Specification Supplement, Part A, section 1.11
EBLE_128BitSERDATA,//«Service Data - 128-bit UUID» Core Specification Supplement, Part A, section 1.11
EBLE_SECCONCONF,//«LE Secure Connections Confirmation Value» Core Specification Supplement Part A, Section 1.6
EBLE_SECCONRAND,//«LE Secure Connections Random Value» Core Specification Supplement Part A, Section 1.6
EBLE_3DINFDATA, //«3D Information Data» 3D Synchronization Profile, v1.0 or later
EBLE_MANDATA; //«Manufacturer Specific Data» Bluetooth Core Specification:
companion object {
private val map = EBLE.values()
fun fromInt(type: Int) = if (type > 0) map[type] else EBLE_MANDATA
fun getDistance(rssi: Int, txPower: Int) = {
/*
* RSSI = TxPower - 10 * n * lg(d)
* n = 2 (in free space)
*
* d = 10 ^ ((TxPower - RSSI) / (10 * n))
*/
Math.pow(10.0, (txPower.toDouble() - rssi) / (10 * 2))
}
/*
BLE Scan record parsing
*/
fun ParseRecord(scanRecord: ByteArray): Map<EBLE, ByteArray> {
val ret = HashMap<EBLE, ByteArray>()
var index = 0
while (index < scanRecord.size) {
val length = scanRecord[index++].toInt()
//Zero value indicates that we are done with the record now
if (length == 0) break
val type = scanRecord[index].toInt()
//if the type is zero, then we are pass the significant section of the data,
// and we are thud done
if (type == 0) break
Arrays.copyOfRange(scanRecord, index + 1, index + length)?.let {
ret[EBLE.fromInt(type)] = it //HexUtil.formatHexString(it)
}
index += length
}
return ret
}
}
}