PySerial库简明使用指南:串口通信快速入门

PySerial库简明使用指南:串口通信快速入门

概述

PySerial是Python中用于串口通信的标准库,它提供了跨平台的串口操作接口。本文将介绍PySerial的基本使用方法,包括串口配置、数据读写等核心功能。

串口打开与基础配置

基本串口打开方式

最简单的串口打开方式只需指定端口名称:

import serial
ser = serial.Serial('/dev/ttyUSB0')  # 打开串口
print(ser.name)  # 查看实际使用的端口
ser.write(b'hello')  # 写入数据
ser.close()  # 关闭端口

这种方式会使用默认参数:9600波特率、8数据位、无校验位、1停止位、无超时设置。

带参数的串口配置

更常见的做法是在打开时指定通信参数:

with serial.Serial('/dev/ttyS1', 19200, timeout=1) as ser:
    x = ser.read()       # 读取一个字节
    s = ser.read(10)     # 最多读取10个字节(受超时限制)
    line = ser.readline()  # 读取一行(以\n结尾)

使用with语句可以确保串口在使用后自动关闭。

高级配置示例

ser = serial.Serial('COM3', 38400, timeout=0,
                    parity=serial.PARITY_EVEN, rtscts=1)
s = ser.read(100)  # 读取最多100个字节或缓冲区中所有可用数据

这个例子展示了如何配置偶校验和硬件流控制(RTS/CTS)。

串口的延迟配置

PySerial允许先创建Serial实例,稍后再配置和打开:

ser = serial.Serial()
ser.baudrate = 19200
ser.port = 'COM1'
ser.open()  # 显式打开端口
print(ser.is_open)  # 检查端口是否打开
ser.close()

同样支持with语句:

with serial.Serial() as ser:
    ser.baudrate = 19200
    ser.port = 'COM1'
    ser.open()
    ser.write(b'hello')

数据读取方法详解

readline()方法

readline()会读取直到遇到换行符\n为止,包含换行符本身:

line = ser.readline()  # 读取一行

重要注意事项

  1. 必须设置超时(timeout),否则在没有收到换行符时会永久阻塞
  2. 如果返回值缺少\n,说明是在超时后返回的

readlines()方法

readlines()尝试读取"所有"行,对于仍然打开的串口来说,这个定义不明确。因此:

  1. 依赖端口超时设置,将超时解释为EOF(文件结束)
  2. 如果端口未正确打开会引发异常
  3. 返回的行列表不包含\n

超时机制

这两个方法都调用read()获取数据,串口超时设置作用于这个底层方法。因此readlines()的有效超时可能比预期长很多。

行结束符(EOL)处理

对于需要指定行结束符或使用通用换行模式的情况,建议使用io.TextIOWrapper

import serial
import io
ser = serial.serial_for_url('loop://', timeout=1)
sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser))

sio.write("hello\n")
sio.flush()  # 必须刷新缓冲区
hello = sio.readline()
print(hello == "hello\n")

这种方法提供了更灵活的文本处理能力。

串口测试工具

列出可用串口

PySerial提供了列出可用串口的工具:

python -m serial.tools.list_ports

可以添加正则表达式作为参数来过滤结果:

python -m serial.tools.list_ports "COM[0-9]+"

注意:枚举功能可能因操作系统而异,可能不完整或包含不可用端口。

迷你终端工具

PySerial包含一个基于控制台的简单终端程序miniterm,可以这样启动:

python -m serial.tools.miniterm <port_name>

使用-h选项查看所有可用参数。

最佳实践建议

  1. 始终设置合理的超时值,避免程序阻塞
  2. 优先使用with语句管理串口资源
  3. 对于文本协议,考虑使用TextIOWrapper进行包装
  4. 在生产环境中使用前,先用测试工具验证串口配置
  5. 注意不同操作系统下串口命名的差异

通过本文介绍的基础知识,您应该已经能够使用PySerial进行基本的串口通信操作。对于更高级的应用,可以参考库中的示例代码进一步学习。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁承榕Song-Thrush

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值