Получение данных с PolarH10 через BLE

Я пытался получить данные с моего PolarH10 с помощью моего raspberry-pi. Я успешно получал данные через командную строку с помощью bluez, но не смог воспроизвести это в python. Я использую pygatt (привязки gatttool) и python3.

Я внимательно следил за примерами, представленными на bitbucket, и смог обнаружить мое устройство. и отфильтруйте его MAC-адрес, отфильтровав его по имени. Однако мне не удалось заставить работать ни один из примеров «асинхронного чтения данных».


#This doesnt work...
req = gattlib.GATTRequester(mymac)
response = gattlib.GATTResponse()

req.read_by_handle_async(0x15, response) # what does the 0x15 mean?
while not response.received():
    time.sleep(0.1)

steps = response.received()[0]


...

#This doesn't work either
class NotifyYourName(gattlib.GATTResponse):
    def on_response(self, data):
        print("your data is: {}".format(data))

response = NotifyYourName()
req = gattlib.GATTRequester(mymac)
req.read_by_handle_async(0x15, response)

while True:
    # here, do other interesting things
    time.sleep(1)

Я не знаю и не могу извлечь из «документации» как подписаться/прочитать уведомления по характеристике (пульс) моего датчика (PolarH10). Я получаю сообщение об ошибке при вызове GATTRequester.connect(True)

RuntimeError: Channel or attrib not ready.

Подскажите, пожалуйста, как правильно подключиться к BLE-устройству через Python на Debian и как программно идентифицировать предлагаемые сервисы и их характеристики и как асинхронно получать их уведомления в python с помощью gattlib(pygatt) или любой другой библиотеки. Спасибо!


person jaaq    schedule 19.06.2019    source источник


Ответы (2)


У меня есть устройство, которое демонстрирует такое же поведение. В моем случае проблема была в том, что у него нет канала типа public, вместо него надо использовать random (как в gatttool -b BE:BA:CA:FE:BA:BE -I -t random).

Простой вызов метода connect() с параметром от channel_type до random может это исправить:

requester.connect(True, channel_type="random")

PD: Извините за поздний ответ (может быть, это будет полезно для других).

person oscarah    schedule 17.01.2020

Ответ: просто используйте bleak.

person jaaq    schedule 16.07.2019