python查看串口

admin 103 0
在Python中查看串口信息通常借助pyserial库,通过serial.tools.list_ports模块的list_ports()comports()函数,可快速获取系统可用串口列表,包括串口名称(如COM1/dev/ttyUSB0)、描述及硬件ID等,示例代码:先安装库(pip install pyserial),再导入serial.tools.list_ports,调用list_ports.comports()遍历输出串口详情,便于后续串口通信调试,该方法适用于Windows、Linux等系统,是嵌入式开发、硬件交互中常用的串口检测手段。
  1. 修正错别字与语法错误: 如“串口(Serial Port)”括号使用、引号统一、语句通顺性等。
  2. 修饰语句: 提升语言的专业性、流畅性和可读性,避免口语化表达。
    • 增加了 跨平台差异说明(Windows vs Linux/macOS 路径格式)。
    • 增加了 串口占用检测方法(尝试打开串口)。
    • 增加了 动态检测串口插入/拔出 的实用技巧(轮询法)。
    • 增加了 常见问题与解决方案(如设备未识别、权限问题、无输出)。
    • 增加了 代码示例的完整性和实用性(如筛选代码的完整输出、动态检测代码)。
    • 强化了 pyserial 库的优势说明(跨平台、信息丰富)。
  3. 提升原创性: 在保持核心信息准确的前提下,重新组织了部分内容,补充了基于实际开发经验的建议和技巧,使文章更具深度和实用价值。

以下是优化后的文章:


Python 查看串口全攻略:从基础到实践

在嵌入式开发、硬件调试、物联网设备通信等领域,串口(Serial Port)作为一种可靠且广泛使用的数据传输方式,扮演着至关重要的角色,Python 凭借其简洁优雅的语法、强大的库生态以及跨平台特性,已成为开发者与串口设备交互的首选工具,本文将系统性地介绍如何使用 Python 高效、可靠地查看系统中的可用串口信息,涵盖核心方法、实用代码示例、跨平台差异处理以及常见问题排查策略,助您快速掌握串口操作技能。

为何需要用 Python 查看串口?

在建立串口通信连接之前,准确识别系统中可用的串口资源(包括设备名称、描述信息、占用状态等)是成功通信的关键前提,其必要性体现在:

  • 确认设备路径: 在连接传感器、模块或单片机前,必须明确目标串口的正确标识(如 Windows 下的 COM3,Linux/macOS 下的 /dev/ttyUSB0/dev/ttyACM0)。
  • 故障诊断: 当通信失败时,通过查看串口列表可快速定位问题根源,设备未被系统识别、串口被其他程序独占、或硬件连接异常。
  • 自动化设备管理: 在需要与多个串口设备交互或实现自动化测试的场景下,脚本化地列出所有可用端口,能显著提升工作效率,实现端口动态选择和批量管理。

Python 查看串口的常用方法

在 Python 生态中,pyserial 库是处理串口通信事实上的标准,它提供了强大的跨平台支持(Windows, Linux, macOS),其核心模块 serial.tools.list_ports 提供了便捷的接口用于枚举系统串口设备,相较于直接操作系统文件(如读取 /dev 目录),pyserial 能更智能地解析设备信息,并处理不同操作系统的路径差异。

安装 pyserial 库

若您的开发环境中尚未安装 pyserial,请使用 pip 进行安装:

pip install pyserial
核心方法:serial.tools.list_ports.comports()

comports()pyserial 中获取串口列表的核心函数,它返回一个 serial.tools.list_ports_common.ListPortInfo 对象的列表,每个 ListPortInfo 对象封装了单个串口的详细信息,包括:

  • device: 串口设备路径(如 COM3, /dev/ttyUSB0
  • description: 设备描述信息(如 "USB-SERIAL CH340", "Arduino Uno"
  • manufacturer: 制造商名称(如 "CH", "Arduino LLC"
  • product_id: 产品 ID(十六进制字符串)
  • vid: 供应商 ID (Vendor ID, 十六进制字符串)
  • serial_number: 设备序列号(可能为 None
  • hwid: 硬件 ID(包含设备路径和额外描述信息)
(1)获取并打印所有串口列表

以下代码示例演示了如何遍历 comports() 的返回结果,并格式化输出每个串口的详细信息:

import serial.tools.list_ports

获取所有可用串口信息

ports = serial.tools.list_ports.comports()

if not ports: print("当前系统未检测到任何可用串口设备。") else: print(f"系统共发现 {len(ports)} 个串口设备:\n") for idx, port in enumerate(ports, 1): print(f"串口 #{idx}:") print(f" 设备路径: {port.device}") print(f" 描述信息: {port.description or 'N/A'}") print(f" 制造商: {port.manufacturer or 'N/A'}") print(f" 产品 ID: {port.product_id or 'N/A'}") print(f" 供应商 ID (VID): {port.vid or 'N/A'}") print(f" 序列号: {port.serial_number or 'N/A'}") print("-" * 40)

输出示例(Windows 系统):


系统共发现 2 个串口设备:

串口 #1: 设备路径: COM3 描述信息: USB-SERIAL CH340 制造商: CH 产品 ID: 7523 供应商 ID (VID): 1A86 序列号: None

串口 #2: 设备路径: COM1 描述信息: (Standard port comms) 制造商: (Standard port comms) 产品 ID: None 供应商 ID (VID): None 序列号: None

输出示例(Linux/macOS 系统):


系统共发现 1 个串口设备:

串口 #1: 设备

标签: #串口 #查看 #监控