flutter_libserialport如何实现串口通信
我在Flutter项目中使用flutter_libserialport库进行串口通信时遇到了一些问题。具体场景是需要通过串口与硬件设备进行数据交互,但不知道如何正确配置和实现。能否提供详细的示例代码说明如何初始化串口、设置参数(如波特率、数据位等)、发送和接收数据?另外,在Android和iOS平台上是否需要额外的权限配置或特殊处理?遇到数据丢失或通信不稳定时该如何排查?
2 回复
Flutter 中使用 flutter_libserialport 实现串口通信的步骤:
-
添加依赖:在
pubspec.yaml中添加flutter_libserialport: ^最新版本。 -
获取可用串口:
List<String> ports = SerialPort.availablePorts; -
打开串口:
final serialPort = SerialPort('COM3'); // Windows // 或 '/dev/ttyUSB0' // Linux serialPort.open(); -
配置参数(可选):
final config = SerialPortConfig() ..baudRate = 9600 ..bits = 8 ..stopBits = 1 ..parity = SerialPortParity.none; serialPort.config = config; -
读写数据:
- 发送数据:
serialPort.write(Uint8List.fromList([0x48, 0x65])); // 发送字节 - 读取数据(建议用
Stream监听):serialPort.readStream.listen((data) { print('收到数据: $data'); });
- 发送数据:
-
关闭串口:
serialPort.close();
注意:
- 需在
AndroidManifest.xml(Android)和Info.plist(iOS)中声明权限。 - 实际波特率等参数需与设备匹配。
- 读写操作需处理异常(如
SerialPortError)。
示例代码约 20 行即可实现基础收发功能。
更多关于flutter_libserialport如何实现串口通信的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
Flutter 中使用 flutter_libserialport 实现串口通信的步骤如下:
-
添加依赖 在
pubspec.yaml中添加:dependencies: flutter_libserialport: ^0.2.0 -
配置权限
- Android:在
android/app/src/main/AndroidManifest.xml中添加:<uses-permission android:name="android.permission.INTERNET"/> - Linux:确保用户有串口设备访问权限。
- Android:在
-
核心代码实现
import 'package:flutter_libserialport/flutter_libserialport.dart'; class SerialPortHelper { SerialPort? _port; SerialPortReader? _reader; // 获取可用串口列表 List<String> getAvailablePorts() { return SerialPort.availablePorts; } // 打开串口 bool openPort(String portName, {int baudRate = 9600}) { try { _port = SerialPort(portName); final config = SerialPortConfig(); config.baudRate = baudRate; config.bits = 8; config.stopBits = 1; config.parity = SerialPortParity.none; _port!.config = config; _reader = SerialPortReader(_port!); return true; } catch (e) { print("Error: $e"); return false; } } // 监听接收数据 void listen(Function(String) onDataReceived) { _reader?.stream.listen((data) { onDataReceived(String.fromCharCodes(data)); }); } // 发送数据 void write(String data) { _port?.write(data.codeUnits); } // 关闭串口 void close() { _reader?.close(); _port?.close(); } } -
使用示例
final helper = SerialPortHelper(); // 打开串口 if (helper.openPort('/dev/ttyUSB0', baudRate: 115200)) { // 监听数据 helper.listen((data) { print('Received: $data'); }); // 发送数据 helper.write('Hello Serial Port'); }
注意事项:
- 实际设备路径需根据系统调整(如 Windows 为
COM1,Linux 为/dev/ttyUSB0) - 需处理异常和资源释放
- 高频率数据通信建议使用缓冲机制
建议参考官方文档获取最新 API 和平台特定配置。

