欢迎访问宙启技术站
智能推送

serial.tools.list_ports.comports()函数详解及在Python中的应用

发布时间:2024-01-13 17:43:12

serial.tools.list_ports.comports()函数是一个用来获取当前系统上的所有可用串口的函数。它属于pyserial库中的serial.tools.list_ports模块。

该函数返回一个包含串口信息的列表,列表的每一个元素都是一个包含串口信息的namedtuple。namedtuple是Python的一个数据结构,类似于元组,用于存储简单的值对象,可以通过属性访问其中的值。namedtuple对象的属性包括:

- device:串口设备名称

- description:串口设备的描述信息

- hwid:串口设备的硬件标识符

- manufacturer:串口设备的制造商信息

- product:串口设备的产品信息

- interface:串口设备的接口类型(一般为USB)

下面是一个使用serial.tools.list_ports.comports()函数的示例代码:

import serial.tools.list_ports

# 获取可用串口列表
ports = serial.tools.list_ports.comports()

# 遍历列表并打印串口信息
for port in ports:
    print(f"Device: {port.device}, Description: {port.description}, Manufacturer: {port.manufacturer}")

此代码将输出当前系统上所有串口的设备名称、描述信息和制造商。例如:

Device: /dev/ttyUSB0, Description: USB-Serial Controller, Manufacturer: FTDI
Device: /dev/ttyS0, Description: ttyS0, Manufacturer: LINUX

在应用中,我们可以使用serial.tools.list_ports.comports()函数来获取可用的串口列表,然后根据需要选择一个串口进行通信。比如,可以使用pyserial库的serial.Serial类来打开选定的串口,并发送和接收数据。

import serial.tools.list_ports

# 获取可用串口列表
ports = serial.tools.list_ports.comports()

# 遍历列表并打印串口信息
for port in ports:
    print(f"Device: {port.device}, Description: {port.description}, Manufacturer: {port.manufacturer}")

# 选择一个串口并打开
if len(ports) > 0:
    selected_port = ports[0]
    ser = serial.Serial(selected_port.device, baudrate=9600)
    # 发送数据
    ser.write(b"Hello World!")
    # 接收数据
    data = ser.readline()
    print(f"Received data: {data}")
    # 关闭串口
    ser.close()

上面的代码首先获取可用的串口列表,并选择 个串口进行通信。然后,通过serial.Serial类打开选定的串口(指定波特率为9600),发送一条消息,并等待接收返回的数据。最后,关闭串口。

需要注意的是,使用serial.tools.list_ports.comports()函数获取的串口列表仅表示当前系统上可用的串口,但并不保证这些串口一定是可用的或者没有被其他程序占用。在使用串口之前,建议先检查串口是否可用,并做好异常处理。