【问题标题】:Python I have device ID how to get dev addressPython 我有设备 ID 如何获取开发地址
【发布时间】:2017-07-01 11:43:54
【问题描述】:

我有一个 USB 设备,每次插入 PC 时它可能不会连接到同一个端口,鉴于我有它的 UID,我如何找到它的开发地址?

import serial.tools.list_ports as port

portlist = list(port.comports())
for p in portlist:
  print p

给我输出:

/dev/ttyS0 - ttyS0
/dev/ttyUSB1 - USB2.0-Serial
/dev/ttyUSB0 - FT232R USB UART

我的设备是FT232R USB UART,目前它的开发地址是/dev/ttyUSB0,我需要在我的程序中进行串行读写(ser = serial.Serial(port, baud))。但是如果之前连接了多个设备并且我插入了这个设备,它改变了这个地址,我的问题是每次插入设备时如何才能找到这个地址?

【问题讨论】:

  • 您好,您能否提供您已经完成的代码并使您的问题更具体(带有示例和更多解释)?
  • 我已经用我的代码更新了问题,请看一下。
  • 一种解决方案是编写udev 规则为您的设备设置一个永久名称:hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices
  • @MichaelO。 ,在我运行程序的每个系统中,我是否必须这样做?(对不起这个愚蠢的问题,我以前从未这样做过)。如果是这样,那将是一个临时解决方案。
  • @PratikKumar 不幸的是,是的,您必须为每个系统创建一个规则。但是,正如您在此处发布的那样,调用 list_ports 并找到您的设备有什么问题?

标签: python linux usb pyserial pyudev


【解决方案1】:

您不需要使用pyusb。如果您的系统使用udev 来管理热插拔 设备(就像现在大多数Linux 发行版一样),您可以使用pyudev 库来查找您的设备。或者更简单,在/dev/serial/by-id 中找到您的设备,并在您的代码中使用该符号链接而不是/dev/ttyUSBx。只要您不连接具有相同序列号的其他设备,无论连接顺序如何,都保证保持不变。

否则:

import serial

UID = '12345678'
ports = {p.serial_number:p.device for p in serial.tools.list_ports.comports() if p.serial_number}
if UID in ports:
    port = serial.Serial(ports[UID], ...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-15
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多