是否可以通过pySerial中的供应商和设备ID引用串行设备?

时间:2016-07-29 14:53:41

标签: python-3.x

我问的原因是,我现在正在使用' by-id'来指代端口。串。 '由-ID'是指串行设备的序列号。

这没关系,但是如果我想用完全相同的品牌和型号替换该串行设备呢?它不会起作用,因为每个串行设备都有一个唯一的序列号。

也许有更好的方法可以做到这一点?串行设备顺便说一下条形码扫描器......

2 个答案:

答案 0 :(得分:2)

对于那些希望与我完成同样事情的人来说,这是我发现按供应商ID(VID)和产品ID(PID)引用串行设备的最佳方式

另请注意,以下内容需要pyserial版本3或更高版本。

from serial.tools import list_ports

VID = 1234
PID = 5678

device_list = list_ports.comports()
    for device in device_list:
        if (device.vid != None or device.pid != None):
            if ('{:04X}'.format(device.vid) == VID and
                '{:04X}'.format(device.pid) == PID):
                port = device.device
                break
            port = None

答案 1 :(得分:0)

我发现 list_ports.grep 函数很有用,比如

import serial.tools.list_ports as list_ports

device_signature = '0403:6014'

def find_serial_device():
    """Return the device path based on vender & product ID.
    
    The device is something like (like COM4, /dev/ttyUSB0 or /dev/cu.usbserial-1430)
    """
    candidates = list(list_ports.grep(device_signature))
    if not candidates:
        raise ValueError(f'No device with signature {device_signature} found')
    if len(candidates) > 1:
        raise ValueError(f'More than one device with signature {device_signature} found')
    return candidates[0].device