准备做单片机USB开发,焊好了板子,准备做一个上位机,思前想后准备使用Python开发,我使用平台是Win10,安装的Python是3.7.1 AMD64版本,在网上搜索使用pyusb.
随后安装pyusb
pip install pyusb
在网上找了一段代码测试,输出系统所有USB
#coding=gb18030
import usb.core
import sys
all_devs = usb.core.find(find_all = True)
for dev in all_devs:
print(dev)
Traceback (most recent call last):
File "d:/wksp_py/usb_1.py", line 7, in <module>
all_devs = usb.core.find(find_all = True)
File "C:\Python37\lib\site-packages\usb\core.py", line 1309, in find
raise NoBackendError('No backend available')
usb.core.NoBackendError: No backend available
网上搜索一下说要安装usb驱动,通过zadig或者libusb,算了太麻烦,换libusb1
安装
pip install libusb1
在网上找了一段测试代码
def processReceivedData(transfer):
if transfer.getStatus() != usb1.TRANSFER_COMPLETED:
# Transfer did not complete successfully, there is no data to read.
# This example does not resubmit transfers on errors. You may want
# to resubmit in some cases (timeout, ...).
return
data = transfer.getBuffer()[:transfer.getActualLength()]
# Process data...
# Resubmit transfer once data is processed.
transfer.submit()
# Build a list of transfer objects and submit them to prime the pump.
transfer_list = []
for _ in range(TRANSFER_COUNT):
transfer = handle.getTransfer()
transfer.setBulk(
usb1.ENDPOINT_IN | ENDPOINT,
BUFFER_SIZE,
callback=processReceivedData,
)
transfer.submit()
transfer_list.append(transfer)
# Loop as long as there is at least one submitted transfer.
while any(x.isSubmitted() for x in transfer_list):
try:
context.handleEvents()
except usb1.USBErrorInterrupted:
pass
这个代码看起来太复杂,还是pyusb看起来容易一些。还是想办法解决pyusb,网上说下载libusb库放到path路径里面,我发现安装libusb1里面有这个库
直接把这个库放到Python安装目录下的Scripts目录下
再次运行代码
#coding=gb18030
import usb.core
import sys
all_devs = usb.core.find(find_all = True)
for dev in all_devs:
print(dev)
尽然没有报错,可以正常输出系统USB的信息
看来以后开发usb设备可以直接这样使用
第一步,安装python库
pip install libusb1
pip install pyusb
第二步把,Lib\site-packages\usb1文件夹下的libusb-1.0.dll 复制到scripts下即可
第三步,运行的pyusb程序