2016-06-26 10 views
1

У меня есть устройство USB RFID, которое появляется на/dev/hidraw для моих серийных устройств, которые они появляются на/dev/ttyUSB * Я использовал pyserial, и он работает как шарм, но для этого i не мог читать из него с помощью cat /dev/hidraw0 нужны привилегии суперпользователя плюс мне нужно прочитать одну строку, а не продолжать слушатьpython: Чтение с USB-устройства HID

Я использовал evdev библиотеку, но мое устройство не появляется вообще:

import evdev 
devices = [evdev.InputDevice(fn) for fn in evdev.list_devices()] 
for device in devices: 
    print(device.fn, device.name, device.phys) 

Так есть ли правильный способ читать с устройства программно?

+0

Ваш вопрос трудно читать. Посмотрите на pyusb (конечно, вам все еще нужны права доступа к устройству). – handle

+0

Если 'cat/dev/hidraw0' не может его видеть, это звучит не очень хорошо: у вас может быть неисправное устройство. Он появляется, когда вы используете 'lsusb' в терминале? Также проверьте 'dmesg | tail "после того, как вы подключите его. Обратите внимание, что даже если lsusb может это увидеть, это не обязательно означает, что вы действительно можете сделать что-нибудь полезное с устройством. Но если lsusb не видит этого, он, вероятно, мертв. –

+0

Я могу читать с функцией cat, но для этого требуется разрешение root, есть ли способ читать как обычный пользователь? – safouman

ответ

2

По default evdev.list_devices() смотреть только в/разработчика/вход

И вам нужно разрешение на работу с устройством. Вы можете добавить пользователя в группу, которая владеет устройством (см $ Ls -l/DEV/hidraw0)

Тогда вы должны слушать устройство в цикле

#!/usr/bin/python3 
import evdev 

devices = [evdev.InputDevice(fn) for fn in evdev.list_devices()] 
for device in devices: 
    print(device.fn, device.name, device.phys) 

device = evdev.InputDevice("/dev/input/event4") 
print(device) 
for event in device.read_loop(): 
    print(event) 
+0

Я подключил свой Beurere BC 58 к малине pi 3 и увидел, что устройство обнаружено как/dev/hidraw3. Но, к сожалению, я не могу найти входные события в «dev». У меня есть список из 3 событий/dev/input/event0, event1, event2. В этом случае события 1 и 2 отображаются как клавиатуры и одна мышь. Но мои мониторы артериального давления не являются частью какого-либо события. Есть ли у кого-нибудь другое место? – Kiran