1.安装pyserial
pip install pyserial
2.查看端口
可通过list_ports查看当前的各个端口,代码如下:
from serial.tools import list_ports
com_ports = list_ports.comports() #列出当前所有串口,返回数据类型为列表
for com in com_ports:
print(com[0]) #com[0],串口号
#print(com.name) #同com[0],打印串口号
print(com[1]) #com[1],对应的端口名
3.实例化串口
import serial
ser = serial.Serial(port = 'COM1', #串口COM1,windows
#port = ‘/dev/ttyS0’, #Linux
baudrate = 9600, #波特率,默认9600
bytesize = 8, #数据位,默认8位
parity = 'N', #校验位,可选‘N’、‘E’、‘O’,默认‘N’,无校验
stopbits = 1, #停止位,可选1,1.5,2,默认为1位
timeout = 1 #超时,单位为秒,默认为NONE,一直等待
)
4.串口发送
方法write(),参数需要是字节bytes类型,如果是字符串类型需进行‘utf-8’编码。
该函数有一个返回值,返回值为发送的数据长度,int型。
1. ser.write(b'123456')
2. ser.write('123456'.encode('utf-8'))
5.串口接收
方法read(),参数为size,即接收字符长度,默认为1,如果没接收到指定长度会一直等待,如果设置了超时,会等待到超时时间。
read()接数的数据为字节bytes类型,要字符串类型需要进行‘utf-8’解码。
recv_str = ser.read(6).decode('utf-8') #接收6个字节,‘utf-8’解码,转换为字符串
recv_hex = ser.read(6).hex() #转换为hex类型
print(recv_str)
readline(),读取一行,以\n结束,如果没有\n会一直读,阻塞,需要设定timeout,否则接收不到新行会一直等待。
6.其它常用方法
close(), 关闭串口
open(), 打开串口
isOpen(), 查看串口是否打开
inWaiting(), 返回接收缓存中的字节数
flush(), 等待所有数据写出
flushInput(), 丢弃接收缓存中的所有数据
flushOutput(), 终止当前写操作,丢弃发送缓存中的所有数据
7.简单的串口程序
import serial
#实例化串口
ser = serial.Serial('COM13')
#串口发送数据
len = ser.write('123456'.encode('utf-8'))
#串口接收数据
recv = ser.read(len).decode('utf-8')
print(recv)
#关闭串口
ser.close()