这里用到flutter_libserialport 来进行串口通讯,支持android、linux、macos、windows,android和windows亲测可用。
pubspec.yaml里增加
dependencies:
flutter_libserialport: ^0.4.0
flutter pub get后在.dart文件添加
import 'package:flutter_libserialport/flutter_libserialport.dart';
官方demo只提供了获取所有串口的代码
var availablePorts = SerialPort.availablePorts;
这里着重介绍下如果使用自定义串口、波特率等参数打开串口并读取数据,和发送数据。
//打开串口
SerialPort serialPort = SerialPort("/dev/ttyS1");//串口名称 COM1
bool isSuccess = serialPort.openReadWrite();
if (isSuccess) {
//①串口打开后再配置参数
var config = SerialPortConfig();
config.baudRate = 9600; //波特率 115200
config.bits = 8; //数据位
config.parity = SerialPortParity.none;//校验位
config.stopBits = 1; //停止位
config.xonXoff = 0;
config.rts = 1;
config.cts = 0;
config.dsr = 0;
config.dtr = 1;
serialPort.config = config;
config.dispose();
//读串口数据
SerialPortReader reader = SerialPortReader(serialPort, timeout: 3);
StreamSubscription<Uint8List> subscription = reader.stream.listen((data) {
//data为Uint8List 类似java的byte[]
print(data);
});
//停止读串口
//subscription.cancel();
//写数据
List<int> data = [1, 2, 3, 4, 5, 0];
Uint8List bytes = Uint8List.fromList(data);
serialPort.write(bytes);
}
①参考大佬回答:https://github.com/jpnurmi/flutter_libserialport/issues/104
根据文档:
创建新配置时,其所有设置最初都设置为特殊的-1值。在使用端口之前,应始终配置所有设置。库没有应用默认设置。当您打开一个端口时,它可能具有操作系统或驱动程序的默认设置,或者上一个使用它的程序留下的设置。
还要注意:必须使用dispose()处理配置。