pyUSB получает непрерывный поток данных с датчика

У меня есть устройство, подключенное через usb, и я использую pyUSB для взаимодействия с данными.

Вот как сейчас выглядит мой код:

import usb.core
import usb.util

def main():
    device = usb.core.find(idVendor=0x072F, idProduct=0x2200)

    # use the first/default configuration
    device.set_configuration()

    # first endpoint
    endpoint = device[0][(0,0)][0]

    # read a data packet
    data = None
    while True:
        try:
            data = device.read(endpoint.bEndpointAddress,
                               endpoint.wMaxPacketSize)
            print data

        except usb.core.USBError as e:
            data = None
            if e.args == ('Operation timed out',):

                continue

if __name__ == '__main__':
  main()

Он основан на считывателе мыши, но данные, которые я получаю, не имеют для меня смысла:

array('B', [80, 3])
array('B', [80, 2])
array('B', [80, 3])
array('B', [80, 2])

Я предполагаю, что он читает только часть того, что на самом деле предоставляется? Я пытался установить maxpacketsize больше, но ничего.


person Stupid.Fat.Cat    schedule 27.03.2015    source источник


Ответы (2)


pyUSB отправляет и получает данные в строковом формате. Данные, которые вы получаете, представляют собой коды ASCII. Вам нужно добавить следующую строку, чтобы правильно прочитать данные в коде.

data = device.read(endpoint.bEndpointAddress,
                           endpoint.wMaxPacketSize)

RxData = ''.join([chr(x) for x in data])
print RxData

Функция chr(x) преобразует коды ASCII в строку. Это должно решить вашу проблему.

person KiranCP    schedule 23.06.2015

Я лишь случайный пользователь Python, так что будьте осторожны. Если ваш скрипт Python не справляется с объемом выборки данных, то это то, что работает для меня. Я отправляю с УК на ПК блоки по 64 байта. Я использую буфер для хранения сэмплов, а позже сохраняю их в файл или рисую. Я корректирую число, умножая 64 (10 в приведенном ниже примере), пока не получу все ожидаемые образцы.

# Initialization
rxBytes = array.array('B', [0]) * (64 * 10)
rxBuffer = array.array('B')

В цикле я получаю новые образцы и сохраняю их в буфере.

# Get new samples
hid_dev.read(endpoint.bEndpointAddress, rxBytes)
rxBuffer.extend(rxBytes)

Надеюсь это поможет.

person Sucio Dan    schedule 28.09.2015