flutter使用usb转串口工具与esp32进行通信
flutter使用usb转串口工具与esp32进行通信

flutter使用usb转串口工具与esp32进行通信

以下是一个简单的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设备权限。