我尝试使用ODB Java API (this library)从我的汽车通过蓝牙从ELM327获取数据,但在每次请求时返回?
,并且库引发{{1} }
这是我的代码:
MisunderstoodException
出了什么问题?
答案 0 :(得分:2)
我在尝试OBD的第一步中也使用了相同的库,所以至少在我使用它的时候,它可以说它工作得很好。
根据我的经验,获得?
有时可能会发生在便宜的蓝牙设备上(甚至可能是昂贵的蓝牙设备?从未有过)。我猜这种情况会发生,如果传输过程中丢失了一些比特,那么命令就会被误解。
我为避免此问题所做的工作是设置一个过程,我最多发送所有AT
个命令10次,直到我得到OK
的所需回复(ATZ
除外)将以ELM327
回复。至于像RPM这样的价值请求,我通常只是丢掉错误的价值。
这是简短的答案,但由于设备的这些问题可能会烦恼很多,我将引导您调试整个过程......
首先,为了测试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
这会触发:
在每个命令之间,我将检查设备的回复是什么。对于所有AT
命令(1.,2。和3.),它必须是OK
。如果我回来?
,这可能发生,我会再次重复命令。您会看到,在这种情况下,设备确实没有按照说明进行操作,例如:如果关闭则没有设置换行。所以我们真的要再发一次。
另一方面,在编程模式下,我们会设置e0
和l0
(关闭回声模式和换行),因为我们不希望收回已发送的内容。