Включить индикацию с делегацией bluepy - PullRequest
0 голосов
/ 06 октября 2018

Я могу просматривать службы и характеристики моего устройства BLE в bluepy, но я не могу получить асинхронные указания для печати.Я посмотрел на предложения в этом вопросе , но не могу заставить его работать.

Он работает при использовании gattool:

$ sudo gatttool -b "DF:01:93:A9:86:FF" -t random  --char-write-req --handle=0x002c --value=0200 --listen
Characteristic value was written successfully
Indication   handle = 0x002b value: 00 8a 00 
Indication   handle = 0x002b value: 00 8a 00 
Indication   handle = 0x002b value: 30 30 2d

Но яне может заставить bluepy сделать то же самое:

from bluepy.btle import Scanner, DefaultDelegate, Peripheral, ADDR_TYPE_RANDOM

class ReadCharacteristicDelegate(DefaultDelegate):
    def __init__(self):
        DefaultDelegate.__init__(self)

    def handleNotification(self, cHandle, data):
        print "  got data: 0x%x" % data

periph = Peripheral('df:01:93:a9:86:ff', addrType=ADDR_TYPE_RANDOM)
periph.setDelegate(ReadCharacteristicDelegate())
periph.writeCharacteristic(0x002c, "\0x02\0x00")
print "Enabled indications"
while True:
    if periph.waitForNotifications(3.0):
        # handleNotification() was called
        continue
    print("Waiting")

Он работает, но никаких указаний не выводится:

$ sudo python simple.py 
Enabled indications
Waiting
Waiting

1 Ответ

0 голосов
/ 12 октября 2018

Я нашел проблему.Произошла опечатка при вызове writeCharacteristic ().Очевидно, что байты не должны иметь начальный «0» в них.Как только это было исправлено, обратный вызов печати данных также должен был быть обновлен для обработки 3 байтов поступающих данных. Теперь это работает:

from bluepy.btle import Scanner, DefaultDelegate, Peripheral, ADDR_TYPE_RANDOM
from struct import unpack

class ReadCharacteristicDelegate(DefaultDelegate):
    def __init__(self):
        DefaultDelegate.__init__(self)

    def handleNotification(self, cHandle, data):
        print "got handle: 0x%x  data: 0x%x" % (cHandle, unpack('>i','\x00'+data)[0])

periph = Peripheral('df:01:93:a9:86:ff', addrType=ADDR_TYPE_RANDOM)
periph.setDelegate(ReadCharacteristicDelegate())
periph.writeCharacteristic(0x002c, b"\x02\x00")
print "Enabled indications"
while True:
    if periph.waitForNotifications(3.0):
        # handleNotification() was called
        continue
    print("Waiting")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...