PySerial模块的使用
serial.Serial类
serial.Serial的参数
参数 | 功能 |
---|---|
port | 设置端口名称,例如’COM1’。类型:str |
baudrate | 设置波特率。类型:int |
bytesize | 设置数据位。可能的值:FIVEBITS , SIXBITS , SEVENBITS , EIGHTBITS |
parity | 设置校验。可能的值: PARITY_NONE , PARITY_EVEN , ,PARITY_ODD PARITY_MARK PARITY_SPACE |
stopbits | 设置停止位。可能的值: STOPBITS_ONE , STOPBITS_ONE_POINT_FIVE , STOPBITS_TWO |
timeout | 设置接收超时时间。以秒为单位。类型:float,默认None禁用。 |
xonxoff | 设置是否启用软件流量控制。类型:bool |
rtscts | 设置是否启用硬件(RTS/CTS)流量控制。类型:bool |
dsrdtr | 设置是否启用硬件 (DSR/DTR) 流量控制。类型:bool |
write_timeout | 设置写入超时时间。以秒为单位。类型:float |
inter_byte_timeout | 设置插入字符超时时间。以秒为单位。类型:float,默认None禁用。 |
exclusive | 设置独占访问模式(仅限 POSIX)。 |
注意
- ValueError – 当参数超出范围时将引发,例如波特率、数据位。
- SerialException – 如果找不到或无法配置设备。
- 在创建Serial对象时,如果port指定了端口名称,那么在创建对象后串口会自动打开。如果没有指定port,那么需要调用open()方法打开端口。
- 波特率全平台支持50、75、110、134、150、200、300、600、1200、1800、2400、4800、9600、19200、38400、57600、115200
- 波特率部分平台支持230400、460800、500000、576000、921600、1000000、1152000、1500000、2000000、2500000、3000000、3500000、400000
- timeout的说明:
timeout = None
:永远等待/直到收到请求的字节数timeout = 0
: 非阻塞模式,任何情况下立即返回,返回零个或多个,直到请求的字节数timeout = x
: set timeout tox
seconds (float allowed) 当请求的字节数可用时立即返回,否则等到超时到期并返回到那时为止收到的所有字节。
write()
默认情况下是阻塞的,除非设置了write_timeout
(设置的值同上)。- 可能不支持同时启用两种流量控制方法(xonxoff和*rtscts )。*通常一次使用其中一种方法,而不是同时使用两种方法。
- 并非所有平台都支持
dsrdtr
(已忽略)。将其设置为具有其状态遵循rtscts
的None
效果。 - 还可以考虑使用函数
serial_for_url()
而不是直接创建 Serial 实例。 - 在 2.5 版中更改:
dsrdtr
现在默认为False
(而不是None
) - 在 3.0 版更改:不再支持数字作为端口参数
- 3.3 新版功能:
exclusive
标志
常量
常量 | 名称 | 说明 |
---|---|---|
BAUDRATES |
波特率 | 有效波特率列表。该列表可能不完整,因此设备也可能支持更高和/或中等波特率(只读)。 |
BYTESIZES |
数据位 | 设备的有效字节大小列表(只读)。 |
PARITIES |
校验 | 设备的有效奇偶校验列表(只读)。 |
STOPBITS |
停止位 | 设备的有效停止位宽度列表(只读)。 |
常用方法
方法 | 参数 | 功能 | 注意 |
---|---|---|---|
open() |
打开端口,rts 和的状态dtr 被应用 |
一旦端口打开,某些操作系统和/或驱动程序可能会自动激活 RTS 和/或 DTR。当rts 或 dtr 的设置值与其默认值 ( True /active)不同时,RTS/DTR 可能会出现故障。 |
|
close() |
立即关闭端口 | ||
__del__ |
销毁Serial实例 | 当串行端口实例被释放时关闭端口。 | |
read(size=1) |
· size 为读取字节数· 返回读取到的字节,类型: bytes |
从缓存区读取指定字节数的字节流 | 如果设置了超时,则返回的字符数可能少于请求的字符数。如果没有超时,它将阻塞直到读取请求的字节数。 |
read_intil(expected=LF, size=None) |
· expected 设置结束码,类型:bytes · size 设置接收字节数 |
从缓存区读取以指定序列结尾的字节流,如果达到size 指定的大小也会停止阻塞返回数据 |
读取直到找到指定的序列(默认为’\n’),直到超过大小或发生超时。如果设置了超时,则返回的字符数可能少于请求的字符数。如果没有超时,它将阻塞直到达到请求的字节数或指定的序列。 |
cancel_read() |
从另一个线程取消挂起的读取操作。阻塞调用的 read() 会立即中止。 |
· read() 不会报告任何错误,但会返回到该点为止收到的所有数据(类似于超时)。· Posix和Windows平台支持 |
|
write(date) |
· date 为要发送的数据,类型为bytes · 返回以发送的字节数,类型: int |
发送数据,返回已发送的字节数 | · SerialTimeoutException: 如果为端口配置了写超时并且超过了时间则引发该报错。 · 必须对 Unicode 字符串进行编码,例如 'hello'.encode('utf-8') |
cancel_write() |
从另一个线程取消挂起的写操作。该 write() 方法将立即返回(未指示错误)。 |
· 操作系统可能仍在从缓冲区发送, reset_output_buffer() 可能需要单独调用 清楚发送缓存区· Posix和Windows平台支持 |
|
flush() |
直到所有数据都被写入再刷新文件流对象 | ||
in_waiting |
返回接收缓存区的字节数 | ||
out_waiting |
返回写入缓存区的字节数 | Windows和Posix平台支持 | |
reset_input_buffer() | 清除接收缓存区的所有数据 | 3.0版本更名为flushInput() |
|
reset_output_buffer() |
清除发送缓存区的所有数据 | 3.0版本更名为flushOutput() |
|
send_break(duration=0.25) |
duration 以秒为单位 |
也没搞清楚这个方法的作用 | |
break_condition |
返回当前是否处于空闲状态 | ||
rts |
设置rts 是否使用,类型:bool返回 rts 状态,类型:bool |
||
cts |
获取cts 状态,类型:bool |
||
dtr |
设置drt 是否使用,类型:bool返回 rts 状态,类型:bool |
||
dsr |
获取dsr 状态,类型:bool |
||
ri |
获取ri 状态,类型:bool |
RI是由外部设备通过串口发送给计算机的一个控制信号,表示外部设备中有来电或呼叫等事件发生。 | |
cd |
获取cd 状态,类型:bool |
CD是指调制解调器通过串口向计算机发送的一个信号,表示调制解调器已经连接到远程通信方,可以进行数据传输。在计算机与远程通信方进行数据传输之前,需要等待CD信号的到来,以确保通信连接已经建立成功。 | |
name |
获取串口的名字,类型:str | ||
is_open |
返回串口是否被打开,类型:bool | ||
port |
设置端口名。如果端口已经打开的话会关闭端口并根据新的设置重新打开端口 | ||
baudrate |
设置波特率,或者获取波特率,类型:int | ||
bytesize |
设置数据位,或者获取数据位,类型:int | 可能设置的值:FIVEBITS , SIXBITS , SEVENBITS , EIGHTBITS Type:int |
|
parity |
设置校验,或者获取校验 | 可能设置的值:PARITY_NONE , PARITY_EVEN , PARITY_ODD PARITY_MARK , PARITY_SPACE |
|
stopbits |
设置停止位,或者获取停止位 | 可能设置的值STOPBITS_ONE , STOPBITS_ONE_POINT_FIVE , |
|
timeout |
设置接收超时时间,或者获取接收超时时间,类型:float | ||
write_timeout |
设置写入超时时间,或者获取写入超时时间,类型:float | ||
inter_byte_timeout |
没懂什么意思 | ||
xonxoff |
设置是否启用软件流控,或者获取是否启用软件流控,类型:bool | ||
rtscts |
设置是否启用硬件流控,或者获取是否启用硬件流控,类型:bool | ||
dsrdtr |
设置是否启用硬件流控,或者获取是否启用硬件流控,类型:bool | ||
rs485_mode |
设置是否启用RS485 设置,或者获取是否启用RS485 设置,类型:rs485.RS485Settings orNone |
平台: · Posix (Linux, limited set of hardware) · Windows (only RTS on TX possible) |
|
readable() | 返回是否可读 | ||
writeable() | 返回是否可写 | ||
seekable() | 没懂啥意思 | ||
readinto(b) |
b为列表,数组 返回b |
将读取到的数据写入到b中,然后返回b | |
readline(size=-1) |
size为读取到的最大字节数 | 从字节流中读取一行数据(b’\n’结尾的),如果设定了size则最大长度不超过该值 | |
readlines(hint=-1) |
hint为读取的行数 | 从字节流中读取多行,行数由hint设定 | |
writelines(lines) |
lines为写入的行数 | 写入多行 | 行的末尾需要加分行符 |
get_settings() |
返回带有端口设置的字典 | 这对于备份当前设置很有用,以便以后可以使用 恢复它们apply_settings() 。请注意,控制线 (RTS/DTR) 的状态不是设置的一部分。 |
|
apply_settings(d) |
d为带有端口设置的字典(该字典通常由get_settings()创建 ) |
设置端口参数 | |
__enter__ |
在使用with 语句时,返回Serial instance |
||
__exit__ |
关闭串口 | ||
fileno() |
返回此对象打开的端口的文件描述符编号 | 没懂什么意思 | |
set_input_flow_control(enable) |
enable为是否启用软件流量控制,类型:bool | 设置是否启动软件流控 | · 如果启用会将 XON (true) 和 XOFF (false) 发送到其他设备。 · *在 3.0 版中更改:*重命名为 flowControlOut |
set_output_flow_control(enable) |
enable类型:bool | 当软件或者硬件流量控制启用时,设置在输出数据时是否手动进行流量控制 |
serial.tools.list_ports
可以执行此模块以获取端口列表 (python -m serial.tools.list_ports)。
serial.tools.list_ports.comports方法
使用serial.tools.list_ports.comports(include_links=False)
方法获取端口信息,返回由ListPortInfo
类组成的列表。
方法 | 参数 | 功能 |
---|---|---|
serial.tools.list_ports.comports(include_links=False) |
include_links符号链接是否在/dev 下,类型:bool |
获取串口信息并返回由serial.tools.list_ports.ListPortInfo 类组成的列表 |
serial.tools.list_ports.ListPortInfo类
ListPortInfo类包含的方法 | 功能 | 说明 |
---|---|---|
device |
返回完整的设备名称/路径, e.g: /dev/ttyUSB0 |
|
name |
返回设备的名称,e.g: COM3 |
常用 |
description |
返回设备描述信息,e.g:USB Serial Port (COM3) |
|
hwid |
返回技术信息,e.g:USB VID:PID=0403:6001 SER=FTDWFGQCA |
|
vid |
返回USB的厂家ID(integer, 0…65535) | |
pid |
返回USB的产品ID(integer, 0…65535) | |
serial_number |
字符串格式返回USB串口序号,e.g: FTDWFGQCA |
|
location |
字符串格式返回USB串口的位置 | |
manufacture |
返回USB串口制造商,由制造商提供 | |
product |
返回USB产品字符串,有制造商提供 | |
interface |
返回接口特定描述 |
示例
p = serial.tools.list_ports.comports(include_links=True)
print('端口列表:', p)
print('device = ', p[0].device)
print('name = ', p[0].name)
print('description = ', p[0].description)
print('hwid = ', p[0].hwid)
print('vid = ', p[0].vid)
print('pid = ', p[0].pid)
print('serial_number = ', p[0].serial_number)
print('location = ', p[0].location)
print('manufacturer', p[0].manufacturer)
print('product = ', p[0].product)
print('interface = ', p[0].interface)
运行结果:
端口列表: [<serial.tools.list_ports_common.ListPortInfo object at 0x000001846B2EFFA0>, <serial.tools.list_ports_common.ListPortInfo object at 0x000001846B2EFF70>, <serial.tools.list_ports_common.ListPortInfo object at 0x000001846B2EFF40>]
**************************************************
device = COM1
name = COM1
description = ELTIMA Virtual Serial Port (COM1->COM2)
hwid = VSBC7\DEVICES\0000
vid = None
pid = None
serial_number = None
location = None
manufacturer ELTIMA Software
product = None
interface = None