PySerial 串口通信库:Python COM端口操作指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

简介

在工业控制、物联网、机器人技术和微控制器系统中,串口通信依然扮演着重要角色。通过COM(RS-232/RS-485/USB转串口)管理设备,需要一个稳定、跨平台且灵活的工具。在Python生态中,PySerial库正是为此而生。

PySerial提供了简洁而强大的接口,用于连接、配置和通过串行线路传输数据。它广泛应用于与Arduino、Raspberry Pi、调制解调器、GPS接收器、控制器、传感器等各类设备的通信。

关于PySerial库

PySerial是一个跨平台的Python库,专门用于串口通信。由Chris Liechti开发,它已成为Python生态中串行通信的事实标准。该库支持Windows、Linux、macOS以及众多其他操作系统。

PySerial的核心特性

该库提供了统一的API,用于处理各种类型的串行连接。它能自动处理平台相关的端口操作细节,为开发者提供简洁的接口。

PySerial不仅支持物理COM端口,还支持虚拟连接,包括USB转串口适配器、蓝牙串口配置文件(SPP),甚至通过RFC2217协议实现的网络连接。

安装与导入

通过pip包管理器即可完成安装:

pip install pyserial

在Python脚本中导入库的方式如下:

import serial

基本工作架构

连接的生命周期

使用PySerial的典型流程遵循以下简单模式:

  1. 创建Serial对象 — 使用端口参数进行初始化
  2. 打开连接 — 与设备建立通信
  3. 数据交换 — 发送命令并读取响应
  4. 关闭连接 — 正确结束通信
ser = serial.Serial('COM3', baudrate=9600, timeout=1)
ser.write(b'command')
data = ser.readline()
ser.close()

主要配置参数

创建Serial对象时,可以设置多种参数:

  • port — 设备名称(如COM1、/dev/ttyUSB0、/dev/ttyAMA0)
  • baudrate — 数据传输速率(通常为9600、38400、115200)
  • bytesize — 每个字符的位数(5、6、7、8)
  • parity — 奇偶校验(PARITY_NONE、PARITY_EVEN、PARITY_ODD)
  • stopbits — 停止位数量(1、1.5、2)
  • timeout — 读取操作的超时时间(秒)

数据读取方法

基本读取方法

PySerial提供了多种从端口读取数据的方式:

Serial.read(size=1) — 读取指定数量的字节。如果数据不足,该方法会阻塞,直到获取全部字节或超时。

data = ser.read(10)  # 读取10个字节

Serial.readline() — 读取直到遇到换行符(\n)。这是文本协议中最常用的方法。

line = ser.readline().decode('utf-8').strip()

Serial.read_all() — 立即读取输入缓冲区中的所有可用数据。

all_data = ser.read_all()

高级读取方法

Serial.read_until(expected) — 读取数据直到遇到指定字符序列。

推荐