Flutter 将数据写入BLE设备并读取其响应颤振?

Flutter 将数据写入BLE设备并读取其响应颤振?,flutter,dart,bluetooth-lowenergy,flutter-dependencies,obd-ii,Flutter,Dart,Bluetooth Lowenergy,Flutter Dependencies,Obd Ii,我面临着将命令写入BLE设备和接收数据的问题。我正在将ASCII编码字符串写入特征。当需要对数据进行解码时,问题就出现了。确切的数据是在iOS中接收到的,但当我尝试解码时,它只是变为空白。我尝试通过UTF8解码器和ASCII解码器解码,但没有得到任何结果 这就是我发现这些设备的方式 @override void initState() { // TODO: implement initState widget.flutterBlue.scanResults.listen((L

我面临着将命令写入BLE设备和接收数据的问题。我正在将ASCII编码字符串写入特征。当需要对数据进行解码时,问题就出现了。确切的数据是在iOS中接收到的,但当我尝试解码时,它只是变为空白。我尝试通过UTF8解码器和ASCII解码器解码,但没有得到任何结果

这就是我发现这些设备的方式

@override
  void initState() {
    // TODO: implement initState
    widget.flutterBlue.scanResults.listen((List<ScanResult> results) {
      for (ScanResult result in results) {
        _addDeviceTolist(result.device);
      }
    });
    widget.flutterBlue.startScan();
  }
发现服务:-

注释标记1和标记2行时,会打印值。我尝试了ASCII和UTF8解码

在浏览各种问题时,我发现可以从所有特征中读取值

void _discoverDeviceServices() async {
    for (BluetoothService service in _services){
      for (BluetoothCharacteristic characteristic in service.characteristics){
        var value = await characteristic.read();
        print(value);
        // print(AsciiDecoder().convert(value)); /*** TAG-1***/
        // print(utf8.decode(value)); /*** TAG-2***/
        if (characteristic.properties.write){
          if (characteristic.properties.notify){
            _rx_Write_Characteristic = characteristic;
            _sendCommandToDevice();
          }
        }
      }
    }
  }
将命令写入设备:-

void _sendCommandToDevice() async {
    final command = "AT Z\r";
    final convertedCommand = AsciiEncoder().convert(command);
    await _rx_Write_Characteristic.write(convertedCommand);
    _connectedDevice.disconnect();
  }
请帮助我指出我在读取写入BLE设备的数据响应时出错的地方,以及如何准确地写入和读取值

谢谢

这可能是您正在寻找的

当我用你的价值观测试它时,它似乎给出了正确的答案


13
s是表示回车的
\r
,如果您打印原始值,您会得到什么?你希望得到什么?蓝牙通常是字节数组或整数列表。返回的值是否应为字符串?或者它是一个数值吗?我得到了一个绝对完美的整数列表。问题在于解码它。我收到的答复是[13,13,69,76,77,51,50,55,32,118,49,46,53,13,13,62]。现在这个响应的解码还没有完成。这些看起来不像ASCII/UTF-8值。您希望这些值代表什么?通常在一次读取中有一个数值。例如,uint8或unit16 etcI我期望从响应中得到ELM327 v1.5。这似乎解决了我的问题。事实上,我对弗利特还很陌生,只是在探索如何让自己变得更容易。非常感谢你。另外,我不知道是谁贬低了这个答案。他们没有留下评论,所以我们只能猜测为什么它会被否决。我最好的猜测是因为我包含了一个带有代码的sceengrab。我认为它增加了更多的上下文,而不仅仅是文本。最重要的是你在前进,是的。谢谢你的帮助。
void _sendCommandToDevice() async {
    final command = "AT Z\r";
    final convertedCommand = AsciiEncoder().convert(command);
    await _rx_Write_Characteristic.write(convertedCommand);
    _connectedDevice.disconnect();
  }