使用PyUSB通过USB发送数据

时间:2012-07-03 14:24:17

标签: python pyusb

我需要使用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)+")"

结果是:

    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 : dev.write(139, 'test', 1)
            13
            error : dev.write(13, 'test', 1)

没有尝试抓住它给出:

usb.core.USBError: [Errno None] usb_claim_interface: could not claim interface 0, invalid configuration 0

有什么问题?有没有最好的方式通过usb与python进行通信?因为我刚刚发现了这个lib

2 个答案:

答案 0 :(得分:5)

tutorial中所述:

  

[...]设备在没有设置配置的情况下无法工作,即使它只有一个! [...]

显然大多数时候只有一种配置。假设所有这些配置都来自不同的设备,您可以执行以下操作:

for dev in devList:
    for cfg in dev:

        cfg.set()

        for intf in cfg:

如果由于“资源忙”而无法设置配置,则需要卸载其接口内核驱动程序:

dev.detatch_kernel_driver(interface)

答案 1 :(得分:0)

我有这个问题。通过使用

得到纠正
dev.set_configuration()

pyUSB Tutuorial