flutter_libserialport如何实现串口监听
我在使用flutter_libserialport库进行串口通信开发时遇到一个问题:如何实现串口数据的实时监听?我已经成功打开了串口并配置了波特率等参数,但不知道如何持续接收串口设备发送的数据。是否需要使用事件监听或轮询机制?能否提供具体的代码示例说明如何正确设置监听回调函数?
2 回复
使用flutter_libserialport监听串口:
- 获取可用串口列表:
List<String> ports = SerialPort.availablePorts;
- 创建串口实例并配置:
final serialPort = SerialPort(portName);
serialPort.config = SerialPortConfig()
..baudRate = 9600
..bits = 8;
- 打开串口并监听数据:
serialPort.openReadWrite();
serialPort.inputStream.listen((data) {
print('收到数据: ${String.fromCharCodes(data)}');
});
- 处理错误和关闭:
serialPort.inputStream.handleError((error) {
print('串口错误: $error');
});
记得在pubspec.yaml中添加依赖,Android需配置权限。
更多关于flutter_libserialport如何实现串口监听的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用flutter_libserialport监听串口数据,可以通过以下步骤实现:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
flutter_libserialport: ^0.3.0
2. 获取可用串口
import 'package:flutter_libserialport/flutter_libserialport.dart';
List<String> availablePorts = SerialPort.availablePorts;
3. 配置并打开串口
final serialPort = SerialPort('COM3'); // Windows示例,Linux用'/dev/ttyUSB0'
// 配置参数
final config = SerialPortConfig()
..baudRate = 9600
..bits = 8
..stopBits = 1
..parity = SerialPortParity.none;
serialPort.config = config;
if (!serialPort.openReadWrite()) {
throw Exception('无法打开串口');
}
4. 监听数据流
使用Stream持续读取数据:
Stream<List<int>>? stream = serialPort.readStream; // 获取数据流
stream?.listen((data) {
String received = String.fromCharCodes(data);
print('收到数据: $received');
// 处理数据逻辑
// 例如更新UI状态
setState(() {
receivedData = received;
});
});
5. 错误处理
stream?.handleError((error) {
if (error is SerialPortError) {
print('串口错误: ${error.message}');
}
serialPort.close(); // 发生错误时关闭串口
});
6. 资源释放
在dispose中关闭串口:
@override
void dispose() {
serialPort.close();
super.dispose();
}
注意事项:
- 权限问题:在Android/iOS需要相应串口访问权限
- 数据格式:根据设备协议处理数据编码(如ASCII、HEX)
- 缓冲区:可使用
serialPort.readBytesAvailable检查待读数据量 - 多线程:避免在监听回调中执行耗时操作
完整示例建议参考官方文档:https://pub.dev/packages/flutter_libserialport

