当尝试使用ODB Java API与ELM327配合使用时,ELM327返回`?`。

3
我正在尝试使用ODB Java API (这个库) 通过蓝牙从我的汽车的ELM327获取数据,但是每次请求都返回?,并且该库会抛出MisunderstoodException异常。

这是我的代码:

socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
socket.connect();

    final CustomRPMCommand engineRpmCommand = new CustomRPMCommand();
    final SpeedObdCommand speedObdCommand = new SpeedObdCommand();
    while (!Thread.currentThread().isInterrupted()) {
        engineRpmCommand.run(socket.getInputStream(), socket.getOutputStream());
        speedObdCommand.run(socket.getInputStream(), socket.getOutputStream());

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                speedometerGauge.setSpeed(engineRpmCommand.getRPM(), true);
                rpmGauge.setSpeed(speedObdCommand.getMetricSpeed(), true);
            }
        });
    }

有什么问题?

1个回答

2

我也曾经用同样的库尝试OBD,所以我可以说至少在我使用它的时候,它运行良好。

然而,从我的经验来看,使用廉价的蓝牙设备有时会出现?的情况(甚至可能发生在昂贵的设备上?我从未拥有过)。我猜这是因为在传输过程中丢失了一些位,因此命令会被误解。

为了避免这个问题,我设置了一个进程,在该进程中,我发送所有AT命令多达10次,直到获得所需的OK响应(除了ATZ,它将响应ELM327)。至于像RPM等值请求,我通常只是丢弃错误的值。

那就是简短的答案,但由于这些设备的这种问题可能会让人很烦恼,所以我将指导您调试整个过程...

在Windows上设置终端

首先,为了测试ELM设备的功能,您可以直接向串行接口发送命令。在Windows上,您可以使用例如TeraTerm,并在Windows上设置新的蓝牙连接作为COM设备(在开始 -> 搜索框中搜索蓝牙,然后选择更改蓝牙设置或类似选项)。从那里,转到COM连接,然后为蓝牙OBDII设备添加一个新的Outgoing。等待一段时间,直到Windows计算出新的COM端口号,您将需要它。

如果您在下拉框中找不到OBDII,则必须先将PC与蓝牙设备绑定。这可以通过设备和打印机完成,在那里您应该看到OBDII设备,因此您只需连接它(PIN通常为1234)。

如果您使用Linux,则可能会更容易一些,但我没有尝试过 :)

通过终端发送一些命令

一旦您拥有了蓝牙连接和TeraTerm安装程序,就可以启动TeraTerm并连接到适配器。选择串行,然后选择刚刚设置的端口。确保没有其他设备连接到OBD适配器(甚至不是你的手机)。每次只能连接一个设备。

如果连接成功,您应该能够输入字母。通常,在默认设置中,您应该能够看到您输入的字母(回显模式开启),但由于这不确定,只需输入ATZ并按<Enter>。ELM应该在同一行中响应“ELM327”(对我来说,如果echo mode开启,则通常会导致奇怪的显示,但您应该获得任何响应)。

从终端中,我通常按以下顺序发送这些命令:

ATZ
E1
L1
010c

这将触发以下操作:
  1. 重置OBD设备
  2. 确保回显打开,以便查看输入内容
  3. 确保换行打开,以便在下一行获取响应
  4. 请求车辆的RPM(每分钟转数)
在每个命令之间,我会检查设备的回复。对于所有的AT命令(1、2和3),回复必须是OK。如果我收到了?,这种情况可能会发生,我会再次重复该命令。在这种情况下,您会看到设备确实没有遵循指示,例如,如果回车符关闭,则未设置回车符。因此,我们确实需要再次发送它。
另一方面,在编程模式下,我们将设置e0l0(关闭回显模式和换行符),因为我们不希望收到已发送的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接