python之pyserial模块
pyserial 模块封装了对串口的访问,兼容各种平台(Windows、Linux、MACOS等)。
其支持的特性如下:
- 所有平台基于类的接口相同
- 端口可以通过python来设置
- 支持不同数据长度、停止位、奇偶校验位、流量控制、RTS/CTS 和 Xon/Xoff 特性
- 可以设置是否超时
- 读取/写数据很简单,调用read或write方法(同样支持readline、readlines等方法)
- 端口设置为二进制传输,没有空字节、CR-LF等处理,这使得这个模块比较好用
- 兼容io模块
1 模块安装
需要python2.7或python3.4以上的版本
pip install pyserial
2 模块使用
2.1 模块的初始化
import serial
import serial.tools.list_ports
# 打印所有com列表
li = serial.tools.list_ports.comports()
for ser in li:
print(ser.name)
# 打开com13,波特率115200
# 以下是windows平台,linux平台是不同的port名,如/dev/ttyS0等
ser = serial.Serial(port="COM13",
baudrate=115200,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
timeout=0.5)
# 判断是否打开成功
if ser.isOpen():
print (f'{ser.port} is Opened')
else:
print (f'{ser.port} is Closed')
# 不用串口时可以关闭
# ser.close()
2.2 模块的读写
读取/写数据很简单,调用read或write方法(同样支持readline、readlines、writelines等方法),由于端口设置为二进制数据流传输,所以需要通过encode与decode方法将数据流加工为人们易于阅读的utf-8格式。
import serial
# 读串口
# read() - 默认一次读取一个字节,可以通过传入参数指定每次读取的字节数,返回值为bytes类型
# readall() - 读取串口接收的全部数据,返回值为bytes类型
# readlines() - 读取多行数据,返回值为list类型,列表元素类型为bytes类型
ser = serial.Serial("COM13", 115200, timeout=0.5)
for line in ser.readlines():
print(line.decode('utf-8'))
# 写一个字符串“hello”
write_len = ser.write("hello".encode('utf-8'))
ser.flush() # 等待所有数据写出
ser.close()
2.3 其它方法
方法 | 说明 |
---|---|
ser.isOpen() | 查看端口是否被打开 |
ser.open() | 打开端口 |
ser.close() | 关闭端口 |
ser.read() | 从端口读字节数据,默认1个字节 |
ser.readall() | 从端口接收全部数据 |
ser.write("hello".encode('utf-8')) | 向端口写数据 |
ser.readline() | 读一行数据 |
ser.readlines() | 读多行数据,列表元素类型为bytes类型 |
in_waiting() | 返回接收缓存中的字节数 |
flush() | 等待所有数据写出 |
flushInput() | 丢弃接收缓存中的所有数据 |
flushOutput() | 终止当前写操作,并丢弃发送缓存中的数据 |
参考: