PySerial模块的使用

PySerial模块的使用

serial.Serial类

serial.Serial的参数

参数 功能
port 设置端口名称,例如’COM1’。类型:str
baudrate 设置波特率。类型:int
bytesize 设置数据位。可能的值:FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS
parity 设置校验。可能的值: PARITY_NONE, PARITY_EVEN, ,PARITY_ODD PARITY_MARKPARITY_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 to xseconds (float allowed) 当请求的字节数可用时立即返回,否则等到超时到期并返回到那时为止收到的所有字节。
  • write()默认情况下是阻塞的,除非设置了write_timeout (设置的值同上)。
  • 可能不支持同时启用两种流量控制方法(xonxoff和*rtscts )。*通常一次使用其中一种方法,而不是同时使用两种方法。
  • 并非所有平台都支持dsrdtr (已忽略)。将其设置为具有其状态遵循rtsctsNone效果。
  • 还可以考虑使用函数serial_for_url()而不是直接创建 Serial 实例。
  • 在 2.5 版中更改:dsrdtr现在默认为False(而不是None
  • 在 3.0 版更改:不再支持数字作为端口参数
  • 3.3 新版功能:exclusive标志

常量

常量 名称 说明
BAUDRATES 波特率 有效波特率列表。该列表可能不完整,因此设备也可能支持更高和/或中等波特率(只读)。
BYTESIZES 数据位 设备的有效字节大小列表(只读)。
PARITIES 校验 设备的有效奇偶校验列表(只读)。
STOPBITS 停止位 设备的有效停止位宽度列表(只读)。

常用方法

方法 参数 功能 注意
open() 打开端口,rts和的状态dtr被应用 一旦端口打开,某些操作系统和/或驱动程序可能会自动激活 RTS 和/或 DTR。当rtsdtr的设置值与其默认值 ( 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, EIGHTBITSType: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.RS485SettingsorNone 平台:
· 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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平