PySerial模块的使用
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
PySerial模块的使用相关推荐
- rosserial_java_ros系统下通过pyserial模块实现串口通讯(Python)
经过几天的摸索终于实现了: 在ros系统下,订阅Twist/cmd_vel 消息,经过USB转串口通信,实现了通过灯带实时反映小车(差速)运行状态的功能. 通信部分主要依赖pyserial模块的功能实 ...
- python中serial模块的使用_python中pyserial模块使用方法
一.概述 pyserial模块封装了对串口的访问. 二.特性 在支持的平台上有统一的接口. 通过python属性访问串口设置. 支持不同的字节大小.停止位.校验位和流控设置. 可以有或者没有接收超时. ...
- python 用pyserial模块通过串口发送数据的注意点
最近开始在工作中开始边学边用python,其中需要用python实现串口读写,在编程调试过程中发现通过pyserial模块的write方法发送字符串时,数据并没有被发送去到串口设备中,而是停留在了输出 ...
- python安装pyserial模块_Python使用模块Pyserial模块报
用pip安装pyserial后:sudo -H pip install pyserial,运行新建的程序,名称为serial.py,程序中用到:import serial.toos.list_por ...
- Py之pyserial:Python的pyserial库的简介、安装、使用方法之详细攻略
Py之pyserial:Python的pyserial库的简介.安装.使用方法之详细攻略 目录 pyserial库的简介 pyserial库的安装 pyserial库的使用方法 pyserial库的简 ...
- python做物联网控制_python实现NB-IoT模块远程控制
本来想尝试下如果不使用运营商网络应用平台情况下,只是在服务商服务器上是否可以实现对终端完全控制,如果这样可行,那么物联网应用服务端更有灵活性.实际情况下,很难实现和运营商网络对等的处理,用python ...
- ubuntu使用python读串口_21.python通过pyserial读写串口--2013-06-02
因为有个需要用有源RFID搞资产管理的项目,需要用python读取读卡器的串口内容.于是装了pyserial模块,用了下很方便,整理下常用功能 2,十六进制显示 十六进制显示的实质是把接收到的字符诸葛 ...
- Pyserial 实例教程详细用法
一.概述 pyserial模块封装了对串口的访问. 二.特性 在支持的平台上有统一的接口. 通过python属性访问串口设置. 支持不同的字节大小.停止位.校验位和流控设置. 可以有或者没有接收超时. ...
- Python PyQt5 PySerial 书签备份 2018/12/6
Bookmarks 书签栏 PyQt5 事件和信号 · PyQt5 中文教程 艾伦智能/pyqt5 pyserial-github pySerial API - pySerial 3.0 docume ...
最新文章
- ORACLE 字符串超长问题解决方案
- ios一个app调起另一个app_电商app开发价格:制作一个电商app需要多少钱?
- Linux(Ubuntu)设置环境变量(转载)
- vs2015使用GIt连接git.oschina.net/
- python基础教程:类和对象
- Python练习题:批量删除多个文件夹内的相同文件
- inteliji 优化
- Redis和Memcached整体
- 使用React和Spring Boot构建一个简单的CRUD应用
- 好好学习努力工作,要工作也要生活—2016总结,2017规划
- C语言——扫雷游戏详解
- windows上查看MD5
- Mbed TLS 编码规范
- Wireshark网络流量分析工具
- Dependency Walker使用说明
- 【算法编程】乘方取模
- 使用ST-LINK下载遇到的连接错误
- UEFI开发与调试---edk2中的Module
- TCP的分片和IP分片的区别
- 深圳ERP软件开发 轻松完成复杂数据管理