类serial.
Serial
__init__
(port = None,baudrate = 9600,bytesize = EIGHTBITS,parity = PARITY_NONE,stopbits = STOPBITS_ONE,timeout = None,xonxoff = False,rtscts = False,write_timeout = None,dsrdtr = False,inter_byte_timeout = None,exclusive = None )
参数: |
|
---|---|
异常: |
|
在给出端口时,在创建对象时立即打开端口。当端口是None
并且需要连续调用时它不会打开open()
。
port是设备名称:取决于操作系统。例如 /dev/ttyUSB0
在GNU / Linux或COM3
Windows上。
参数波特率可以是标准值之一: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 x
seconds(float allowed)在请求的字节数可用时立即返回,否则等到超时到期并返回之前收到的所有字节。write()
默认情况下是阻塞,除非设置了write_timeout。有关可能的值,请参阅上面的超时列表。
请注意,可能不支持同时启用两种流控制方法(xonxoff和rtscts)。通常一次使用其中一种方法,而不是两种方法。
并非所有平台都支持dsrdtr(以静默方式忽略)。将其设置为None
具有其状态遵循rtscts的效果。
还要考虑使用该函数serial_for_url()
而不是直接创建Serial实例。
在版本2.5中更改:dsrdtr现在默认为False
(而不是None)
版本3.0中已更改:不再支持数字作为端口参数
版本3.3中的新功能:exclusive
标志
open
()
打开端口。状态rts
和dtr
应用。
注意
一旦打开端口,某些OS和/或驱动程序可能会自动激活RTS和/或DTR。有可能是在RTS / DTR毛刺时rts
或dtr
从它们的默认值(不同地设置True
/激活)。
注意
出于兼容性原因,由于EINVAL(22)或ENOTTY(25)而在POSIX上应用rts
或dtr
失败时未报告错误 。
close
()
立即关闭端口。
__del__
()
析构函数,释放串行端口实例时的关闭端口。
SerialException
应用于封闭端口时,可能会出现以下方法。
read
(size = 1 )
参数: | size - 要读取的字节数。 |
---|---|
返回: | 从端口读取的字节数。 |
返回类型: | 字节 |
从串行端口读取大小字节。如果设置了超时,则可能会根据请求返回较少的字符。没有超时,它将阻塞,直到读取所请求的字节数。
在版本2.5中更改:返回bytes
可用时的实例(Python 2.6和更新版本),str
否则返回。
read_until
(期望= LF,大小=无)
参数: |
|
---|---|
返回: | 从端口读取的字节数。 |
返回类型: | 字节 |
读取直到找到预期的序列(默认为'\ n'),超出大小或发生超时。如果设置了超时,则可能会根据请求返回较少的字符。没有超时,它将阻塞,直到读取所请求的字节数。
在版本2.5中更改:返回bytes
可用时的实例(Python 2.6和更新版本),str
否则返回。
write
(数据)
参数: | data - 要发送的数据。 |
---|---|
返回: | 写入的字节数。 |
返回类型: | INT |
异常: | SerialTimeoutException - 如果为端口配置了写入超时并且超过了时间。 |
将字节数据写入端口。这应该是类型bytes
(或兼容,如bytearray
或memoryview
)。必须对Unicode字符串进行编码(例如'hello'.encode('utf-8'
)。
在2.5版本中更改:接受的情况下,bytes
和bytearray
(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 )
参数: | duration(float) - 激活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: | 设置新的字节大小。可能的值: FIVEBITS ,SIXBITS ,SEVENBITS , EIGHTBITS |
类型: | INT |
读取或写入当前数据字节大小设置。
parity
Getter: | 获取当前奇偶校验设置 |
---|---|
二传手: | 设置新的奇偶校验模式 可能的值: PARITY_NONE ,PARITY_EVEN ,,PARITY_ODD PARITY_MARK PARITY_SPACE |
读取或写入当前奇偶校验设置。
stopbits
Getter: | 获取当前停止位设置 |
---|---|
二传手: | 设置新的停止位设置。可能的值: STOPBITS_ONE ,STOPBITS_ONE_POINT_FIVE ,STOPBITS_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.RS485Settings
OS 的实例 并由OS支持时,RTS将在发送数据时处于活动状态,否则将处于非活动状态(用于接收)。本 rs485.RS485Settings
类提供支持的在某些平台上的其他设置。
版本3.0中的新功能。
还提供了以下常量:
BAUDRATES
有效波特率列表。该列表可能是不完整的,因此设备也可以支持更高和/或中间的波特率(只读)。
BYTESIZES
设备的有效字节大小列表(只读)。
PARITIES
设备的有效奇偶校验列表(只读)。
STOPBITS
设备的有效停止位宽列表(只读)。
以下方法用于与io
库兼容。
readable
()
返回: | 真正 |
---|
2.5版中的新功能。
writable
()
返回: | 真正 |
---|
2.5版中的新功能。
seekable
()
返回: | 假 |
---|
2.5版中的新功能。
readinto
(b )
参数: | b - bytearray或数组实例 |
---|---|
返回: | 读取的字节数 |
将len(b)字节读入b并返回读取的字节数。bytearray
2.5版中的新功能。
readline
(size = -1 )
通过提供 io.IOBase.readline()
readlines
(提示= -1 )
通过提供 io.IOBase.readlines()
writelines
(行)
通过提供 io.IOBase.writelines()
端口设置可以作为字典读取和写入。下面的键被支持:write_timeout
,inter_byte_timeout
,dsrdtr
,baudrate
,timeout
,parity
,bytesize
, rtscts
,stopbits
,xonxoff
get_settings
()
返回: | 具有当前端口设置的字典。 |
---|---|
返回类型: | 字典 |
获取包含端口设置的字典。这对于备份当前设置非常有用,以便以后可以使用它们进行恢复apply_settings()
。
请注意,控制线的状态(RTS / DTR)不是设置的一部分。
2.5版中的新功能。
在3.0版中更改:从中重命名getSettingsDict
apply_settings
(d )
参数: | 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_type,exc_val,exc_tb )
关闭串口(不处理异常__exit__
)。
平台特定方法。
警告
使用以下方法和属性的程序无法移植到其他平台!
nonblocking
()
平台: | POSIX |
---|
从版本3.2开始不推荐使用:串行端口已在此模式下打开。这种方法不需要也不会消失。
fileno
()
平台: | POSIX |
---|---|
返回: | 文件描述符。 |
返回此对象打开的端口的文件描述符编号。与串行端口一起使用时非常有用select
。
set_input_flow_control
(启用)
平台: | POSIX |
---|---|
参数: | enable(bool) - 设置流量控制状态。 |
手动控制流程 - 启用软件流控制时。
这会将XON(true)和XOFF(false)发送到其他设备。
版本2.7中的新功能:(添加了Posix支持)
在3.0版中更改:从中重命名flowControlOut
set_output_flow_control
(启用)
平台: | Posix(硬件和软件流量控制) |
---|---|
平台: | Windows(仅限SW流控制) |
参数: | enable(bool) - 设置流量控制状态。 |
手动控制传出数据流 - 启用硬件或软件流控制时。
调用时将暂停发送,调用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()
setBreak
(level = True )
自3.0版以来已弃用:请参阅break_condition
setRTS
(level = True )
自3.0版以来已弃用:请参阅rts
setDTR
(level = 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
(d )
自3.0版以来已弃用:请参阅apply_settings()
outWaiting
()
自3.0版以来已弃用:请参阅out_waiting
setXON
(level = 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
由平台特定类继承,有些由上面提到的基类继承。
本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_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属性。实际行为取决于使用的硬件。
警告
该实现目前处于实验状态。使用风险由您自己承担。
类rfc2217.
Serial
这实现了一个 RFC 2217兼容客户端。端口名称是以下形式的URL:rfc2217://
此类API兼容,但Serial
有一些例外:
write_timeout
没有实现rfc2217.Serial
上的端口对象自动管理 。但是,对于喜欢使用select而不是线程的用户应用程序来说,这可能是一个问题。open()
close()
由于涉及网络和协议的性质,需要记住一些额外的要点:
flush()
, reset_input_buffer()
并且reset_output_buffer()
可能会有额外的延迟。同样in_waiting
返回到达对象内部缓冲区的数据大小,并排除网络缓冲区或任何服务器端缓冲区中的任何字节。尚未实施/实施可能出现的问题:
由于缺乏身份验证和加密,因此不适合将此客户端用于Internet上的连接,并且只应在受控环境中使用。
2.5版中的新功能。
类rfc2217.
PortManager
该类提供了实现的辅助函数 RFC 2217 兼容服务器。
基本上,它实现了所需的一切 RFC 2217协议。它只是不打开套接字和读/写串口(虽然它改变了其他端口设置)。该类的用户必须自己处理数据传输。这样做的原因是,这个类支持所有编程模型,如线程和选择。
在示例中可以找到用法示例,其中显示了两个TCP / IP - 串行转换器,一个使用线程(单端口服务器),另一个使用select(多端口服务器)。
注意
每个新的客户端连接都必须创建一个新实例作为此对象(和 RFC 2217协议)具有内部状态。
__init__
(serial_port,connection,debug_output = False )
参数: |
|
---|
初始化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_lines
(force_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_url
(url,* args,** kwargs )
参数: |
|
---|---|
返回: | 一个 |
获得本地人或 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_lost
(exc )
参数: | exc - 如果连接因错误而终止,则异常None |
---|
串行端口关闭或读取器循环终止时调用。
classserial.threaded.
Packetizer
(Protocol )
从串口读取二进制数据包。数据包应以TERMINATOR
字节终止(默认为空字节)。
该班还跟踪运输。
TERMINATOR = b'\0'
__init__
()
connection_made
(运输)
商店运输。
connection_lost
(exc )
忘记运输。
data_received
(数据)
参数: | data(字节) - 部分接收数据 |
---|
缓冲区接收数据并TERMINATOR
在找到时搜索handle_packet()
。
handle_packet
(包)
参数: | packet(bytes) - 由...定义的数据包TERMINATOR |
---|
处理数据包 - 由子类化覆盖。
classserial.threaded.
LineReader
(Packetizer )
从/到串口读写(Unicode)线。应用编码。
TERMINATOR = b'\r\n'
行结束。
ENCODING = 'utf-8'
编码发送和接收的数据。
UNICODE_HANDLING = 'replace'
Unicode错误手动策略。
handle_packet
(包)
参数: | packet(bytes) - 由...定义的数据包TERMINATOR |
---|
在这种情况下,它将是一行,handle_line()
在应用之后调用ENCODING
。
handle_line
(行)
参数: | line(str) - 包含一行的Unicode字符串(不包括行终止符) |
---|
处理一行 - 由子类重写。
write_line
(文字)
参数: | text(str) - 包含一行的Unicode字符串(不包括行终止符) |
---|
将文本写入传输。text应该是一个Unicode字符串,并且在发送之前应用编码,并且还TERMINATOR
附加(新行)。
classserial.threaded.
ReaderThread
(threading.Thread )
实现一个串口读取循环并分派到一个Protocol实例(比如asyncio.Protocol
),但是用线程来做。
调用close()
将关闭串口,但也可能只是stop()
这个线程,否则继续使用串口实例。
__init__
(serial_instance,protocol_factory )
参数: |
|
---|
初始化线程。
请注意,serial_instance
超时设置为一秒!其他设置不会更改。
stop
()
停止读者线程。
run
()
由线程驱动的实际读者循环。它调用 Protocol.connection_made()
,从串口调用读取Protocol.data_received()
,最后在调用Protocol.connection_lost()
时close()
调用或发生错误。
write
(数据)
参数: | data(bytes) - 要写入的数据 |
---|
线程安全写入(使用锁定)。
close
()
关闭串口并退出读卡器线程,调用stop()
(使用锁定)。
connect
()
等到设置连接并返回传输和协议实例。
这个类可以用作上下文管理器,在这种情况下它启动线程并自动连接。离开上下文时,串口将关闭。
__enter__
()
返回: | 协议 |
---|
连接并返回协议实例。
__exit__
(exc_type,exc_val,exc_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
是用Python 3.4引入的。pySerial的实验支持是通过单独的pyserial-asyncio分发提供的。
目前正在开发中,请参阅: