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

watbbzwu  于 2023-11-21  发布在  Flutter
关注(0)|答案(2)|浏览(389)

我正在开发一个flutter destop应用程序,它必须从esp 32板读取串行输入。我使用flutter_libserialport包。读取是空的。当我使用端口读取器进行流式传输时,我只得到[0]s,而当我使用port.read(缓冲区)时,我只得到一堆返回值[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();
      },);
    }
  }

字符串
样本输出:
x1c 0d1x的数据

kupeojn6

kupeojn61#

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

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

字符串
或者,配置将不起作用。

pbossiut

pbossiut2#

我无法使用flutter_libserialport本身解决这个问题。
我使用flython包用Python脚本打开和关闭端口,然后用flutter_libserialport再次打开端口。

相关问题