在Flutter中使用串口通信,推荐使用 flutter_libserialport 插件。以下是基本使用方法:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
flutter_libserialport: ^0.3.0
2. 获取权限
- Android:在
AndroidManifest.xml 中添加:
<uses-permission android:name="android.permission.INTERNET"/>
3. 基本使用代码
import 'package:flutter_libserialport/flutter_libserialport.dart';
class SerialHelper {
SerialPort? _port;
// 获取可用串口列表
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;
return _port!.openReadWrite();
} catch (e) {
print('打开串口失败: $e');
return false;
}
}
// 发送数据
void sendData(List<int> data) {
if (_port != null && _port!.isOpen) {
_port!.write(data);
}
}
// 读取数据
List<int> readData() {
if (_port != null && _port!.isOpen) {
final available = _port!.bytesAvailable;
if (available > 0) {
return _port!.read(available);
}
}
return [];
}
// 关闭串口
void closePort() {
_port?.close();
_port = null;
}
}
4. 使用示例
// 初始化
final serial = SerialHelper();
// 获取可用串口
final ports = serial.getAvailablePorts();
print('可用串口: $ports');
// 打开第一个串口
if (ports.isNotEmpty) {
serial.openPort(ports.first, baudRate: 115200);
// 发送数据
serial.sendData([0x48, 0x65, 0x6C, 0x6C, 0x6F]); // Hello
// 读取数据
final data = serial.readData();
print('收到数据: $data');
// 关闭串口
serial.closePort();
}
注意事项:
- 在Android上需要USB OTG支持
- 不同平台的串口命名规则不同(Windows: COM1, Linux: /dev/ttyUSB0)
- 建议在页面销毁时关闭串口
- 实际使用时建议添加异常处理和数据解析逻辑
这个插件支持Windows、Linux、Android和macOS平台,基本能满足大部分串口通信需求。