【问题标题】:python :Read from a USB HID devicepython : 从 USB HID 设备读取
【发布时间】:2016-10-28 12:47:46
【问题描述】:

我有一个显示在 /dev/hidraw 上的 USB RFID 设备 对于我的串行设备,它们出现在 /dev/ttyUSB* 我使用了 pyserial 并且它的工作原理就像魅力但是对于这个我无法使用 cat /dev/hidraw0 读取它需要 root 权限 另外我需要读一行而不是继续听

我使用了 evdev 库,但我的设备根本没有出现:

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

那么有没有一种适当的方式以编程方式从设备中读取数据?

【问题讨论】:

  • 您的问题难以阅读。看看 pyusb(当然你还需要设备的访问权限)。
  • 如果cat /dev/hidraw0 看不到它,这听起来不太好:您的设备可能有缺陷。当您在终端中执行lsusb 时,它会出现吗?插入后还要检查dmesg | tail。请注意,即使 lsusb 可以看到它,也不一定意味着您实际上可以对设备执行任何有用的操作。但如果 lsusb 看不到,它可能已经死了。
  • 我可以使用 cat 功能阅读,但它需要 root 权限 有没有办法以普通用户的身份阅读?
  • sudo cat /dev/hidrawX(在我的例子中是 hidraw3)对我来说很好用!每次扫描仪通过触发器识别条形码时,终端上都会弹出一个字符串。既然我做了健全性检查,我可以继续。请记住,我首先使用 Windows 上的 Zebra 配置工具来设置扫描仪,我不知道这是否有帮助。

标签: python linux usb device hid


【解决方案1】:

defaultevdev.list_devices() 仅查看 /dev/input

而且您需要权限才能使用您的设备。您可以将您的用户添加到拥有您设备的组中(请参阅 $ 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)

【讨论】:

  • 我已将 Beurere BC 58 连接到树莓派 3,并看到该设备被检测为 /dev/hidraw3。但不幸的是,我无法在“dev”中找到输入事件。我有 3 个事件 /dev/input/event0、event1、event2 的列表。其中事件 1 和 2 显示为键盘和一个鼠标。但我的血压计不属于任何活动的一部分。有没有其他办法找到?
猜你喜欢
  • 2011-04-08
  • 1970-01-01
  • 2020-02-29
  • 2012-05-10
  • 2011-11-02
  • 2013-11-24
  • 2016-12-07
  • 2014-01-20
  • 2020-03-25
相关资源
最近更新 更多