将数据写入 BLE 设备并读取其响应抖动?

问题描述

我在向 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();
  }

连接设备:-

void _connectDevice() async {
    widget.FlutterBlue.stopScan();
    print(_devicetoConnect);
    try {
      await _devicetoConnect.connect();
    } catch (e) {
      if (e.code != 'already_connected') {
        throw e;
      }
    } finally {
      _services = await _devicetoConnect.discoverServices();
    }
    _discoverDeviceServices();
    setState(() {
      _connectedDevice = _devicetoConnect;
    });
  }

发现服务:-

注释 TAG-1 和 TAG-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 设备的数据的响应时出错的地方,以及如何准确地写入和读取值?

谢谢!

解决方法

这可能是您要找的 String.fromCharCode

当我在 https://dartpad.dev/

上使用您的值对其进行测试时,它似乎给出了正确的答案

enter image description here

13\r escape characters 代表回车

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...