0

Python 用の BLE ライブラリを使用して、1 つの Nordic nrf51844 チップセットと通信しようとしています。1 つの特性は通知が有効になっているため、記述子の Client Characteristic Configuration を 0x0001 に設定して、クライアント側からの通知を有効にする必要があります。しかし、「characteristic.find_descriptor()」を呼び出して記述子を取得できませんでした。また、発見されたすべての記述子を印刷しようとしましたが、うまくいかないようです。

以下は、Adafruit BLE ライブラリの例を参照して、特性とその記述子を発見するために使用しているコードです。

def enable_notification(characteristic):
    _enableDesc = characteristic.find_descriptor(CLIENT_CHARACTERISTIC_CONFIG_DESCRIPTOR_UUID)
    _cmd = bytearray([0x01, 0x00])
    _enableDesc.write_value(_cmd)

def handle_device_message(device):
    global _status
    # Once connected do everything else in a try/finally to make sure the device
    # is disconnected when done.

    # Wait for service discovery to complete for at least the specified
    # service and characteristic UUID lists.  Will time out after 60 seconds
    # (specify timeout_sec parameter to override).
    _logger.info('Discovering services...')
    device.discover([HES_SERVICE_UUID], [DATA_CHAR_UUID, STATUS_CHAR_UUID, FACTOR_CHAR_UUID])

    # Find the HES service and its characteristics.
    hes = device.find_service(HES_SERVICE_UUID)
    dataC = hes.find_characteristic(DATA_CHAR_UUID)
    statusC = hes.find_characteristic(STATUS_CHAR_UUID)
    #factorC = hes.find_characteristic(FACTOR_CHAR_UUID)

    dataC.list_descriptors()
    statusC.list_descriptors()

    enable_notification(dataC)
    enable_notification(statusC)

ただし、「characteristic.find_descriptor()」で常に失敗し、以下のエラーが発生しました。

_enableDesc =
characteristic.find_descriptor(CLIENT_CHARACTERISTIC_CONFIG_DESCRIPTOR_UUID)
File "build/bdist.macosx-10.11-x86_64/egg/Adafruit_BluefruitLE/interfaces/gatt.py", line 98, in find_descriptor
File "build/bdist.macosx-10.11-x86_64/egg/Adafruit_BluefruitLE/corebluetooth/gatt.py", line 124, in list_descriptors
File "build/bdist.macosx-10.11-x86_64/egg/Adafruit_BluefruitLE/corebluetooth/metadata.py", line 63, in get_all
TypeError: 'NoneType' object is not iterable

ライブラリのソース コードを調べましたが、記述子を明示的に取得するためのインターフェイスが見つかりません。誰でもこれについて私を助けることができますか?

ありがとう!

4

1 に答える 1

0

最後に、IOSのAPIをチェックして通知を設定することでわかりました。ディスクリプタの writeValue の代わりに、characteristic の setNotify を呼び出して設定する必要があります。記述子については、すべての記述子が検出されて返されるまでしばらく待つ必要があることがわかります。Pythonで実装された問題かもしれません。IOS ネイティブ プログラムでは実際には検証されていません。

ところで、通知を設定した後、デバイスがクライアントに通知を送信する前に、しばらく待つ必要があります。

blueZ を使用した実装が正常に機能していることを確認するための Linux ボックスが提供されます。

于 2016-07-15T06:31:21.503 に答える