简介
在工业控制、物联网、机器人技术和微控制器系统中,串口通信依然扮演着重要角色。通过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的典型流程遵循以下简单模式:
- 创建Serial对象 — 使用端口参数进行初始化
- 打开连接 — 与设备建立通信
- 数据交换 — 发送命令并读取响应
- 关闭连接 — 正确结束通信
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) — 读取数据直到遇到指定字符序列。