Flutter使用flutter_libserialport读取串口时出现字节解析异常
问题解决:flutter_libserialport 直接打开串口无法解析字节的问题
核心原因是你仅配置了波特率,串口的其他关键参数(数据位、停止位、奇偶校验)未明确设置。Arduino IDE/Java应用打开串口时会自动将这些参数配置为设备默认值(通常为8数据位、1停止位、无校验),关闭后参数会保留,因此Flutter后续打开时能正常工作。
解决方案:
- 显式配置完整串口参数,确保与Arduino/ESP32的串口设置完全匹配
- 打开串口后清空接收缓冲区,避免残留乱码干扰解析
- 尝试兼容更广的编码解码(如
latin1),部分设备输出可能并非标准UTF-8
修改后的代码:
final port = SerialPort("COM3"); // 配置完整串口参数,匹配Arduino/ESP32默认设置 final config = SerialPortConfig() ..baudRate = 115200 ..dataBits = 8 ..stopBits = 1 ..parity = SerialPortParity.none; port.config = config; if (!port.openReadWrite()) { print(SerialPort.lastError); } else { // 清空收发缓冲区,清除残留数据 port.flush(SerialPortFlush.tx); port.flush(SerialPortFlush.rx); final reader = SerialPortReader(port); reader.stream.listen((data) { // 优先用UTF-8解码,失败则用latin1兜底 try { print('received: ' + utf8.decode(data)); } catch (e) { print('received (latin1): ' + latin1.decode(data)); } }); }
额外排查点:
- 确认Arduino/ESP32代码中的串口初始化参数与Flutter端完全一致
- 检查串口线质量,劣质线材可能导致数据传输异常
- 更换串口端口号,确认无其他进程占用目标端口
内容的提问来源于stack exchange,提问作者amirre
相关产品推荐
相关产品推荐

