1. 串口端口自动枚举与选择
任务说明
在串口设备自动化开发中,第一步往往是确定目标设备连接在哪个端口上。本案例要求编写一个Python程序,自动枚举当前系统中所有可用的串口端口,并以列表形式展示给用户,由用户输入序号选择目标端口。程序需处理无可用串口、无效输入等边界情况,最终输出用户选定的端口名称,为后续串口通信操作做好准备。
实现方案
使用Python标准库中的serial.tools.list_ports模块完成端口枚举,该模块跨平台支持Windows、Linux和macOS。程序流程为:调用list_ports.comports()获取端口列表,若列表为空则提示并退出;否则逐条显示端口序号、设备名称和描述信息,接收用户输入序号并校验范围,最后返回所选端口对象。核心逻辑封装在select_port()函数中,便于后续案例直接复用。
代码实现
import serial.tools.list_ports
def select_port():
"""枚举所有可用串口,让用户选择并返回所选端口对象。"""
ports = list(serial.tools.list_ports.comports())
if not ports:
print("未检测到任何可用串口,请检查设备连接。")
return None
print("检测到以下可用串口:")
for idx, port in enumerate(ports):
desc = port.description if port.description else "未知设备"
print(f"[{idx}] {port.device} - {desc}")
while True:
try:
choice = input("请输入要选择的端口序号: ")
choice = int(choice)
if 0 <= choice < len(ports):
selected = ports[choice]
print(f"已选择端口: {selected.device}")
return selected
else:
print(f"序号超出范围,请输入 0~{len(ports)-1} 之间的数字。")
except ValueError:
print("输入无效,请输入整数序号。")
if __name__ == "__main__":
select_port()
运行与验证
依赖安装:本程序依赖pyserial库,执行以下命令安装:
pip install pyserial
运行方式:将代码保存为port_selector.py,在终端执行:
python port_selector.py
验证方法:
- 不连接任何串口设备时运行,程序应输出“未检测到任何可用串口”并正常退出。
- 连接一个USB转串口设备后再次运行,程序应列出该端口及其描述信息。
- 输入超出范围的序号(如99)或非数字字符(如abc),程序应提示错误并要求重新输入。
- 输入有效序号(如0),程序应输出“已选择端口: COM3”(实际名称以系统显示为准),并返回端口对象。
判定标准:程序能正确枚举当前系统真实存在的串口,用户输入合法序号后返回对应端口对象,且对无端口、越界、非数字输入均能给出明确提示并正确处理,即视为通过。