【pySerial3.4官方文档】3、pySerial API

pySerial API 

本地端口

serial.Serial

__init__port = Nonebaudrate = 9600bytesize = EIGHTBITSparity = PARITY_NONEstopbits = STOPBITS_ONEtimeout = Nonexonxoff = Falsertscts = Falsewrite_timeout = Nonedsrdtr = Falseinter_byte_timeout = Noneexclusive = None 

参数:
  • 端口 - 设备名称或None
  • baudrateint) - 波特率,如9600或115200等。
  • bytesize - 数据位数。可能的值: FIVEBITSSIXBITSSEVENBITS, EIGHTBITS
  • 奇偶校验 - 启用奇偶校验。可能的值:PARITY_NONEPARITY_EVEN,,PARITY_ODD PARITY_MARKPARITY_SPACE
  • stopbits - 停止位数。可能的值: STOPBITS_ONESTOPBITS_ONE_POINT_FIVESTOPBITS_TWO
  • timeoutfloat) - 设置读取超时值。
  • xonxoffbool) - 启用软件流控制。
  • rtsctsbool) - 启用硬件(RTS / CTS)流量控制。
  • dsrdtrbool) - 启用硬件(DSR / DTR)流控制。
  • write_timeoutfloat) - 设置写超时值。
  • inter_byte_timeoutfloat) - 字符间超时,None禁用(默认)。
  • exclusivebool) - 设置独占访问模式(仅限POSIX)。如果端口在独占访问模式下已打开,则无法以独占访问模式打开该端口。
异常:
  • ValueError - 当参数超出范围时将引发,例如波特率,数据位。
  • SerialException - 如果找不到设备或无法配置设备。

在给出端口时,在创建对象时立即打开端口。当端口None并且需要连续调用时它不会打开open()

port是设备名称:取决于操作系统。例如 /dev/ttyUSB0在GNU / Linux或COM3Windows上。

参数波特率可以是标准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200。这些都得到了很好的支持所有平台。

高于115200的标准值,例如:230400,460800,500000,576000,921600,1000000,1152000,1500000,2000000,2500000,3000000,3500000,4000000也适用于许多平台和设备。

某些平台(GNU / Linux,MAC OSX> = Tiger,Windows)也支持非标准值。但是,即使在这些平台上,某些串行端口也可能会拒绝非标准值。

参数超时的可能值,用于控制以下行为read()

  • timeout = None:永远等待/直到收到请求的字节数
  • timeout = 0:非阻塞模式,在任何情况下立即返回,返回零或更多,直到请求的字节数
  • timeout = x:set timeout to xseconds(float allowed)在请求的字节数可用时立即返回,否则等到超时到期并返回之前收到的所有字节。

write()默认情况下是阻塞,除非设置了write_timeout。有关可能的值,请参阅上面的超时列表。

请注意,可能不支持同时启用两种流控制方法(xonxoffrtscts)。通常一次使用其中一种方法,而不是两种方法。

并非所有平台都支持dsrdtr(以静默方式忽略)。将其设置为None具有其状态遵循rtscts的效果。

还要考虑使用该函数serial_for_url()而不是直接创建Serial实例。

在版本2.5中更改:dsrdtr现在默认为False(而不是None

版本3.0中已更改:不再支持数字作为端口参数

版本3.3中的新功能:exclusive标志

open()

打开端口。状态rtsdtr应用。

注意

一旦打开端口,某些OS和/或驱动程序可能会自动激活RTS和/或DTR。有可能是在RTS / DTR毛刺时rtsdtr从它们的默认值(不同地设置True/激活)。

注意

出于兼容性原因,由于EINVAL(22)或ENOTTY(25)而在POSIX上应用rtsdtr失败时未报告错误 。

close()

立即关闭端口。

__del__()

析构函数,释放串行端口实例时的关闭端口。

SerialException应用于封闭端口时,可能会出现以下方法。

readsize = 1 

参数: size - 要读取的字节数。
返回: 从端口读取的字节数。
返回类型: 字节

从串行端口读取大小字节。如果设置了超时,则可能会根据请求返回较少的字符。没有超时,它将阻塞,直到读取所请求的字节数。

在版本2.5中更改:返回bytes可用时的实例(Python 2.6和更新版本),str否则返回。

read_until期望= LF大小=无

参数:
  • expected - 要搜索的字节字符串。
  • size - 要读取的字节数。
返回:

从端口读取的字节数。

返回类型:

字节

读取直到找到预期的序列(默认为'\ n'),超出大小或发生超时。如果设置了超时,则可能会根据请求返回较少的字符。没有超时,它将阻塞,直到读取所请求的字节数。

在版本2.5中更改:返回bytes可用时的实例(Python 2.6和更新版本),str否则返回。

write数据

参数: data - 要发送的数据。
返回: 写入的字节数。
返回类型: INT
异常: SerialTimeoutException - 如果为端口配置了写入超时并且超过了时间。

将字节数据写入端口。这应该是类型bytes (或兼容,如bytearraymemoryview)。必须对Unicode字符串进行编码(例如'hello'.encode('utf-8')。

在2.5版本中更改:接受的情况下,bytesbytearray(Python的2.6和更高版本)和可用时str除外。

在版本2.5中更改:None在先前版本中返回写入。

flush()

像对象一样刷新文件。在这种情况下,请等待所有数据写入。

in_waiting

Getter: 获取输入缓冲区中的字节数
类型: INT

返回接收缓冲区中的字节数。

在3.0版中更改:从更改为属性inWaiting()

out_waiting

Getter: 获取输出缓冲区中的字节数
类型: INT
平台: POSIX
平台: 视窗

返回输出缓冲区中的字节数。

在2.7版中更改:(已添加Posix支持)

在3.0版中更改:从更改为属性outWaiting()

reset_input_buffer()

刷新输入缓冲区,丢弃其所有内容。

在3.0版中更改:从中重命名flushInput()

reset_output_buffer()

清除输出缓冲区,中止当前输出并丢弃缓冲区中的所有内容。

请注意,对于某些USB串行适配器,这可能只会刷新OS的缓冲区,而不会刷新USB部件中可能存在的所有数据。

在3.0版中更改:从中重命名flushOutput()

send_break持续时间= 0.25 

参数: durationfloat) - 激活BREAK条件的时间。

发送休息条件。定时,在给定的持续时间后返回空闲状态。

break_condition

Getter:  
Setter: 控制BREAK状态
类型: 布尔

设置为True激活BREAK条件时,否则禁用。控制TXD。激活时,无法进行传输。

rts

Setter: 设置RTS线的状态
Getter: 返回RTS行的状态
类型: 布尔

将RTS线设置为指定的逻辑电平。可以在打开串口之前分配该值,然后应用该值 open()(有限制,请参阅参考资料open())。

dtr

Setter: 设置DTR线的状态
Getter: 返回DTR线的状态
类型: 布尔

将DTR线设置为指定的逻辑电平。可以在打开串口之前分配该值,然后应用该值 open()(有限制,请参阅参考资料open())。

只读属性:

name

Getter: 设备名称。
类型: 海峡

2.5版中的新功能。

cts

Getter: 获取CTS线的状态
类型: 布尔

返回CTS线的状态。

dsr

Getter: 获取DSR行的状态
类型: 布尔

返回DSR行的状态。

ri

Getter: 获取RI线的状态
类型: 布尔

返回RI线的状态。

cd

Getter: 获取CD行的状态
类型: 布尔

返回CD行的状态

is_open

Getter: 获取串口的状态,无论是否打开。
类型: 布尔

可以将新值分配给以下属性(属性),即使在此时打开端口,也会重新配置端口:

port

类型: 海峡

读或写端口。当端口已打开时,它将关闭并使用新设置重新打开。

baudrate

Getter: 获取当前波特率
Setter: 设置新的波特率
类型: INT

读取或写入当前波特率设置。

bytesize

Getter: 获取当前字节大小
Setter: 设置新的字节大小。可能的值: FIVEBITSSIXBITSSEVENBITS, EIGHTBITS
类型: INT

读取或写入当前数据字节大小设置。

parity

Getter: 获取当前奇偶校验设置
二传手: 设置新的奇偶校验模式 可能的值: PARITY_NONEPARITY_EVEN,,PARITY_ODDPARITY_MARKPARITY_SPACE

读取或写入当前奇偶校验设置。

stopbits

Getter: 获取当前停止位设置
二传手: 设置新的停止位设置。可能的值: STOPBITS_ONESTOPBITS_ONE_POINT_FIVESTOPBITS_TWO

读或写当前停止位宽设置。

timeout

Getter: 获取当前读取超时设置
Setter: 设置读取超时
类型: 浮点(秒)

读取或写入当前读取超时设置。

write_timeout

Getter: 获取当前写入超时设置
Setter: 设置写入超时
类型: 浮点(秒)

读或写当前写超时设置。

在3.0版中更改:从中重命名writeTimeout

inter_byte_timeout

Getter: 获取当前的字节间超时设置
Setter: 禁用(None)或启用字节间超时
类型: 浮动或无

读取或写入当前的字节间超时设置。

在3.0版中更改:从中重命名interCharTimeout

xonxoff

Getter: 获取当前的软件流控制设置
Setter: 启用或禁用软件流控制
类型: 布尔

读取或写入当前软件流量控制速率设置。

rtscts

Getter: 获取当前的硬件流控制设置
Setter: 启用或禁用硬件流控制
类型: 布尔

读取或写入当前硬件流控制设置。

dsrdtr

Getter: 获取当前的硬件流控制设置
Setter: 启用或禁用硬件流控制
类型: 布尔

读取或写入当前硬件流控制设置。

rs485_mode

Getter: 获取当前的RS485设置
Setter: 禁用(None)或启用RS485设置
类型: rs485.RS485Settings 要么 None
平台: Posix(Linux,有限的硬件组)
平台: Windows(只有TX上的RTS可能)

配置RS485支持的属性。当设置为rs485.RS485SettingsOS 的实例 并由OS支持时,RTS将在发送数据时处于活动状态,否则将处于非活动状态(用于接收)。本 rs485.RS485Settings类提供支持的在某些平台上的其他设置。

版本3.0中的新功能。

还提供了以下常量:

BAUDRATES

有效波特率列表。该列表可能是不完整的,因此设备也可以支持更高和/或中间的波特率(只读)。

BYTESIZES

设备的有效字节大小列表(只读)。

PARITIES

设备的有效奇偶校验列表(只读)。

STOPBITS

设备的有效停止位宽列表(只读)。

以下方法用于与io库兼容。

readable()

返回: 真正

2.5版中的新功能。

writable()

返回: 真正

2.5版中的新功能。

seekable()

返回:

2.5版中的新功能。

readinto

参数: b - bytearray或数组实例
返回: 读取的字节数

将len(b)字节读入b并返回读取的字节数。bytearray

2.5版中的新功能。

readlinesize = -1 

通过提供 io.IOBase.readline()

readlines提示= -1 

通过提供 io.IOBase.readlines()

writelines

通过提供 io.IOBase.writelines()

端口设置可以作为字典读取和写入。下面的键被支持:write_timeoutinter_byte_timeoutdsrdtrbaudratetimeoutparitybytesize, rtsctsstopbitsxonxoff

get_settings()

返回: 具有当前端口设置的字典。
返回类型: 字典

获取包含端口设置的字典。这对于备份当前设置非常有用,以便以后可以使用它们进行恢复apply_settings()

请注意,控制线的状态(RTS / DTR)不是设置的一部分。

2.5版中的新功能。

在3.0版中更改:从中重命名getSettingsDict

apply_settings

参数: d字典) - 带端口设置的字典。

应用由...创建的字典get_settings()。仅应用更改,并且当缺少键时,表示设置保持不变。

请注意,控制线(RTS / DTR)不会更改。

2.5版中的新功能。

在3.0版中更改:从中重命名applySettingsDict

该类可以用作上下文管理器。离开上下文时,串口将关闭。

__enter__()

返回: 串行实例

返回with语句中使用的实例。

例:

>>> with serial.serial_for_url(port) as s:
...     s.write(b'hello')

端口自动打开:

>>> port = serial.Serial()
>>> port.port = '...'
>>> with port as s:
...     s.write(b'hello')

这也意味着with每次打开和关闭端口时都可以重复使用语句。

版本3.4中已更改:端口自动打开

__exit__exc_typeexc_valexc_tb 

关闭串口(不处理异常__exit__)。

平台特定方法。

警告

使用以下方法和属性的程序无法移植到其他平台!

nonblocking()

平台: POSIX

从版本3.2开始不推荐使用:串行端口已在此模式下打开。这种方法不需要也不会消失。

fileno()

平台: POSIX
返回: 文件描述符。

返回此对象打开的端口的文件描述符编号。与串行端口一起使用时非常有用select

set_input_flow_control启用

平台: POSIX
参数: enablebool) - 设置流量控制状态。

手动控制流程 - 启用软件流控制时。

这会将XON(true)和XOFF(false)发送到其他设备。

版本2.7中的新功能:(添加了Posix支持)

在3.0版中更改:从中重命名flowControlOut

set_output_flow_control启用

平台: Posix(硬件和软件流量控制)
平台: Windows(仅限SW流控制)
参数: enablebool) - 设置流量控制状态。

手动控制传出数据流 - 启用硬件或软件流控制时。

调用时将暂停发送,调用False时将启用发送True

在2.7版中更改:(在Posix上重命名,函数被调用flowControl

在3.0版中更改:从中重命名setXON

cancel_read()

平台: POSIX
平台: 视窗

从另一个线程取消挂起的读取操作。阻塞 read()呼叫立即中止。read()不会报告任何错误,但会返回到该点收到的所有数据(类似于超时)。

在Posix上,对cancel_read()的调用可能会取消将来的read()呼叫。

版本3.1中的新功能。

cancel_write()

平台: POSIX
平台: 视窗

从另一个线程取消挂起的写操作。该 write()方法将立即返回(未指示错误)。但是,OS可能仍在从缓冲区发送,reset_output_buffer()可能需要单独调用 。

在Posix上,对cancel_write()的调用可能会取消将来的write()呼叫。

版本3.1中的新功能。

注意

以下成员已弃用,将在以后的版本中删除。

portstr

从版本2.5开始不推荐使用:name改为使用

inWaiting()

自3.0版以来已弃用:请参阅in_waiting

isOpen()

自3.0版以来已弃用:请参阅is_open

writeTimeout

自3.0版以来已弃用:请参阅write_timeout

interCharTimeout

自3.0版以来已弃用:请参阅inter_byte_timeout

sendBreak持续时间= 0.25 

自3.0版以来已弃用:请参阅send_break()

flushInput()

自3.0版以来已弃用:请参阅reset_input_buffer()

flushOutput()

自3.0版以来已弃用:请参阅reset_output_buffer()

setBreaklevel = True 

自3.0版以来已弃用:请参阅break_condition

setRTSlevel = True 

自3.0版以来已弃用:请参阅rts

setDTRlevel = True 

自3.0版以来已弃用:请参阅dtr

getCTS()

自3.0版以来已弃用:请参阅cts

getDSR()

自3.0版以来已弃用:请参阅dsr

getRI()

自3.0版以来已弃用:请参阅ri

getCD()

自3.0版以来已弃用:请参阅cd

getSettingsDict()

自3.0版以来已弃用:请参阅get_settings()

applySettingsDict

自3.0版以来已弃用:请参阅apply_settings()

outWaiting()

自3.0版以来已弃用:请参阅out_waiting

setXONlevel = True 

自3.0版以来已弃用:请参阅set_output_flow_control()

flowControlOut启用

自3.0版以来已弃用:请参阅set_input_flow_control()

rtsToggle

平台: 视窗

用于配置RTS切换控制设置的属性。当OS启用并支持时,RTS将在数据可用时处于活动状态,如果没有可用数据则处于非活动状态。

版本2.6中的新功能。

版本3.0中已更改:(已删除,请参阅rs485_mode

实现细节:一些属性和函数由类提供,serial.SerialBase它们io.RawIOBase 由平台特定类继承,有些由上面提到的基类继承。

RS485支持

Serial类有一个Serial.rs485_mode属性,它允许启用在某些平台上RS485具体的支持。目前支持Windows和Linux(仅少数设备)。

Serial.rs485_mode需要设置为rs485.RS485Settings启用或None禁用此功能的实例 。

用法:

import serial
import serial.rs485
ser = serial.Serial(...)
ser.rs485_mode = serial.rs485.RS485Settings(...)
ser.write(b'hello')

有一个子类rs485.RS485可用于模拟常规串行端口上的RS485支持(serial.rs485需要导入)。

rs485.RS485Settings

包含某些平台支持的RS485特定设置的类。

版本3.0中的新功能。

__init__(rts_level_for_tx=True, rts_level_for_rx=False, loopback=False, delay_before_tx=None, delay_before_rx=None):

参数:
  • rts_level_for_txbool) - 传输的RTS级别
  • rts_level_for_rxbool) - 接收的RTS级别
  • loopbackbool) - 当设置为True传输数据时也会收到。
  • delay_before_txfloat) - 设置RTS后但在传输开始之前的延迟
  • delay_before_rxfloat) - 传输结束后延迟并重置RTS

rts_level_for_tx

传输的RTS级别。

rts_level_for_rx

接收的RTS级别。

loopback

当设置为True传输数据时也会收到。

delay_before_tx

设置RTS之后但在传输开始之前延迟(秒为浮动)。

delay_before_rx

传输结束后延迟并重置RTS(浮点数秒)。

rs485.RS485

一个子类,Serial.write()用一个根据RS485设置切换RTS 的方法替换该方法。

用法:

ser = serial.rs485.RS485(...)
ser.rs485_mode = serial.rs485.RS485Settings(...)
ser.write(b'hello')

警告

这可能在某些串行端口上不可靠地工作(与数据相比,控制信号未同步或延迟)。使用延迟可能是不可靠的(变化的时间,大于预期),因为OS可能不支持非常精细的粒度延迟(不小于几十毫秒的量级)。

注意

一些实现在本机中支持它 Serial。使用本机版本时,可以预期更好的性能。

注意

此实现忽略loopback属性。实际行为取决于使用的硬件。

RFC 2217网络端口

警告

该实现目前处于实验状态。使用风险由您自己承担。

rfc2217.Serial

这实现了一个 RFC 2217兼容客户端。端口名称是以下形式的URL:rfc2217://:[?

此类API兼容,但Serial有一些例外:

  • write_timeout 没有实现
  • 当前实现启动一个不断读取(内部)套接字的线程。该线程由/ rfc2217.Serial上的端口对象自动管理 。但是,对于喜欢使用select而不是线程的用户应用程序来说,这可能是一个问题。open()close()

由于涉及网络和协议的性质,需要记住一些额外的要点:

  • 所有操作都有额外的延迟时间。
  • 设置控制线(RTS / CTS)需要更多时间。
  • 读取状态行(DSR / DTR等)将返回缓存值。更新缓存时完全取决于服务器。服务器本身可以以特定速率实现轮询,并且快速更改可能是不可见的。
  • 网络层也有缓冲区。这意味着flush(), reset_input_buffer()并且reset_output_buffer()可能会有额外的延迟。同样in_waiting返回到达对象内部缓冲区的数据大小,并排除网络缓冲区或任何服务器端缓冲区中的任何字节。
  • 由于服务器需要再次准备所需的时间,关闭并立即重新打开同一端口可能会失败。

尚未实施/实施可能出现的问题:

  • 客户端和服务器之间的 RFC 2217流控制(对象内部缓冲区可能会在从未读取时占用您的所有内存)。
  • 没有身份验证支持(服务器可能无法提示输入密码等)
  • 没有加密。

由于缺乏身份验证和加密,因此不适合将此客户端用于Internet上的连接,并且只应在受控环境中使用。

2.5版中的新功能。

rfc2217.PortManager

该类提供了实现的辅助函数 RFC 2217 兼容服务器。

基本上,它实现了所需的一切 RFC 2217协议。它只是不打开套接字和读/写串口(虽然它改变了其他端口设置)。该类的用户必须自己处理数据传输。这样做的原因是,这个类支持所有编程模型,如线程和选择。

在示例中可以找到用法示例,其中显示了两个TCP / IP - 串行转换器,一个使用线程(单端口服务器),另一个使用select(多端口服务器)。

注意

每个新的客户端连接都必须创建一个新实例作为此对象(和 RFC 2217协议)具有内部状态。

__init__serial_portconnectiondebug_output = False 

参数:
  • serial_port - 受Serial管理的实例。
  • connection - 实现的对象write(),用于写入网络。
  • debug_output - 启用调试消息:logging.Logger 实例或无。

初始化Manager并开始在Telnet和客户端进行协商 RFC 2217协议。协商立即开始,以便在客户端连接的那一刻实例化该类。

serial_port可以通过控制RFC 2217命令。当通过该filter()方法找到相应的命令时,该对象将修改端口设置(波特率等)和控制线(RTS / DTR)发送BREAK等。

连接对象必须实现一个write()功能。此函数必须确保一次写入数据(没有混合用户数据,即它必须是线程安全的)。所有数据必须以原始形式发送(escape()不得使用),因为它用于发送Telnet和RFC 2217控制命令。

对于连接或实现的诊断, 可以将debug_output设置为a logging.Logger(例如logging.getLogger('rfc2217.server'))的实例。调用者应使用setLevel日志记录器的所需详细级别来配置记录器。

escape数据

参数: 数据 - 通过网络发送的数据。
返回: 数据,转发为Telnet /RFC 2217

一个转义所有数据以与之兼容的生成器 RFC 2217。服务器的实现者应该使用此功能来处理通过网络发送的所有数据。

该函数返回一个可用于for循环的生成器。它可以使用转换为字节serial.to_bytes()

filter数据

参数: 数据 - 从网络读取的数据,包括Telnet和 RFC 2217控件。
返回: 数据,免于Telnet和 RFC 2217控件。

用于过滤和处理与之相关的所有数据的生成器 RFC 2217。服务器的实现者应该使用此功能来处理从网络接收的所有数据。

该函数返回一个可用于for循环的生成器。它可以使用转换为字节serial.to_bytes()

check_modem_linesforce_notification = False 

参数: force_notification - 设置为false。参数供内部使用。

当服务器想要发送NOTIFY_MODEMSTATE消息时,需要定期调用此函数(例如每秒)。这是支持客户端读取CTS / DSR / RI / CD状态行所必需的。

该函数读取状态行并自动发出通知。

2.5版中的新功能。

也可以看看

RFC 2217 - Telnet Com端口控制选项

异常

异常serial.SerialException

串口异常的基类。

在版本2.5中更改:现在派生自IOError而不是Exception

异常serial.SerialTimeoutException

写入超时引发的异常。

常数

平价

serial.PARITY_NONE

serial.PARITY_EVEN

serial.PARITY_ODD

serial.PARITY_MARK

serial.PARITY_SPACE

停止位

serial.STOPBITS_ONE

serial.STOPBITS_ONE_POINT_FIVE

serial.STOPBITS_TWO

请注意,POSIX上不支持1.5个停止位。它将回落到2个停止位。

字节大小

serial.FIVEBITS

serial.SIXBITS

serial.SEVENBITS

serial.EIGHTBITS

其他

bytes用于软件流控制的默认控制字符(Python 3.0+的实例):

serial.XON

serial.XOFF

模块版本:

serial.VERSION

表示pySerial版本的字符串,例如3.0

版本2.3中的新功能。

模块功能和属性

serial.device编号

在3.0版中更改:已删除,请serial.tools.list_ports改用

serial.serial_for_urlurl* args** kwargs 

参数:
  • url - 设备名称,编号或URL
  • do_not_open - 设置为true时,不打开串行端口。
返回:

一个Serial或一个兼容对象的实例。

获得本地人或 RFC 2217 Serial类的实现,取决于port / url。当应用程序想要同时支持本地端口和远程端口时,此工厂功能非常有用。还支持其他类型,请参阅 URL部分。

当给出一个名为do_not_open的关键字参数为true时,不会打开该端口,默认情况下会打开该端口。

2.5版中的新功能。

serial.protocol_handler_packages

此属性是搜索协议处理程序的程序包名称(字符串)列表。

例如,我们想要支持一个URL foobar://my_handlers.protocol_foobar用户提供了一个模块 :

serial.protocol_handler_packages.append("my_handlers")
s = serial.serial_for_url("foobar://")

对于以...开头的URL,XY://该函数serial_for_url() 尝试从此列表中导入PACKAGE.protocol_XY每个候选者 PACKAGE

版本2.6中的新功能。

serial.to_bytes序列

参数: sequence - bytes,bytearray或memoryview
返回: 一个例子 bytes

将序列转换为bytes类型。这用于编写与Python 2.x和3.x兼容的代码。

在3.x之前的Python版本中,bytes是str的子类。它们转换 str([17])'[17]'代替,'\x11'因此简单 bytes(sequence)不适用于所有版本的Python。

此功能在内部和单元测试中使用。

2.5版中的新功能。

serial.iterbytes序列

参数: sequence - bytes,bytearray或memoryview
返回: 产生字节的生成器

某些版本的Python(3.x)在循环实例时会返回整数而不是字节bytes。此帮助程序函数可确保返回字节。

版本3.0中的新功能。

线程

版本3.0中的新功能。

警告

该实现目前处于实验状态。使用风险由您自己承担。

此模块提供类以简化线程和协议的使用。

serial.threaded.Protocol

使用的协议ReaderThread。此基类提供所有方法的空实现。

connection_made运输

参数: transport - 用于写入串行端口的实例。

读取器线程启动时调用。

data_received数据

参数: 数据字节) - 接收的字节数

使用从串行端口接收的片段进行调用。

connection_lostexc 

参数: exc - 如果连接因错误而终止,则异常None

串行端口关闭或读取器循环终止时调用。

classserial.threaded.PacketizerProtocol 

从串口读取二进制数据包。数据包应以TERMINATOR字节终止(默认为空字节)。

该班还跟踪运输。

TERMINATOR = b'\0'

__init__()

connection_made运输

商店运输。

connection_lostexc 

忘记运输。

data_received数据

参数: data字节) - 部分接收数据

缓冲区接收数据并TERMINATOR在找到时搜索handle_packet()

handle_packet

参数: packetbytes) - 由...定义的数据包TERMINATOR

处理数据包 - 由子类化覆盖。

classserial.threaded.LineReaderPacketizer 

从/到串口读写(Unicode)线。应用编码。

TERMINATOR = b'\r\n'

行结束。

ENCODING = 'utf-8'

编码发送和接收的数据。

UNICODE_HANDLING = 'replace'

Unicode错误手动策略。

handle_packet

参数: packetbytes) - 由...定义的数据包TERMINATOR

在这种情况下,它将是一行,handle_line()在应用之后调用ENCODING

handle_line

参数: linestr) - 包含一行的Unicode字符串(不包括行终止符)

处理一行 - 由子类重写。

write_line文字

参数: textstr) - 包含一行的Unicode字符串(不包括行终止符)

文本写入传输。text应该是一个Unicode字符串,并且在发送之前应用编码,并且还TERMINATOR附加(新行)。

classserial.threaded.ReaderThreadthreading.Thread 

实现一个串口读取循环并分派到一个Protocol实例(比如asyncio.Protocol),但是用线程来做。

调用close()将关闭串口,但也可能只是stop()这个线程,否则继续使用串口实例。

__init__serial_instanceprotocol_factory 

参数:
  • serial_instance - 要使用的串行端口实例(已打开)。
  • protocol_factory - 返回Protocol实例的可调用对象

初始化线程。

请注意,serial_instance超时设置为一秒!其他设置不会更改。

stop()

停止读者线程。

run()

由线程驱动的实际读者循环。它调用 Protocol.connection_made(),从串口调用读取Protocol.data_received(),最后在调用Protocol.connection_lost() 时close()调用或发生错误。

write数据

参数: databytes) - 要写入的数据

线程安全写入(使用锁定)。

close()

关闭串口并退出读卡器线程,调用stop()(使用锁定)。

connect()

等到设置连接并返回传输和协议实例。

这个类可以用作上下文管理器,在这种情况下它启动线程并自动连接。离开上下文时,串口将关闭。

__enter__()

返回: 协议

连接并返回协议实例。

__exit__exc_typeexc_valexc_tb 

关闭串口。

例:

class PrintLines(LineReader):
    def connection_made(self, transport):
        super(PrintLines, self).connection_made(transport)
        sys.stdout.write('port opened\n')
        self.write_line('hello world')

    def handle_line(self, data):
        sys.stdout.write('line received: {}\n'.format(repr(data)))

    def connection_lost(self, exc):
        if exc:
            traceback.print_exc(exc)
        sys.stdout.write('port closed\n')

ser = serial.serial_for_url('loop://', baudrate=115200, timeout=1)
with ReaderThread(ser, PrintLines) as protocol:
    protocol.write_line('hello')
    time.sleep(2)

ASYNCIO 

asyncio是用Python 3.4引入的。pySerial的实验支持是通过单独的pyserial-asyncio分发提供的。

目前正在开发中,请参阅:

  • http://pyserial-asyncio.readthedocs.io/
  • https://github.com/pyserial/pyserial-asyncio

 

 

你可能感兴趣的:(【pySerial3.4官方文档】3、pySerial API)