为什么我的条形码扫描仪未列为/ dev /设备?

时间:2019-08-26 20:47:51

标签: python-3.x macos hid pyusb libusb-1.0

我正在研究一个将读取QR码的项目。我购买了一个小型USB条形码QR码扫描仪,并将其连接到系统上,可以扫描QR码并将其发送到我正在编写的应用程序中,但是我必须知道/ dev /设备/端口名称,因为每次断开并重新连接时,它都可以更改为其分配的/ dev /设备/端口名称。

我尝试使用pyusb,但返回的只是设备信息。我看不到/ dev /代表的任何细节。

使用PySerial:

const arr = this.array[this.counter].slice()

,但是看不到连接到/ dev / ttys002的条形码阅读器,这很奇怪,因为PyUSB可以看到它。实际上,它只能看到其他两个设备(蓝牙传入端口和我的无线airpods),但不会打印这些设备,因为port.vid和port.pid都不是。

使用PyUSB:

import serial
from serial.tools import list_ports

for port in serial.tools.list_ports.comports():
    if port.vid is not None and port.pid is not None:
        # It's a USB port on a platform that supports the extended info
        # Do something with it.
        print("Port={},VID={:#06x},PID={:#06x}".format(port.device, port.vid, port.pid))

输出:

import usb
import usb.backend.libusb1 as libusb1
import libusb1 as libusb

# find our device
dev = usb.core.find(idVendor=0xad93, idProduct=0x4002, backend=libusb1.get_backend())

print (dev)

我要做的就是将供应商ID和设备ID传递给一个函数,并让它返回与其连接的/ dev / tty端口,因此我可以设置一个线程来读取/捕获QR码。扫描。

我已经尝试解决了两天了,而且我没有多少头发可以拉出来了!

哦,我正在将Mac OS Mojave 10.14.6与Python 3.7.4结合使用。

编辑:

我可以使用此代码读取QR码。

DEVICE ID ad93:4002 on Bus 020 Address 038 =================
 bLength                :   0x12 (18 bytes)
 bDescriptorType        :    0x1 Device
 bcdUSB                 :  0x110 USB 1.1
 bDeviceClass           :    0x0 Specified at interface
 bDeviceSubClass        :    0x0
 bDeviceProtocol        :    0x0
 bMaxPacketSize0        :   0x40 (64 bytes)
 idVendor               : 0xad93
 idProduct              : 0x4002
 bcdDevice              :  0x100 Device 1.0
 iManufacturer          :    0x1 YK
 iProduct               :    0x2 YK-2D PRODUCT HID KBW
 iSerialNumber          :    0x3 APP-000000000
 bNumConfigurations     :    0x1
  CONFIGURATION 1: 200 mA ==================================
   bLength              :    0x9 (9 bytes)
   bDescriptorType      :    0x2 Configuration
   wTotalLength         :   0x22 (34 bytes)
   bNumInterfaces       :    0x1
   bConfigurationValue  :    0x1
   iConfiguration       :    0x0 
   bmAttributes         :   0x80 Bus Powered
   bMaxPower            :   0x64 (200 mA)
    INTERFACE 0: Human Interface Device ====================
     bLength            :    0x9 (9 bytes)
     bDescriptorType    :    0x4 Interface
     bInterfaceNumber   :    0x0
     bAlternateSetting  :    0x0
     bNumEndpoints      :    0x1
     bInterfaceClass    :    0x3 Human Interface Device
     bInterfaceSubClass :    0x1
     bInterfaceProtocol :    0x1
     iInterface         :    0x0 
      ENDPOINT 0x81: Interrupt IN ==========================
       bLength          :    0x7 (7 bytes)
       bDescriptorType  :    0x5 Endpoint
       bEndpointAddress :   0x81 IN
       bmAttributes     :    0x3 Interrupt
       wMaxPacketSize   :    0x8 (8 bytes)
       bInterval        :    0x1

第二次更新: 我发现条形码扫描仪将自身表示为HID设备(键盘)。我研究了pyhid和libusb / hdiapi,并能够找到该设备,但是我不知道如何在python中读取它。这是我正在使用的代码:

f=open("/dev/ttys002")
print (f.read())

如果可以的话,我还会在其中添加macos和hid标签,也许其他可以帮助的人会看到此内容。

1 个答案:

答案 0 :(得分:0)

如果您的设备是/ dev / ttys002,也许它将显示在PySerial

import serial.tools.list_ports

for LPI in serial.tools.list_ports.comports():
    print()
    print('device: %s' % LPI.device)
    print('name: %s' % LPI.name)
    print('description: %s' % LPI.description)
    print('hwid: %s' % LPI.hwid)
    print('vid: %s' % LPI.vid)
    print('pid: %s' % LPI.pid)
    print('serial_number: %s' % LPI.serial_number)
    print('location: %s' % LPI.location)
    print('manufacturer: %s' % LPI.manufacturer)
    print('product: %s' % LPI.product)
    print('interface: %s' % LPI.interface)