我正在研究一个将读取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标签,也许其他可以帮助的人会看到此内容。
答案 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)