标签: pyusb

使用PyUSB获取字符串描述符usb.util.get_string()

我无法获取USB设备的字符串描述符.我正在寻找的是人性化的制造商和产品名称.我使用libusb-1.0作为后端,并且能够使用提供的libusb测试程序获取制造商名称,所以我知道它存在.

PyUSB帮助文件说你可以使用以下方法访问usb_get_string_simple(来自libusb后端):

get_string(dev,length,index,langid = None)

   Retrieve a string descriptor from the device.
   dev is the Device object to which the request will be sent to.

   length is the length of string in number of characters.

   index is the string descriptor index and langid is the Language
   ID of the descriptor. If langid is omitted, the string descriptor
   of the first Language ID will be returned.

   The return value is the unicode string present in the descriptor.
Run Code Online (Sandbox Code Playgroud)
import usb …
Run Code Online (Sandbox Code Playgroud)

python windows pyusb libusb-1.0

4
推荐指数
2
解决办法
1万
查看次数

如何使用Python获取原始的USB键盘数据?

我正在Python中使用PyUSB,因为我将不得不监听USB端口以从电子卡中检索数据。目前,我必须通过读取连接到Raspberry-Pi的小键盘(USB连接)的直接输入来训练自己。当然,我不想读取键入的字符串,例如,我希望获得ASCII码。我只是不知道如何从USB键盘读取输入。

我已经找到了一些片段:

import usb.core
import usb.util

VENDOR_ID = 0x0922
PRODUCT_ID = 0x8003

# find the USB device
device = usb.core.find(idVendor=VENDOR_ID,
                       idProduct=PRODUCT_ID)

# use the first/default configuration
device.set_configuration()
# first endpoint
endpoint = device[0][(0,0)][0]

# read a data packet
attempts = 10
data = None
while data is None and attempts > 0:
    try:
        data = device.read(endpoint.bEndpointAddress,
                           endpoint.wMaxPacketSize)
    except usb.core.USBError as e:
        data = None
        if e.args == ('Operation timed out',):
            attempts -= 1
            continue

print data
Run Code Online (Sandbox Code Playgroud)

如果我取消注释以下行“ device.set_configuration()”,这会导致“设备正忙”异常,那么我会收到错误16“设备正忙”或根本不显示任何错误...(我确实用键盘的VENDOR_ID和PRODUCT_ID替换了ids)

python pyusb

4
推荐指数
1
解决办法
8616
查看次数

使用 PyUSB 发送 HID 报告


更新


我设法正确发送数据。对于遇到同样问题的人,我使用了以下代码:

data=[0x00, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0x00, 0x00]
result=dev.ctrl_transfer(0x21, 0x9, wValue=0x200, wIndex=0x00, data_or_wLength=data)
Run Code Online (Sandbox Code Playgroud)

(这是基于此处发布的答案:链接

但我不明白,为什么我必须使用

bmRequestType=0x21
bRequest=0x9
wValue=0x200
Run Code Online (Sandbox Code Playgroud)

解释是什么?


初始请求:


我拼命地尝试使用 PyUSB 向 HID 设备发送一个简单的报告。

使用“SimpleHIDwrite”我确认设备按预期工作。我想发送这个数据:

报告编号:00

数据:[00, 04, 04, FF, FF, FF, 00, 00]

使用 SimpleHIDwrite 发送数据

我对 Python 和 USB 很陌生,我无法弄清楚如何使用 dev.ctrl_transfer 或 dev.write 来做到这一点。

此外,还有一些关于将数据发送到 HID 设备的帖子,但我不知道如何解决我的问题。我该如何解决?

以下是更多详细信息:

 # Based on https://github.com/walac/pyusb/blob/master/docs/tutorial.rst

import usb.core
import usb.util

# Find our device
# dev = usb.core.find(idVendor=0xfffe, idProduct=0x0001)
dev = usb.core.find(idVendor=0x1781, idProduct=0x8c0)


# Was it found? …
Run Code Online (Sandbox Code Playgroud)

python windows usb hid pyusb

4
推荐指数
2
解决办法
1万
查看次数

使用 PyUSB 进行同步读/写

PyUSB 1.0 声称现在支持等时传输(如果底层后端支持)。我已经弄清楚如何选择支持同步传输的libusb1.0后端,但我不确定如何实际实现读取和写入。我搜索过互联网,但找不到使用 PyUSB 的示例。帮助?

libusb pyusb

3
推荐指数
1
解决办法
1263
查看次数

Windows 8.1上的Pyusb - 没有可用的后端 - 如何安装libusb?

使用pyinstaller 3.1,python 2.7.9和tkinter.

尝试使用pyusb而不是pyserial,但没有可用的后端.在Windows上查看Pyusb - 没有可用的后端,PyUSB ValueError:没有可用的后端,Python中的USB接口等等,似乎我需要安装libusb.但是当我在python下运行"import usb"和"import usb.core"时,没有错误.我不知道如何安装它以及如何在我的项目中使用它,如何告诉我的项目libusb在哪里.

我做了什么:

(1)下载libusb-win32-bin v1.2.6.0(01/17/2012)

(2)x86\libusb0_x​​86.dll重命名为libusb0.dll

(3)在64位上,将它放到Windows\syswow64\libusb0.dll.在32位,安装到Windows\system32\libusb0.dll.

还是行不通...

顺便说一句,我想完成一个独立的基于python的Windows应用程序.我不希望别人安装libusb来运行我的应用程序.该怎么办?

python usb pyinstaller pyusb

3
推荐指数
1
解决办法
4788
查看次数

用于Python 2.7的PyUSB /类似USB功能

是否有可能为python版本2.7获得类似PyUSB或类似的程序?

python python-2.7 pyusb

2
推荐指数
1
解决办法
1311
查看次数

使用PyUSB通过USB发送数据

我需要使用Python通过USB发送数据,我正在使用PyUSB(http://sourceforge.net/apps/trac/pyusb/)我寻找任何可用的USB端口,我试图发送消息:

devList = usb.core.find(find_all=True)
for dev in devList:
    for cfg in dev:
        for intf in cfg:
            sys.stdout.write('\t' + str(intf.bInterfaceNumber) + ',' + str(intf.bAlternateSetting) + '\n')
            for ep in intf:
                sys.stdout.write('\t\t' + str(ep.bEndpointAddress) + '\n')
                if ep.bEndpointAddress:
                    try:
                        dev.write(ep.bEndpointAddress, 'test', intf.bInterfaceNumber)
                    except Exception:
                        print "\t\terror : dev.write("+str(ep.bEndpointAddress)+", 'test', "+str(intf.bInterfaceNumber)+")"
Run Code Online (Sandbox Code Playgroud)

结果是:

    0,0
            129
            error : dev.write(129, 'test', 0)
    0,1
            129
            error : dev.write(129, 'test', 0)
    0,0
            136
            error : dev.write(136, 'test', 0)
            10
            error : dev.write(10, 'test', 0)
    1,0
            139
            error : …
Run Code Online (Sandbox Code Playgroud)

python pyusb

2
推荐指数
1
解决办法
2万
查看次数

PyUSB 设备已声明,detach_kernel_driver 返回 Entity Not Found

我正在尝试使用 PyUSB 从 Ubuntu 上的 USB 设备进行批量读取和写入。但是,我一直没有成功做到这一点。

import usb.core
import usb.util

dev = usb.core.find(idVendor=0xXXXX,idProduct=0xYYYY)
if dev is None:
    raise ValueError('Device not found.')

try:
    dev.detach_kernel_driver(0)
except:
    print "exception dev.detach_kernel_driver(0)"
    pass

dev.set_configuration()
print "all done"
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的简单脚本。我创建了/etc/udev/rules.d/40-basic-rules.rules 其中包含

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device",SYSFS{idVendor}=="XXXX" , SYSFS{idProduct}=="YYYY", MODE="0666"

适合我的设备。

以 root 身份运行脚本会引发usb.core.USBError: [Errno 16] Resource busy错误,因为dev.detach_kernel_driver(0)抛出异常usb.core.USBError: [Errno 2] Entity not found

在 dmesg 我看到这些消息,

[  638.007886] usb 1-1: usbfs: interface 1 claimed by usb-storage while 'python' sets config #1
[  643.425802] usb …
Run Code Online (Sandbox Code Playgroud)

python usb ubuntu pyusb

2
推荐指数
1
解决办法
5129
查看次数

Raspberry Pyusb让资源忙碌

我正在尝试通过USB将我的Raspberry PI连接到Pic4550.(使用Windows c#程序,Pic功能正常!).所以我安装了rpi 2,pyusb,并尝试在[ https://github.com/walac/pyusb/blob/master/docs/tutorial.rst][1]的帮助下进行通信

我连接到USB设备,lsusb显示:

总线001器件006:ID 04d8:0080 Microchip Technology,Inc.

python prog找到了设备!获取正确的配置但无法写入消息:

usb.core.USBError:[Errno 16]资源忙

我尝试以sudo身份运行,我添加了规则:

SUBSYSTEM =="usb",ATTR {idVendor} =="04d8",ATTR {idProduct} =="0080",MODE ="666"

无论如何,我得到相同的资源忙

任何胶水帮助链接?

python usb hid pyusb raspberry-pi2

2
推荐指数
2
解决办法
9299
查看次数

尽管安装了正确的依赖项,为什么 PyUSB 无法在 Windows 10 上运行?

我正在使用Python 3.8。

我发现 PyUSB 被建议作为一种选择;但是,我已经尝试过,但没有找到后端。包含的后端适用于 libusb0.1、libusb1.0 和 OpenUSB。

libusb0.1 是遗留的。

libusb1.0 是当前版本;但是,通过 pip 安装它并不能使 PyUSB 工作(它仍然找不到后端)。

OpenUSB 是 libusb1.0 的一个分支,专注于多线程支持,但没有 Windows 版本。

作为答案,我会接受一种让 PyUSB 与 libusb1.0 一起工作的方法;或在 Windows 上运行的不同 python 库。所需的最低功能是设备的枚举和迭代、通过 ID 获取特定设备、获取设备信息(特别是枚举列表中的 ID)、浏览设备的文件系统以及从设备的文件系统复制。

PyUSB,有或没有libusb1 (1.7.1)

import usb
devices = list(usb.core.find(find_all=True))
print(devices)

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Users\scott\.p2\pool\plugins\org.python.pydev.core_7.5.0.202001101138\pysrc\_pydev_bundle\pydev_umd.py", line 167, in runfile
    execfile(filename, namespace)
  File "C:\Users\scott\.p2\pool\plugins\org.python.pydev.core_7.5.0.202001101138\pysrc\_pydev_imps\_pydev_execfile.py", line 25, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:\Code\Py\Path\PhoneSync\phone_sync.py", line 12, in <module>
    devices …
Run Code Online (Sandbox Code Playgroud)

python windows python-3.x pyusb windows-10

2
推荐指数
1
解决办法
5611
查看次数