Flutter如何实现串口通信与硬件设备交互

如何在Flutter应用中实现串口通信功能?需要与外部硬件设备进行数据交互,目前尝试过flutter_libserialport插件但遇到连接不稳定的问题。求推荐可靠的串口通信解决方案,最好能提供具体实现步骤或示例代码,包括权限配置、波特率设置和数据收发处理等关键环节。另外,在Android和iOS平台上是否有不同的兼容性注意事项?

2 回复

Flutter可通过flutter_libserialport插件实现串口通信。步骤如下:

  1. 导入插件,配置串口参数(波特率、数据位等)。
  2. 打开串口,监听数据流。
  3. 使用write()发送指令,通过Stream接收硬件返回数据。
  4. 处理数据并关闭串口。注意Android/iOS需权限和兼容性处理。

更多关于Flutter如何实现串口通信与硬件设备交互的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现串口通信与硬件设备交互,通常需要通过平台通道(Platform Channels)调用原生代码(Android/iOS)的串口库。以下是实现步骤和示例代码:

1. 添加依赖

pubspec.yaml 中添加串口插件(如 flutter_libserialport):

dependencies:
  flutter_libserialport: ^0.2.0

2. 配置原生权限

  • Android:在 AndroidManifest.xml 中添加 USB 权限:
    <uses-permission android:name="android.permission.USB_PERMISSION" />
    
  • iOS:在 Info.plist 中声明串口使用权限(仅支持 MFI 认证设备)。

3. Flutter 代码实现

import 'package:flutter_libserialport/flutter_libserialport.dart';

class SerialHelper {
  // 获取可用串口列表
  List<String> getAvailablePorts() {
    return SerialPort.availablePorts;
  }

  // 打开串口并通信
  void connectAndSend(String portName, String data) {
    final serialPort = SerialPort(portName);
    
    try {
      // 配置串口参数
      serialPort
        ..config = SerialPortConfig()
        ..baudRate = 9600
        ..bits = 8
        ..stopBits = 1
        ..parity = SerialPortParity.none;

      // 打开串口
      if (serialPort.openReadWrite()) {
        // 发送数据
        serialPort.write(Uint8List.fromList(data.codeUnits));
        
        // 读取数据(示例)
        final reader = SerialPortReader(serialPort);
        reader.stream.listen((data) {
          print('Received: ${String.fromCharCodes(data)}');
        });
      }
    } on SerialPortError catch (_, err) {
      print('Serial Error: $err');
      serialPort.dispose();
    }
  }
}

4. 使用示例

// 在Flutter页面中调用
void initSerial() {
  final helper = SerialHelper();
  final ports = helper.getAvailablePorts();
  if (ports.isNotEmpty) {
    helper.connectAndSend(ports.first, 'Hello Device!');
  }
}

注意事项:

  1. 权限处理:需要动态申请 USB/串口访问权限
  2. 错误处理:添加完整的 try-catch 块处理串口异常
  3. 数据格式:根据设备要求处理数据编码(ASCII/Hex/二进制)
  4. 平台差异:Android 支持 USB/OTG,iOS 仅支持 MFI 认证设备

替代方案:

如需更复杂功能,可通过 method_channel 自行封装原生串口库(如 Android 的 usb-serial-for-android)。

这种方案能稳定实现 Flutter 与硬件设备的串口通信,适合工业控制、物联网等场景。

回到顶部