我正在尝试通过蓝牙连接到 ELM327 设备。我正在使用的图书馆:
https://github.com/eltonvs/java-obd-api
建立蓝牙连接工作正常,我可以重置设备:
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(deviceAddress);
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
final BluetoothSocket socket;
try {
socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
socket.connect();
Log.d("xx", "1. Reset");
ObdResetCommand obdResetCommand = new ObdResetCommand();
obdResetCommand.run(socket.getInputStream(), socket.getOutputStream());
System.out.println(obdResetCommand.getFormattedResult());
Log.d("xx", "2. Echo Off");
EchoOffCommand echoOffCommand = new EchoOffCommand();
echoOffCommand.run(socket.getInputStream(), socket.getOutputStream());
System.out.println(echoOffCommand.getFormattedResult());
Log.d("xx", "3. LineFeed Off");
LineFeedOffCommand lineFeedOffCommand = new LineFeedOffCommand();
lineFeedOffCommand.run(socket.getInputStream(), socket.getOutputStream());
System.out.println(lineFeedOffCommand.getFormattedResult());
}
输出:
D/xx: 1. 复位
I/System.out: ELM327v1.5
D/xx: 2. Echo Off
I/System.out: OK
D/xx: 3. LineFeed Off I/System.out: OK
不工作的部分是选择协议并读取电压值:
SelectProtocolCommand selectProtocolCommand = new SelectProtocolCommand(ObdProtocols.AUTO);
try {
selectProtocolCommand.run(socket.getInputStream(), socket.getOutputStream());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
ModuleVoltageCommand moduleVoltageCommand = new ModuleVoltageCommand();
try {
moduleVoltageCommand.run(socket.getInputStream(), socket.getOutputStream());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
我观察到的是协议选择很快就完成了,没有任何输出。当我将协议选择部分与“torque lite”等其他应用程序进行比较时,这需要更长的时间,并且我在我的 ELM327 设备上看到闪烁的灯光,而在运行我的代码时并非如此。
ModuleVoltageCommand 崩溃,然后:
br.ufrn.imd.obd.exceptions.UnableToConnectException:运行控制模块电源 [01 42] 时出错,响应:...UNABLETOCONNECT
我验证了加密狗正在与其他应用程序一起使用,所以这一定是我的代码的问题。
我究竟做错了什么?