繁体   English   中英

如何从 Android 中的 BLE 设备读取数据?

[英]How does one read data from a BLE device in Android?

我的手机应用程序应该是中央设备,BLE 套件应该是外围设备。 我已经设法写信给 Kit,就像发送数据一样。 根据它的文档,套件本身具有: 在此处输入图像描述

根据文档: Rx(接收)和 Tx(发送)特性是从 Peripheral BGX 设备的角度命名的。

要发送要由外设串行接口接收的字符串,请写入 Rx 特性。

要读取从外围串行接口传输的字符串,请从 Tx 特性启用通知或指示,然后等待后续通知或指示事件发生。

那么,如果接收数据的特性没有 READ 作为其属性之一,我应该如何从提到的设备中读取数据呢?

当我在向设备写入数据时发送数据时,我使用了writeCharacteristic function

  fun write(message:String){
    val bytes = BigInteger(message.replace("\\s".toRegex(), ""), 16).toByteArray()
    Timber.i("Bytes value ---> ${bytes.toHexString()}")
    val device = getBleDevice()
    val characteristicRX = getBleCharacteristic()
    writeCharacteristic(device, characteristicRX, bytes)
}

然后我会调用这个 function 来发送:

fun sendMessage(message:String){
    Timber.i("Check if isConnected = true --> ${isConnected.value}")
    if(isConnected.value == true){
        write(message)
    }else{
       Timber.e("Make sure that you connected and paired with the desired device.")
    }
}

那么我如何 go 关于接收数据而不是从 BLE 设备? readCharacteristic function 不会在这里发挥作用吗? 我问这个是因为我正在处理的代码最初是为使用经典蓝牙交换数据而设计的,而我的任务是将其转换为 BLE。 但是当我使用串行监视器查看正在发送的字节时,我发现应该触发接收数据的按钮正在将其发送到套件。 这引起了我的注意,因为我还没有开始研究读取机制,我在这里发布的屏幕截图也让我感到困惑,因为我认为TX特性将是一个可读不可写的特性。

在我的应用程序中,每个参数都有一个代码。 如果它是一个写命令,它看起来像这样:

  enum class WriteCommandCodes(val value: String) {
    TOOL_ADDRESS("08 00 00 00 20 30 04 27"),
    RPM_THRESHOLD("08 00 00 00 20 30 04 13"),
    BACKLASH_1("08 00 00 00 20 30 04 22"),
    BACKLASH_2("08 00 00 00 20 30 04 23"),
    DELAY("08 00 00 00 20 30 04 20"),

    BATTERY1_CAPACITY("08 00 00 00 20 30 0F"),
    BATTERY2_CAPACITY("08 00 00 00 20 30 10")}

稍后创建的有效负载具有参数的代码和正在发送的数据。

对于读取参数,我有这个:

 enum class ReadRequestCodes(val value: String) {
    KEY_ADDRESS("08 00 00 00 20 30 05 11 00 00 00 00 00"),
    TOOL_ADDRESS("08 00 00 00 20 30 05 27 00 00 00 00 00"),
    RPM_THRESHOLD("08 00 00 00 20 30 05 13 00 00 00 00 00"),
    BACKLASH("08 00 00 00 20 30 05 22 00 00 00 00 00"),

    POWER_SRC_TYPE("08 00 00 00 20 30 05 26 00 00 00 00 00"),
    BATTERY1_PERCENTAGE("08 00 00 00 20 30 11 00 00 00 00 00 00"),
    BATTERY2_PERCENTAGE("08 00 00 00 20 30 12 00 00 00 00 00 00")}

应该会发生同样的情况,唯一不同的是我这次会收到。

是的,您覆盖默认的 onCharacteristicChanged 方法并实现您想要对新数据执行的操作。 你可以看到有人在这里做类似的事情

BLE 从特性接收 GATT 通知

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM