当前位置: 首页 > 知识库问答 >
问题:

如何从android中的BLE设备获取实际值?

蒋茂
2023-03-14

在获得血压服务的所有特征(uuid:00002a35-0000-1000-8000-00805f9b34fb)后,我无法获得这些值(血压测量机的收缩、舒张和脉搏),而且我也不了解所有这些特征和描述符的意义。所以请大家帮我解决这个问题。

共有2个答案

晋奕
2023-03-14

尝试解析扫描记录,您可能会在那里找到一些信息

静态编程语言代码

    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
    }
    }
}
况明贤
2023-03-14

你问的问题太笼统了。也许你需要从这个链接中了解Android的流程。

有关BLE,请参阅本教程

一个GATT数据库实现一个或多个配置文件(心率,音频等),每个配置文件由一个或多个服务组成,每个服务由一个或多个服务组成。代码>特性

只是为了让您一瞥,特性是属性,您在其中定义要用于读取或写入的属性。

描述符是在其上写入数据以启用/发送数据的对象。

UUID用于发送和接收数据的内容应该在客户端和服务器之间相同。

 类似资料:
  • 我正在开发一个与硬件设备连接的BLE(蓝牙LE)应用程序。我能够发现并连接到设备,从设备读取数据,将数据写入设备。 我在苹果的BLE文档中找不到的是,当你靠近一台设备时,当应用程序关闭时,如何获得通知。 我知道如何注册到特征通知,但此通知仅在应用程序位于后台时发生。 我知道可以在应用程序关闭时检测蓝牙,并发送通知,但我想在设备发现具有的特定BLE时收到通知。 iBeacon正在将BLE与UUID、

  • 我拥有一个极地H10胸带,它以蓝牙低能量运行,并提供心率和心率变化。 我想用Android应用程序读取这些值。由于官方BLE教程中的帮助,我能够连接到设备。现在的问题是从设备中读取心率和心率变异性值。每次设备上有新值可用时,我都要读取该值(并且至少每秒都有新值)。 我找到了以下代码: 假设我与设备有连接,我如何使用它来提取心率和r-r间隔(节拍到节拍间隔)?如果有人能举个简短的例子,我会很高兴。此

  • 如何在objective C或swift中获取设备的MAC地址。有没有办法从“标识符”字段获取MAC地址。

  • 如何从设备读取RAW数据?

  • 我们可以从adb shell获取连接到android设备的设备列表吗?

  • 现在与android 10更新的权限和安全性,我们不能访问用户的设备ID和IMEI号码,但我想要一些设备的唯一ID,以便我们可以跟踪用户。 要求是我们想要/限制一部手机的一次登录