以下是一个简单的Flutter示例程序,用于连接USB串口设备与ESP32进行通信。程序使用usb_serial
库来连接USB串口设备并使用串口通信。
import 'package:flutter/material.dart';
import 'package:usb_serial/usb_serial.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
UsbSerialPort? _port;
String _data = '';
@override
void initState() {
super.initState();
_initUsb();
}
void _initUsb() async {
List<UsbDevice> devices = await UsbSerial.listDevices();
if (devices.isNotEmpty) {
UsbDevice device = devices[0];
List<UsbSerialPort> ports = await UsbSerial.open(device);
if (ports.isNotEmpty) {
_port = ports[0];
_port!.inputStream.listen((Uint8List data) {
setState(() {
_data = String.fromCharCodes(data);
});
});
}
}
}
void _sendData(String data) {
if (_port != null) {
_port!.write(Uint8List.fromList(data.codeUnits));
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('USB串口通信示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'接收到的数据: $_data',
),
ElevatedButton(
onPressed: () {
_sendData('Hello from Flutter');
},
child: Text('发送数据给ESP32'),
),
],
),
),
);
}
}
在该示例程序中,我们首先获取已连接的USB设备列表,然后打开第一个设备并获取串口通信端口。接着,我们监听串口的输入流,并在接收到数据时更新界面显示。最后,我们提供一个按钮来向ESP32发送数据。
要运行此示例程序,请确保已在pubspec.yaml
文件中添加了usb_serial
库的依赖,并在项目中配置了USB设备权限。