Flutter串口通信插件cr_flutter_libserialport的使用
Flutter串口通信插件cr_flutter_libserialport的使用
flutter_libserialport
是 libserialport
Dart 包的一个简单包装器,利用了 Flutter 的构建系统来在底层构建和部署 libserialport
C 库。此包不提供任何额外的 API,但帮助使 libserialport
Dart 包在没有手动构建和部署 libserialport
C 库的情况下能够正常工作。
支持的平台:
- Linux
- macOS
- Windows
- Android
使用方法
要使用此包,只需将 flutter_libserialport
添加到你的 pubspec.yaml
文件作为依赖项。
dependencies:
flutter:
sdk: flutter
flutter_libserialport: ^1.0.0 # 请根据实际版本号进行修改
然后运行 flutter packages get
来获取依赖。
以下是一个完整的示例代码,展示了如何使用 flutter_libserialport
插件来列出可用的串口设备。
import 'package:crlibserialport/crlibserialport.dart';
import 'package:flutter/material.dart';
void main() => runApp(ExampleApp());
class ExampleApp extends StatefulWidget {
[@override](/user/override)
_ExampleAppState createState() => _ExampleAppState();
}
extension IntToString on int {
String toHex() => '0x${toRadixString(16)}';
String toPadded([int width = 3]) => toString().padLeft(width, '0');
String toTransport() {
switch (this) {
case SerialPortTransport.usb:
return 'USB';
case SerialPortTransport.bluetooth:
return 'Bluetooth';
case SerialPortTransport.native:
return 'Native';
default:
return 'Unknown';
}
}
}
class _ExampleAppState extends State<ExampleApp> {
var availablePorts = [];
[@override](/user/override)
void initState() {
super.initState();
initPorts();
}
void initPorts() {
setState(() => availablePorts = SerialPort.availablePorts);
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Flutter 串口通信示例'),
),
body: Scrollbar(
child: ListView(
children: [
for (final address in availablePorts)
Builder(builder: (context) {
final port = SerialPort(address);
return ExpansionTile(
title: Text(address),
children: [
CardListTile('描述', port.description),
CardListTile('传输方式', port.transport.toTransport()),
CardListTile('USB 总线', port.busNumber?.toPadded()),
CardListTile('USB 设备', port.deviceNumber?.toPadded()),
CardListTile('供应商ID', port.vendorId?.toHex()),
CardListTile('产品ID', port.productId?.toHex()),
CardListTile('制造商', port.manufacturer),
CardListTile('产品名称', port.productName),
CardListTile('序列号', port.serialNumber),
CardListTile('MAC 地址', port.macAddress),
],
);
}),
],
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.refresh),
onPressed: initPorts,
),
),
);
}
}
class CardListTile extends StatelessWidget {
final String name;
final String? value;
CardListTile(this.name, this.value);
[@override](/user/override)
Widget build(BuildContext context) {
return Card(
child: ListTile(
title: Text(value ?? 'N/A'),
subtitle: Text(name),
),
);
}
}
更多关于Flutter串口通信插件cr_flutter_libserialport的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter串口通信插件cr_flutter_libserialport的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
cr_flutter_libserialport
是一个用于在 Flutter 应用中进行串口通信的插件。它基于 libserialport
库,支持在 Android、iOS、Windows、Linux 和 macOS 平台上进行串口通信。
以下是 cr_flutter_libserialport
的基本使用方法:
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 cr_flutter_libserialport
依赖:
dependencies:
flutter:
sdk: flutter
cr_flutter_libserialport: ^1.0.0
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在你的 Dart 文件中导入 cr_flutter_libserialport
插件:
import 'package:cr_flutter_libserialport/cr_flutter_libserialport.dart';
3. 获取可用串口列表
你可以使用 SerialPort.availablePorts
获取当前设备上可用的串口列表:
List<String> ports = SerialPort.availablePorts;
print('Available ports: $ports');
4. 打开串口
使用 SerialPort
类打开一个串口。你需要指定串口的名称、波特率、数据位、停止位和校验位等参数:
SerialPort port = SerialPort('COM1', BaudRate.b9600, DataBits.dataBits8, StopBits.stopBits1, Parity.none);
if (port.open()) {
print('Port opened successfully');
} else {
print('Failed to open port');
}
5. 读取和写入数据
你可以使用 port.read()
和 port.write()
方法来进行数据的读取和写入:
// 写入数据
List<int> dataToSend = [0x01, 0x02, 0x03];
port.write(dataToSend);
// 读取数据
List<int> receivedData = port.read(10); // 读取最多 10 个字节
print('Received data: $receivedData');
6. 关闭串口
使用完毕后,记得关闭串口以释放资源:
port.close();
print('Port closed');
7. 监听串口数据
你可以使用 port.onDataReceived
来监听串口接收到的数据:
port.onDataReceived.listen((data) {
print('Data received: $data');
});
8. 错误处理
在使用过程中,可能会遇到各种错误。你可以使用 port.onError
来监听错误事件:
port.onError.listen((error) {
print('Error occurred: $error');
});
9. 完整示例
以下是一个完整的示例,展示了如何打开串口、发送数据、接收数据并关闭串口:
import 'package:cr_flutter_libserialport/cr_flutter_libserialport.dart';
void main() async {
// 获取可用串口列表
List<String> ports = SerialPort.availablePorts;
print('Available ports: $ports');
if (ports.isNotEmpty) {
// 打开第一个可用串口
SerialPort port = SerialPort(ports.first, BaudRate.b9600, DataBits.dataBits8, StopBits.stopBits1, Parity.none);
if (port.open()) {
print('Port opened successfully');
// 监听接收到的数据
port.onDataReceived.listen((data) {
print('Data received: $data');
});
// 发送数据
List<int> dataToSend = [0x01, 0x02, 0x03];
port.write(dataToSend);
// 等待一段时间以接收数据
await Future.delayed(Duration(seconds: 2));
// 关闭串口
port.close();
print('Port closed');
} else {
print('Failed to open port');
}
} else {
print('No available ports');
}
}