用pyserial读取串口
安装pyserial
命令行提示符下运行
pip install pyserial
读取串口
import serial
import time
portx = "COM5" #端口号
bps = 115200 #波特率
ser = serial.Serial(portx, bps)
while True:
data1 = ser.readline().decode("utf-8") #读取一行并转换编码
if data1 != "":
print(data1)
time.sleep(0.02)
此时ser默认的数据位、校验位、停止位分别是
数据位:8位
校验位:无校验
停止位:1位
如果设置不同的数据位、校验位、停止位
ser = serial.Serial(
port='COM5', # 串口名称,Windows下可能是'COM3'或者类似的
baudrate=115200, # 波特率
bytesize=serial.EIGHTBITS, # 数据位
parity=serial.PARITY_NONE, # 校验位
stopbits=serial.STOPBITS_ONE, # 停止位
timeout=timex, # 超时设置
)
参数 | 功能 |
---|---|
port | 串口名称 |
baudrate | 波特率 |
bytesize | 数据位,取值范围serial.FIVEBITS, serial.SIXBITS, serial.SEVENBITS, serial.EIGHTBITS |
parity | 校验位 ,取值范围serial.PARITY_NONE, serial.PARITY_EVEN, ,serial.PARITY_ODD PARITY_MARKPARITY_SPACE |
stopbits | 停止位 ,取值范围serial.STOPBITS_ONE, serial.STOPBITS_ONE_POINT_FIVE, serial.STOPBITS_TWO |
timeout | 接收超时时间,float类型,以秒为单位。默认None |
.readline()
读取串口传入的一行数据
当timeout=None(默认)时,readline()会一直阻塞直到接收到’\n’的输入
当timeout设为一个具体时间时,当超过设定时间没有接收到’\n’的输入时,会返回一个空白字符串或抛出一个超时异常。
关闭串口
ser.close()
获取所有端口号
import serial.tools.list_ports
ports = serial.tools.list_ports.comports() # 获取所有可用的串口列表
# 遍历每个串口,并打印出相关信息
for port in ports:
print(f"Port: {port.device}") #串口号
print(f"Description: {port.description}") #端口描述
print(f"HWID: {port.hwid}") #硬件ID
print("-----------")