Flutter串口通信插件flserial的使用
Flutter串口通信插件flserial的使用
flserial
是一个基于FFI(Foreign Function Interface)的Flutter插件,用于与RS232设备进行串口通信。该插件基于优秀的C语言库 wjwwood/serial
实现,支持多个平台,包括Linux、Windows、Android和MacOS。
使用示例
下面是一个完整的示例,展示了如何在Flutter应用中使用 flserial
插件进行串口通信。
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 flserial
插件的依赖:
dependencies:
flutter:
sdk: flutter
flserial: ^0.1.0 # 请根据实际版本号进行修改
然后运行 flutter pub get
来安装依赖。
2. 示例代码
以下是完整的示例代码,展示如何初始化串口、打开端口、发送数据并接收数据。
import 'package:flutter/material.dart';
import 'package:flserial/flserial.dart';
import 'package:flserial/flserial_exception.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _errorMsg = 'Unknown';
final FlSerial _flserialPlugin = FlSerial();
@override
void initState() {
super.initState();
}
Future<void> _testSerialPort() async {
try {
// 列出所有可用的串口
if (FlSerial.listPorts().isEmpty) {
throw FlSerialException(3, msg: "Port not found");
}
// 初始化串口
_flserialPlugin.init();
// 打开第一个可用的串口,波特率为115200
_flserialPlugin.openPort(FlSerial.listPorts()[0].split(" - ")[0], 115200);
// 监听串口数据
_flserialPlugin.onSerialData.stream.listen((args) {
if (args.len > 0) {
setState(() {
_errorMsg = args.serial.readList().toString();
});
}
});
// 设置串口参数
_flserialPlugin.setByteSize8();
_flserialPlugin.setBitParityNone();
_flserialPlugin.setStopBits1();
_flserialPlugin.setFlowControlNone();
// 发送数据
String msg = "Hello World!";
var list = msg.codeUnits;
_flserialPlugin.write(Uint8List.fromList(list));
setState(() {
_errorMsg = "Test OK";
});
} on FlSerialException catch (e) {
setState(() {
_errorMsg = e.msg;
});
} on Exception catch (ex) {
setState(() {
_errorMsg = ex.toString();
});
} finally {
if (_flserialPlugin.isOpen() == FlOpenStatus.open) {
_flserialPlugin.closePort();
}
_flserialPlugin.free();
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Column(
children: [
ElevatedButton(
onPressed: _testSerialPort,
child: const Text("Serial port test"),
),
Center(
child: Text('Message: $_errorMsg\n'),
),
],
),
),
);
}
}
3. 代码说明
- 初始化串口:通过
_flserialPlugin.init()
初始化串口。 - 打开端口:通过
_flserialPlugin.openPort(portName, baudRate)
打开指定的串口端口,并设置波特率。 - 监听数据:通过
_flserialPlugin.onSerialData.stream.listen()
监听串口接收到的数据。 - 设置串口参数:可以设置字节大小、校验位、停止位和流控制等参数。
- 发送数据:通过
_flserialPlugin.write(data)
发送数据到串口。 - 关闭端口:在完成操作后,通过
_flserialPlugin.closePort()
关闭串口,并通过_flserialPlugin.free()
释放资源。
4. 注意事项
- 确保你的设备已连接到正确的串口,并且串口驱动程序已正确安装。
- 在不同的平台上,串口名称可能不同(例如,Windows上可能是
COM3
,而Linux上可能是/dev/ttyUSB0
)。 - 处理异常时,请确保捕获
FlSerialException
和其他可能的异常,以确保应用程序的稳定性。
通过上述步骤,你可以在Flutter应用中轻松实现串口通信功能。希望这个示例对你有所帮助!
更多关于Flutter串口通信插件flserial的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复