2012-07-03 1619 views
1

我需要通过USB使用Python发送数据,我正在使用PyUSB(http://sourceforge.net/apps/trac/pyusb/) 我寻找任何可用的USB端口,并且我试图发送一个消息:使用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

+1

会发生什么修正? – Gabe

+0

我想至少有一个接口是有效的......我的设备之一将打印'测试'消息通过USB发送... – Bibix

回答

5

正如tutorial说:

[...]设备不无设置的配置工作,即使它只有一个! [...]

显然大部分时间只有一种配置。假设所有这些配置都从不同的设备,你可以这样做:

for dev in devList: 
    for cfg in dev: 

     cfg.set() 

     for intf in cfg: 

如果您不能设置配置因“资源忙”,你需要卸载其接口内核驱动程序:

dev.detatch_kernel_driver(interface) 
0

我有这个问题。得到了使用,如果没有工作

dev.set_configuration() 

pyUSB Tutuorial

+2

你好。如果可能的话,将来自外部源的一些重要代码片段包含到答案中是一种好的做法。提供链接是不够的 - 尝试从教程中提取最重要的内容并将其显示给OP。 –