如何修复在Windows上使用flutter_libserialport包读取串行输入时返回的空值?

问题描述 投票:0回答:1

我正在开发一个 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();
      },);
    }
  }

示例输出:

flutter serial-port esp32 flutter-windows libserial
1个回答
0
投票

在设置配置之前,您应该先打开串口。像这样

    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();
      },);
    }
  }

否则,该配置将不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.