当尝试将它与ODB Java API一起使用时,ELM327返回`?`

时间:2014-11-11 09:00:26

标签: java elm327

我尝试使用ODB Java API (this library)从我的汽车通过蓝牙从ELM327获取数据,但在每次请求时返回?,并且库引发{{1} }

这是我的代码:

MisunderstoodException

出了什么问题?

1 个答案:

答案 0 :(得分:2)

我在尝试OBD的第一步中也使用了相同的库,所以至少在我使用它的时候,它可以说它工作得很好。

根据我的经验,获得?有时可能会发生在便宜的蓝牙设备上(甚至可能是昂贵的蓝牙设备?从未有过)。我猜这种情况会发生,如果传输过程中丢失了一些比特,那么命令就会被误解。

我为避免此问题所做的工作是设置一个过程,我最多发送所有AT个命令10次,直到我得到OK的所需回复(ATZ除外)将以ELM327回复。至于像RPM这样的价值请求,我通常只是丢掉错误的价值。

这是简短的答案,但由于设备的这些问题可能会烦恼很多,我将引导您调试整个过程......

在Windows上设置终端

首先,为了测试ELM设备的功能,您可以直接向串行接口发送命令。在Windows上,可以使用例如TeraTerm,然后在Windows上将新的蓝牙连接设置为COM设备(在start -> search box中搜索蓝牙,然后选择Change Bluetooth settings或类似)。从那里,转到COM connections,然后为蓝牙OBDII设备添加新的Outgoing。稍等一下,Windows会计算新的COM端口号,你需要它。

如果您在下拉框中找不到OBDII,则必须先将您的电脑与蓝牙设备绑定。这可以通过devices and printers来完成,你应该看到OBDII设备,所以你只需连接它(PIN通常是1234)。

如果您使用的是Linux,可能会更容易,但我还没有这样做:)

通过终端

发送一些命令

安装了蓝牙连接和TeraTerm后,您可以启动TeraTerm并连接到适配器。选择Serial,然后选择您刚刚设置的端口。确保没有其他设备连接到OBD适配器(也不是您的手机)。一次只能连接一个设备。

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

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

ATZ
E1
L1
010c

这会触发:

  1. 重置OBD设备
  2. 确保回音已开启,所以我看到我正在输入的内容
  3. 确保换行已开启,因此我们会在下一行获得回复
  4. 从车辆请求RPM
  5. 在每个命令之间,我将检查设备的回复是什么。对于所有AT命令(1.,2。和3.),它必须是OK。如果我回来?,这可能发生,我会再次重复命令。您会看到,在这种情况下,设备确实没有按照说明进行操作,例如:如果关闭则没有设置换行。所以我们真的要再发一次。

    另一方面,在编程模式下,我们会设置e0l0(关闭回声模式和换行),因为我们不希望收回已发送的内容。