serial.tools.list_ports.comports()函数详解及在Python中的应用
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()函数获取的串口列表仅表示当前系统上可用的串口,但并不保证这些串口一定是可用的或者没有被其他程序占用。在使用串口之前,建议先检查串口是否可用,并做好异常处理。
