pygatt:无法执行 device.subscribe()

pygatt: Unable to execute device.subscribe()

我正在尝试订阅 GATT 特性。

我已经在我的 BLE 设备中为 GATT 特性设置了 "Indicate"、"Notify" 和 "Read" 属性。

我能够连接到我的 BLE 设备并read/write连接到其他特性。

但是,我无法执行此特定特征的 device.subscribe() 函数。

当我使用

device.subscribe("845ce63c-d003-423c-8922-818676d34255", callback=handle_data)

我收到错误

pygatt.backends.bgapi.exceptions.ExpectedResponseTimeout: Timed out after 10.000000s waiting for []

在link https://github.com/peplin/pygatt/blob/master/pygatt/device.py,订阅函数有参数"wait_for_response"

在我的代码中,如果我使用

device.subscribe("845ce63c-d003-423c-8922-818676d34255", callback=handle_data, wait_for_response=True)

显示错误

TypeError: subscribe() got an unexpected keyword argument 'wait_for_response'

如何消除这些错误并订阅该特征?

编辑:

我将 Read 和 Write 属性连同 Notify 和 Indicate 添加到特性中

我可以使用以下代码读取和写入特性:-

import pygatt

adapter = pygatt.BGAPIBackend()

try:

    adapter.start()

    device = adapter.connect('xx:xx:xx:xx:xx:xx')

    print("Connected")

    #value = device.char_write_handle(55, bytearray([0x00,0x01]), wait_for_response=True)

    value = device.char_read_handle(55)

    print(value)

finally:

    adapter.stop()

但是,我无法订阅。

我真的卡在这里了。

非常感谢任何帮助!

重新审视这个问题后,我发现在添加一些延迟后,我可以订阅特性:

代码如下:-

import pygatt
import time
from binascii import hexlify

adapter = pygatt.BGAPIBackend()

def handle_data(handle, value):
    """
    handle -- integer, characteristic read handle the data was received on
    value -- bytearray, the data returned in the notification
    """
    print("Received data: %s" % hexlify(value))

try:
    time.sleep(5)
    adapter.start()
    time.sleep(5)
    device = adapter.connect('xx:xx:xx:xx:xx:xx')
    time.sleep(5)

    device.subscribe("845ce63c-d003-423c-8922-818676d34255",
                     callback=handle_data)
    time.sleep(5)
    while 1:
        pass
finally:
    print("Adapter Stopped")
    adapter.stop()