使用 PyUSB 通过 USB 发送数据
Posted
技术标签:
【中文标题】使用 PyUSB 通过 USB 发送数据【英文标题】:Sending data via USB using PyUSB 【发布时间】:2012-07-04 00:12:29 【问题描述】:我需要使用 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)
没有 try catch 它给出:
usb.core.USBError: [Errno None] usb_claim_interface: could not claim interface 0, invalid configuration 0
怎么了?有没有通过usb与python进行通信的最佳方式?因为我刚刚找到了这个库
【问题讨论】:
如果它起作用了会发生什么? 我猜至少有一个接口是有效的......我的一台设备将打印通过 USB 发送的“测试”消息...... 【参考方案1】:我遇到了这个问题。通过使用
得到纠正dev.set_configuration()
pyUSB Tutuorial
【讨论】:
你好。如果可能,最好将来自外部源的一些重要代码 sn-ps 包含到答案中。提供链接是不够的 - 尝试从教程中提取最重要的内容并将其展示给 OP。【参考方案2】:如tutorial中所述:
[...] 设备在没有设置配置的情况下无法工作,即使它只有一个配置! [...]
显然大多数时候只有一种配置。假设所有这些配置来自不同的设备,您可以执行以下操作:
for dev in devList:
for cfg in dev:
cfg.set()
for intf in cfg:
如果由于“资源繁忙”而无法设置配置,则需要卸载其接口内核驱动程序:
dev.detatch_kernel_driver(interface)
【讨论】:
以上是关于使用 PyUSB 通过 USB 发送数据的主要内容,如果未能解决你的问题,请参考以下文章