news 2026/4/23 14:22:09

Python PySerial 库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python PySerial 库

PySerial 是 Python 中用于串口(UART)通信的跨平台第三方库,支持 Windows、Linux、macOS 等多种操作系统,提供了简洁、一致的 API 用于串口设备的读写和控制。

1. 安装 PySerial

在开始使用前,需要通过 pip 安装该库。

pip install pyserial

安装完成后,可以在 Python 脚本中验证是否成功:

import serial print("pyserial version:", serial.__version__)

2. 基本使用流程

使用 PySerial 进行串口通信通常遵循以下步骤:导入库 -> 配置并打开串口 -> 读写数据 -> 关闭串口

2.1 导入库并打开串口

首先导入serial模块,然后创建Serial对象来初始化并打开串口。

import serial # 初始化串口连接,参数可在此处设置 ser = serial.Serial( port='COM3', # Windows 端口名,如 COM1;Linux/macOS 为 /dev/ttyUSB0 等[1](@ref)[6](@ref) baudrate=9600, # 波特率,常见值有 9600, 115200 等[5](@ref) bytesize=serial.EIGHTBITS, # 数据位,8位 parity=serial.PARITY_NONE, # 校验位,无校验 stopbits=serial.STOPBITS_ONE, # 停止位,1位 timeout=1 # 读超时时间(秒),None为无限等待,0为非阻塞[1](@ref) )

创建Serial对象时,若指定了port,串口通常会立即打开。你也可以先创建对象,后续再配置参数并手动打开:

ser = serial.Serial() ser.port = 'COM3' ser.baudrate = 115200 ser.open()
2.2 检查串口状态

可以使用is_open属性检查串口是否成功打开。

if ser.is_open: print(f"串口 {ser.port} 已打开") else: print("串口打开失败")
2.3 读写数据
  • 写入数据:使用write()方法,参数必须是字节类型(bytes)。
    # 发送字符串(需编码为字节) ser.write("Hello, Serial!".encode('utf-8')) # 或直接发送字节数据 ser.write(b'\x01\x02\x03')
  • 读取数据:有多种读取方法。
    • read(size=1):读取指定大小的字节数。
    • readline():读取一行,以换行符\n结束。
    • read_all():读取接收缓冲区中的所有数据。
    data = ser.read(10) # 读取最多10个字节 line = ser.readline() # 读取一行 print(line.decode('utf-8')) # 将字节数据解码为字符串
    在读取前,可用in_waiting属性检查接收缓冲区中的字节数。
    if ser.in_waiting: data = ser.read(ser.in_waiting)
2.4 关闭串口

通信完成后,应关闭串口以释放资源。

ser.close()

为了确保串口被正确关闭,推荐使用with语句(上下文管理器),它会在代码块执行完毕后自动关闭串口。

with serial.Serial('COM3', 9600, timeout=1) as ser: ser.write(b'Hello') data = ser.readline()

3. 常用方法与属性

除了基本的读写,PySerial 还提供了其他有用的方法和属性:

  • flushInput():清空输入缓冲区,丢弃所有待读取数据。
  • flushOutput():清空输出缓冲区,终止当前写操作。
  • flush():等待所有数据写出。
  • 串口参数获取与设置:创建对象后,仍可动态修改部分属性,如ser.baudrate = 115200
  • 获取端口列表:可以使用serial.tools.list_ports来列出当前可用的串口。
    import serial.tools.list_ports ports = serial.tools.list_ports.comports() for port in ports: print(port.device)

4. 实际应用示例

以下是一个完整的简单示例,实现了打开串口、发送指令并读取回复的功能:

import serial import time def main(): # 1. 配置并打开串口 ser = serial.Serial( port='COM3', baudrate=9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=2 # 设置读超时为2秒 ) try: if not ser.is_open: ser.open() # 2. 发送数据 command = b'READ_DATA\r\n' # 示例指令,通常需要根据设备协议定义 ser.write(command) print(f"Sent: {command}") # 3. 等待并读取回复 time.sleep(0.1) # 根据设备响应时间适当等待 if ser.in_waiting: response = ser.readline() print(f"Received: {response.decode('utf-8').strip()}") except serial.SerialException as e: print(f"串口通信错误: {e}") except Exception as e: print(f"发生错误: {e}") finally: # 4. 确保关闭串口 if ser and ser.is_open: ser.close() print("串口已关闭") if __name__ == '__main__': main()

5. 常见问题与注意事项

  1. 串口无法打开:可能原因是端口号错误、端口被其他程序占用,或在 Linux/macOS 上权限不足。请检查端口名并使用serial.tools.list_ports.comports()确认可用端口。
  2. 数据读写异常或无数据
    • 确保通信双方的波特率、数据位、停止位、校验位等参数完全一致。
    • 检查物理连接(如 USB 转串口线)是否正常。
    • 适当调整timeout参数,避免因设备响应慢导致读超时。
  3. 数据格式处理:串口传输的是原始字节流。发送字符串前需用.encode()编码,接收后需用.decode()解码。务必确认设备使用的字符编码(通常为 UTF-8 或 ASCII)。
  4. 跨平台兼容性:PySerial 是跨平台的,但端口名称因系统而异:Windows 为COMx,Linux 通常为/dev/ttyUSBx/dev/ttySx,macOS 为/dev/tty.usbserialxxx

总结

PySerial 库功能全面且易于上手,是 Python 进行串口通信的首选工具。核心步骤是正确配置参数、打开端口、进行字节级的读写操作,并在完成后关闭端口。对于更复杂的应用,如多线程通信或遵循特定工业协议(如 Modbus),可以在此基础上进行扩展。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 15:05:46

上传失败提示‘不支持格式’?文件扩展名勿手动修改

上传失败提示“不支持格式”?别再手动改文件后缀了 在使用 AI 视频生成工具时,你有没有遇到过这样的情况:明明把录音文件从 .amr 改成了 .wav,系统却依然弹出“不支持格式”的警告?看起来合情合理,操作也没…

作者头像 李华
网站建设 2026/4/16 9:14:12

SpringMVC大文件上传的跨平台实现与兼容性讨论

大文件传输系统建设方案(技术方案及部分代码示例) 一、项目背景与需求分析 作为集团数字化转型重点项目,需构建支持100GB级文件传输、全信创环境兼容、军工级安全加密的分布式文件传输系统。核心需求包括: 性能要求&#xff1a…

作者头像 李华
网站建设 2026/4/18 5:14:25

钉钉群自动推送HeyGem生成结果下载链接

钉钉群自动推送HeyGem生成结果下载链接 在企业宣传视频批量制作、在线课程快速生成的日常工作中,一个常见的场景是:团队成员上传一段音频和多个讲师视频,希望一键生成一批“数字人播报”视频。然而,任务提交后却只能被动等待——没…

作者头像 李华
网站建设 2026/4/23 12:51:25

【珍藏】一文搞懂大模型RAG技术,Spring AI实现全流程解析

RAG概念 RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索与文本生成的技术,旨在提升大语言模型(LLM)生成内容的准确性和时效性。其核心思想是通过外部知识库动态补充生成所需的信息&a…

作者头像 李华
网站建设 2026/4/16 17:56:41

单个处理模式适用场景:快速验证与调试首选

单个处理模式适用场景:快速验证与调试首选 在AI数字人视频生成系统日益普及的今天,一个常被忽视但至关重要的问题浮现出来:如何让开发者和内容创作者在模型尚未稳定、参数仍在调整时,快速看到结果、及时发现问题? 许…

作者头像 李华