在Flutter中实现串口通信可以通过第三方插件实现,以下是主要方法:
推荐插件:flutter_libserialport
这是目前最活跃的Flutter串口通信库,支持Android、Linux、Windows平台。
基本使用步骤:
- 添加依赖
dependencies:
flutter_libserialport: ^0.2.0
- 权限配置
- Android:在
android/app/src/main/AndroidManifest.xml 添加:
<uses-permission android:name="android.permission.INTERNET"/>
- 核心代码示例
import 'package:flutter_libserialport/flutter_libserialport.dart';
class SerialPortHelper {
SerialPort? _serialPort;
SerialPortReader? _reader;
// 获取可用串口列表
List<String> getAvailablePorts() {
return SerialPort.availablePorts;
}
// 打开串口
bool openPort(String portName, {int baudRate = 9600}) {
try {
_serialPort = SerialPort(portName);
final config = SerialPortConfig();
config.baudRate = baudRate;
config.bits = 8;
config.stopBits = 1;
config.parity = SerialPortParity.none;
_serialPort!.config = config;
if (_serialPort!.openReadWrite()) {
_reader = SerialPortReader(_serialPort!);
return true;
}
return false;
} catch (e) {
print('打开串口失败: $e');
return false;
}
}
// 读取数据
void startReading(Function(String) onDataReceived) {
_reader?.stream.listen((data) {
final received = String.fromCharCodes(data);
onDataReceived(received);
});
}
// 发送数据
void sendData(String data) {
if (_serialPort?.isOpen ?? false) {
_serialPort!.write(data.codeUnits);
}
}
// 关闭串口
void closePort() {
_reader?.close();
_serialPort?.close();
}
}
使用示例:
final serialHelper = SerialPortHelper();
// 打开串口
if (serialHelper.openPort('/dev/ttyUSB0', baudRate: 115200)) {
// 开始读取
serialHelper.startReading((data) {
print('收到数据: $data');
});
// 发送数据
serialHelper.sendData('Hello Serial');
}
注意事项:
- iOS不支持串口通信
- 不同平台的串口名称格式不同
- 需要处理异常和资源释放
- 建议在页面销毁时调用
closePort()
其他备选插件:
serial_port_flutter
flutter_serial_ports
建议优先使用 flutter_libserialport,因为它维护更活跃,文档更完善。