python 串口助手 简书_pySerial 串口工具简介

本文详细介绍pySerial模块的使用方法,包括在不同操作系统上的应用、端口配置与读写操作、非阻塞硬件握手及属性设定等内容。同时提供了一系列示例代码帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pySerial 模块封装了对串行端口(serial port)的访问。它提供了在 Windows,OSX,Linux,BSD(可能是任何 POSIX 兼容系统)和 IronPython 上运行的 Python 的后端。模块名为“serial”会自动选择适当的后端。

在所有支持的平台上基于相同类的接口。

通过 Python 属性访问端口设置。

通过 RTS/CTS 和/或 Xon/Xoff 支持不同的字节大小,停止位,奇偶校验和流程控制。

有或没有超时的功能设定。

像 API 这样的文件,带有“read”和“write”(也支持“readline”等)。

该软件包中的文件是 100% 纯 Python。

该端口已设置为二进制传输。没有 NULL 字节剥离,CR-LF 转换等(对于 POSIX 启用了很多次)。这使该模块具有通用性。

与 io 库兼容

示例中提供的 RFC 2217 客户端(实验)服务器。

安装很简单:

pip install pyserial

前提:首先有一个串口硬件接入电脑,然后,查看其端口号:

2d4ab43cd345

在 Windows10 搜索栏搜索设备管理器

可以看到端口有 USB Serial Port(COM3)。本文就以它为例探索串口通信。

1 打开端口,无 timeout

import serial

port = 'COM3'

ser = serial.Serial(port) # 打开端口

print(ser)

ser.write(b'hello') # 写入字符串

ser.close() # 关闭端口

输出:

Serial(port='COM3', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)

2 打开端口,1 秒 timeout

port = 'COM3'

baudrate = 9600 # 设置波特率

timeout = 1

with serial.Serial(port, baudrate, timeout=timeout) as ser:

x = ser.read() # read one byte

s = ser.read(10) # read up to ten bytes (timeout)

line = ser.readline() # read a '\n' terminated line

3 非阻塞的硬件握手

non blocking HW handshaking(非阻塞的硬件握手):

port = 'COM3'

baudrate = 38400 # 设置波特率

timeout = 0

ser = serial.Serial(port, baudrate, timeout=timeout,

parity=serial.PARITY_EVEN, rtscts=10)

s = ser.read(100) # read up to one hundred bytes

# or as much is in the buffer

4 通过属性设定配置端口

获取一个 Serial 实例并稍后配置/打开它:

ser = serial.Serial()

ser.baudrate = 19200

ser.port = 'COM3'

ser

输出:

Serial(port='COM3', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)

下面试验打开、关闭:

ser.open() # 打开端口

print('端口状态:', ser.is_open)

ser.close() # 关闭端口

print('端口状态:', ser.is_open)

输出:

端口状态: True

端口状态: False

也支持上下文管理:

with serial.Serial() as ser:

ser.baudrate = 19200

ser.port = 'COM3'

ser.open()

ser.write(b'hello')

5 Readline

使用readline()时要小心。在打开串行端口时,请务必指定一个超时时间,否则,如果没有收到换行符,它将永远阻塞。另请注意,readlines()仅适用于超时。readlines()取决于是否存在超时,并将其解释为EOF(文件末尾)。如果未正确打开端口,则会引发异常。

6 EOL

要为readline()指定 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() # it is buffering. required to get the data out *now*

hello = sio.readline()

print(hello == "hello\n")

7 测试端口

7.1 列车可用端口

python -m serial.tools.list_ports 将打印可用端口列表。也可以添加一个正则表达式作为第一个参数,并且列表将仅包含匹配的条目。

2d4ab43cd345

7.2 访问端口

pySerial 包含一个基于小型控制台的终端程序,称为 serial.tools.miniterm。可以使用 python -m serial.tools.miniterm (使用选项 -h 获取所有选项的列表)启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值