Python串口读取字符串无法解码及FORWARD指令匹配问题求助
问题解决方案
核心问题
你使用的serial.readString()方法在新版pyserial中已被弃用,行为不稳定,这是导致无法正确解码、保留b'前缀和换行回车的主要原因。
修改后的代码
#!/usr/bin/env python import serial ser = serial.Serial(port='/dev/ttyAMA0', baudrate=9600, timeout=1) while True: # 读取一行串口数据(返回bytes类型) raw_data = ser.readline() if not raw_data: continue # 跳过空数据,避免无效处理 # 解码为字符串,显式指定编码(默认utf-8,可根据实际调整) x = raw_data.decode('utf-8') # 去除首尾空白字符(包含\r、\n、空格等) x = x.strip() print(x) # 简化匹配逻辑,更直观 if 'FORWARD' in x: print("FORWARD")
关键修改说明
- 替换
readString()为readline():这是pyserial官方推荐的行读取方法,行为稳定,明确返回bytes类型,便于后续解码操作。 - 增加空数据判断:避免对空字节解码后得到空字符串,干扰后续指令匹配。
- 显式指定解码编码:防止因系统默认编码不一致导致的解码异常,串口数据通常使用
utf-8或ascii编码。 - 简化匹配逻辑:用
'FORWARD' in x替代find()方法,代码更简洁且效果一致。
额外排查点
- 确认串口参数(波特率、奇偶校验、停止位等)与发送端完全一致,参数不匹配会导致读取乱码。
- 检查发送工具的输出格式:确保发送的是纯文本
FORWARD,即使工具自动添加换行符,strip()也会自动处理。
内容的提问来源于stack exchange,提问作者Neil Carey
相关产品推荐
相关产品推荐

