我正在开发一个 flutter destop 应用程序,它必须从 esp32 板读取串行输入。我正在使用 flutter_libserialport 包。读取内容为空。当我使用端口读取器进行流式传输时,我只得到 [0],而当我使用 port.read(buffer) 时,我只在返回值 [0,0,0,...] 中得到一堆零。 .
这是我第一次使用这个库,我还没有找到任何合适的文档。这可能是一个配置问题,但我不确定如何进行此配置。
我能够让它工作的唯一方法是首先使用 Arduino IDE 的串行监视器或使用 pyserial 库的 python 脚本从端口读取数据;关闭那里的连接,然后读取我的应用程序中的端口。
代码示例:
void startListening() {
if(_selected?.isOpen == true){
print("selection was open. Closed successful = ${_selected?.close()}");
}
_selected?.config = SerialPortConfig()..baudRate = 9600;
if(_selected?.open(mode: 3) != true){
print("=============> Something went wrong");
print(_selected == null ? "selected is null": SerialPort.lastError);
} else {
// final data = await _selected?.read(128, timeout: 200);
// print("=======> data");
// print(String.fromCharCodes(data!));
// _selected?.close();
final reader = SerialPortReader(_selected!);
reader.stream.listen((event) {
print("============> onData: ${_selected?.name}");
print("$event => ${String.fromCharCodes(event)}");
}, onError: (error, stackTrace){
print("error: $error");
print("stackTrace: $stackTrace");
}, onDone: (){
_selected!.close();
},);
}
}
示例输出:
在设置配置之前,您应该先打开串口。像这样
void startListening() {
if(_selected?.isOpen == true){
print("selection was open. Closed successful = ${_selected?.close()}");
}
if(_selected?.open(mode: 3) != true){
print("=============> Something went wrong");
print(_selected == null ? "selected is null": SerialPort.lastError);
} else {
_selected?.config = SerialPortConfig()..baudRate = 9600;
// final data = await _selected?.read(128, timeout: 200);
// print("=======> data");
// print(String.fromCharCodes(data!));
// _selected?.close();
final reader = SerialPortReader(_selected!);
reader.stream.listen((event) {
print("============> onData: ${_selected?.name}");
print("$event => ${String.fromCharCodes(event)}");
}, onError: (error, stackTrace){
print("error: $error");
print("stackTrace: $stackTrace");
}, onDone: (){
_selected!.close();
},);
}
}
否则,该配置将不起作用。