Bluetooth 経由で ELM327 デバイスに接続しようとしています。私が使用しているライブラリ:
https://github.com/eltonvs/java-obd-api
Bluetooth 接続の確立は正常に機能し、デバイスをリセットできます。
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. エコー オフ
I/System.out: OK
D/xx: 3. ラインフィード オフ 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
ドングルが他のアプリで動作していることを確認したので、これは私のコードの問題であるに違いありません。
私は何を間違っていますか?