【问题标题】:How to get data from a barcode reader using raw data mode and pyUSB?如何使用原始数据模式和 pyUSB 从条形码阅读器获取数据?
【发布时间】:2012-08-16 00:40:51
【问题描述】:

我需要使用 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 向任何可以帮助我获取原始数据并将格式转换为字符串的人捐款。提前致谢。

编辑:如何从条形码中获取正确的数据并将其转换为可读的字符串格式?

【问题讨论】:

  • 你的问题是什么?
  • 如何从条码中获取正确的数据并将其转换为可读的字符串格式?
  • 请不要用 paypal 标记您的问题,除非他们关心使用 paypal API 或类似的东西。
  • 抱歉,第一次提问。谢谢你的提醒。

标签: python barcode pyusb


【解决方案1】:

从 USB 有效负载中提取文本数据是特定于供应商的。所以你需要自己解决这个问题,虽然它并不太复杂。

至于您遇到的异常,请尝试启用调试日志记录,再次运行您的脚本并将内容发布到pyusb.log

要启用调试,请设置几个环境变量,如tutorial出了什么问题? 部分所述。

对于 Linux/Mac:

$ export PYUSB_DEBUG_LEVEL=debug
$ export PYUSB_LOG_FILENAME=pyusb.log

对于 Windows:

> set PYUSB_DEBUG_LEVEL=debug
> set PYUSB_LOG_FILENAME=pyusb.log

【讨论】:

  • 对不起,我尝试在运行脚本之前在终端中运行 export PYUSB_DEBUG_LEVEL=debug 和 export PYUSB_LOG_FILENAME=pyusb.log。但它似乎没有创建这个 pyusb.log 文件
  • 然后尝试不同的更好的绝对路径,即 /tmp/my.log。
  • 我尝试了绝对路径但无济于事。 export PYUSB_LOG_FILENAME='home/techlab/Dropbox/IdSystem/practice/pyusb.log'
  • 我尝试使用 logging 模块然后 logging.basicConfig(),仍然没有发现错误。
  • @AngelicaLim 您是否错过在评论中输入您的路径?它缺少第一个“/”。
【解决方案2】:

无法调试的原因是环境变量是PYUSB_DEBUG而不是PYUSB_DEBUG_LEVEL。

试试这个:

export PYUSB_DEBUG=debug
export PYUSB_LOG_FILENAME=pyusb.log

python yourscript.py

nano pyusb.log

【讨论】:

    【解决方案3】:

    可以尝试从下面提到的git安装pyusb

    https://github.com/walac/pyusb#installing-pyusb-on-gnulinux-systems

    上述程序只是通过减少 device.read()

    替换 数据 = device.read(x.bEndpointAddress, x.wMaxPacketSize, 0, 1000) 经过 数据 = device.read(x.bEndpointAddress, x.wMaxPacketSize)

    【讨论】:

      猜你喜欢
      • 2012-01-27
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      相关资源
      最近更新 更多