我需要使用 USB 条形码阅读器读取条形码数据(原始数据模式)。我已经知道我可以使用键盘模式设置阅读器,但它不符合我的要求,因为我将同时使用 4 个阅读器并且文本会重叠。
我是python的新手,我尝试自己研究它无济于事。我通过文档得到了这些想法,我真的不知道它有什么问题。
以下是我到目前为止提出的示例代码:
import sys
import usb.core
import usb.util
# got these using the command lsusb -vv
VENDOR_ID = 0x4b4
PRODUCT_ID = 0x100
DATA_SIZE = 1
device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
if device is None:
sys.exit("Could not find Id System Barcode Reader.")
if device.is_kernel_driver_active(0):
try:
device.detach_kernel_driver(0)
except usb.core.USBError as e:
sys.exit("Could not detatch kernel driver: %s" % str(e))
#not really sure if these are correct configuration.
try:
cfg = device.get_active_configuration()
for i in cfg:
for x in i:
x = x
device.set_configuration()
except usb.core.USBError as e:
sys.exit("Could not set configuration: %s" % str(e))
data = []
swiped = False
#i can't print the data when i try to read a barcode
data = device.read(x.bEndpointAddress, x.wMaxPacketSize, 0, 10000)
print data
运行此并尝试条形码后,我收到此错误。
Traceback (most recent call last):
File "barcodesensor.py", line 37, in <module>
data = device.read(x.bEndpointAddress, x.wMaxPacketSize, 0, 10000)
File "/usr/local/lib/python2.6/dist-packages/usb/core.py", line 654, in read
self.__get_timeout(timeout)
File "/usr/local/lib/python2.6/dist-packages/usb/backend/libusb10.py", line 559, in intr_read
timeout)
File "/usr/local/lib/python2.6/dist-packages/usb/backend/libusb10.py", line 641, in __read
timeout))
File "/usr/local/lib/python2.6/dist-packages/usb/backend/libusb10.py", line 403, in _check
raise USBError(_str_error[ret], ret, _libusb_errno[ret])
usb.core.USBError: [Errno 110] Operation timed out.
我愿意通过PayPal捐赠给任何可以帮助我获取原始数据并将格式转换为字符串的人。提前谢谢。
编辑:如何从条形码中获取正确的数据并将其转换为可读的字符串格式?
从 USB 有效负载中提取文本数据是特定于供应商的。因此,您需要自己弄清楚,尽管它并不太复杂。
至于您得到的异常,请尝试启用调试日志记录,再次运行脚本并将内容发布在pyusb.log
上。
若要启用调试,请设置几个环境变量,如教程的"出了什么问题?"部分中所述。
对于 Linux/Mac:
$ export PYUSB_DEBUG_LEVEL=debug
$ export PYUSB_LOG_FILENAME=pyusb.log
对于视窗:
> set PYUSB_DEBUG_LEVEL=debug
> set PYUSB_LOG_FILENAME=pyusb.log
无法获取调试的原因是环境变量PYUSB_DEBUG不PYUSB_DEBUG_LEVEL。
试试这个:
export PYUSB_DEBUG=debug
export PYUSB_LOG_FILENAME=pyusb.log
python yourscript.py
nano pyusb.log
可以尝试从下面提到的 git 安装 pyusb
https://github.com/walac/pyusb#installing-pyusb-on-gnulinux-systems
上面的程序只是通过减少device.read()
取代data = device.read(x.bEndpointAddress, x.wMaxPacketSize, 0, 1000)由data = device.read(x.bEndpointAddress, x.wMaxPacketSize)