Подключиться к ELM327 // Выбрать протокол

Я пытаюсь подключиться к устройству ELM327 через Bluetooth. Библиотека, которую я использую:

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. 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

Я убедился, что ключ работает с другими приложениями, так что это должно быть проблемой с моим кодом.

Что я делаю не так?


person Alex Tbk    schedule 17.10.2019    source источник


Ответы (1)


Я создатель этой библиотеки, спасибо за использование моего проекта!

Это проблема ЭБУ, когда вы меняете протокол, следующая команда обычно не выполняется. Что я обычно делаю, так это отправляю команду дампа, которая, как ожидается, потерпит неудачу (так что вы просто игнорируете любое поднятое исключение для этой команды), а затем я отправляю команды, которые я действительно хочу запустить.

Надеюсь, это решит вашу проблему!

person Elton Viana    schedule 17.02.2020
comment
Благодарю вас! Я оценю это. Это не срабатывало на смоделированном ЭБУ на ПК - я ожидаю, что он отреагирует правильно. - person Alex Tbk; 17.02.2020