flutter_libserialport如何实现串口监听

我在使用flutter_libserialport库进行串口通信开发时遇到一个问题:如何实现串口数据的实时监听?我已经成功打开了串口并配置了波特率等参数,但不知道如何持续接收串口设备发送的数据。是否需要使用事件监听或轮询机制?能否提供具体的代码示例说明如何正确设置监听回调函数?

2 回复

使用flutter_libserialport监听串口:

  1. 获取可用串口列表:
List<String> ports = SerialPort.availablePorts;
  1. 创建串口实例并配置:
final serialPort = SerialPort(portName);
serialPort.config = SerialPortConfig()
  ..baudRate = 9600
  ..bits = 8;
  1. 打开串口并监听数据:
serialPort.openReadWrite();
serialPort.inputStream.listen((data) {
  print('收到数据: ${String.fromCharCodes(data)}');
});
  1. 处理错误和关闭:
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

回到顶部