如何使用Arduino与pyserial解码串口信息并提取数字?
提取串口信息中数字的解决方法
1. 先排查串口参数匹配问题
你遇到的UnicodeDecodeError提示字节0xb1无法解码,说明实际读到的不是预期的b'1\r\n',大概率是串口参数不匹配或缓存残留导致的乱码。首先确保Python初始化串口的参数和Arduino完全一致:
import serial # 替换成你的串口端口(比如Windows的COM3,Linux的/dev/ttyUSB0) ser = serial.Serial('COM3', baudrate=9600, timeout=1)
2. 安全读取并转换数字
用兼容编码解码,再清洗数据提取数字,避免解码错误:
while True: raw_data = ser.readline() if raw_data: # 用latin-1解码所有字节(不会抛出Unicode错误),再去除换行、回车等空白 cleaned_str = raw_data.decode('latin-1').strip() # 只保留字符串中的数字字符 num_part = ''.join([c for c in cleaned_str if c.isdigit()]) if num_part: # 确保有有效数字才转换 number = int(num_part) print(f"提取到数字:{number}")
3. 额外排查项
- 关闭Arduino IDE的串口监视器,避免串口被占用
- 重启Arduino和Python程序,清空串口缓存的残留数据
- 确认串口端口号正确(Windows看设备管理器,Linux/macOS用
ls /dev/tty*查看)
内容的提问来源于stack exchange,提问作者André Rodriguez
相关产品推荐
相关产品推荐

