Часть 3. Как подключить смартфон к авто — читаем данные

    Мы продолжаем цикл статей о том, как подключиться к бортовой системе своего автомобиля (см. Часть 1 и Часть 2 ) и сегодня расскажем как считывать данные.

    Предполагается, что к текущему моменту у нас есть машина с диагностическим разъемом, отвечающим OBD-II стандарту, любимое мобильное устройство (ноутбук, смартфон, планшет) и адаптер на базе ELM327, который позволит соединить машину и мобильное устройство.

    Как уже говорилось в предыдущей части, независимо от типа связи между мобильным устройством и адаптером (Bluetooth, Wi-Fi, USB) на логическом уровне, — это последовательное соединение. На программном уровне необходимо открыть Socket соединение между компьютером и адаптером поверх имеющегося соединения нижнего уровня. Практическая программная реализация будет зависеть от операционной системы и типа соединения, примеров можно найти массу под все ваши любимые языки программирования. В качестве базового примера можно брать реализацию соединения на примерах чат-программ для Bluetooth или TCP\IP. В данной статье мы не будем останавливаться подробно на реализации такого соединения, для экспериментов нам хватит возможностей имеющихся программ а-ля Telnet, для экспериментов под Андроид и iOS мы встроили простую командную консоль в наше приложение OBD Car Doctor.

    Итак, скачиваем и устанавливаем программу которая позволит установить последовательное соединение с адаптером и предоставить нам командную строку для общения с машиной.

    • Для ноутбука с Windows (Linux) можно воспользоваться Putty ,
    • для Андроид и iOS можно воспользоваться OBD Car Doctor Android, OBD Car Doctor iOS. Обратите внимание, что на момент публикации статьи на iTunes может еще быть старая версия 1.2, консоль будет доступна в версии 1.3.

    После скачивания и установки программ пора брать компьютер (смартфон), адаптер и выдвигаться к машине. Распечатка этой статьи тоже не помешает.


    • Убеждаемся, что перед вами ваша машина, и/или, что ее владелец не против жестоких экспериментов с диагностической системой автомобиля.
    • Подключаем адаптер к диагностическому разъему (надеюсь, вы подготовились заранее и уже нашли разъем в соответствии с рекомендациями предыдущей части).
    • Ключ «на старт», включаем зажигание.
    • На адаптере должна загореться лампочка питания, и мы можем продолжать.

    Подробнее остановимся на связи с Bluetooth адаптером, как наиболее популярном и распространенном типе адаптеров.


    Windows:


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

    Смотрим на свойства, вкладка Оборудование

    Теперь свойства Последовательного порта.

    Видим и запоминаем, что Последовательное подключение Bluetooth мапится на порт COM3. Если есть необходимость, меняем на другой порт. Теперь запускаем Putty и настраиваем программу на работу с определенным на предыдущем шаге COM портом (в примере с COM3).

    Итак, вводим имя COM порта, скорость 9600, тип Serial и кликаем Open для открытия терминального окна.

    Android:


    1. Подключите Bluetooth адаптер к OBD-II разъему вашего автомобиля (о нем и его расположении мы писали в Части 2). Убедитесь, что лампочка на адаптере зажглась.
    2. Запустите двигатель автомобиля
    3. Зайдите в окружение Bluetooth на Вашем смартфоне: «Настройки» > Bluetooth и запустите поиск Bluetooth устройств, найдите OBD II адаптер, он должен появиться в списке устройств как 'scantool','obdkey','plx ...','cbt' или что-то похожее. Выберите адаптер. Он предложит произвести спряжение устройств.
    4. Произведите сопряжение устройств. Устройство попросит секретный код сопряжения, как правило: 1234 или 0000.
    5. Перейдите в приложение OBD Car Doctor на своем смартфоне.
    6. В Настройках в пункте BT соединение выбираем имя адаптера с которым ранее произвели сопряжение.
    7. В Настройках в разделе Тест устанавливаем галочку в опции Консоль. Возвращаемся на главную страницу, кликаем Подключить и после успешного подключения выбираем пункт Консоль (данная функция доступна начиная с версии OBD Car Doctor Android 2.22).

    iOS:


    1. Подключите OBD-II Wi-Fi адаптер к OBD-II разъему вашего автомобиля. Запустите двигатель автомобиля и дождитесь зеленого свечения на Wi-Fi адаптере.
    2. На своем iPhone устройстве перейдите в Настройки (Settings), выберите подключиться к сети Wi-Fi. После подключения к Wi-Fi, перейдите в расширенные настройки и установите:
    • Адрес IP: Статический
    • Адрес IP: 192.168.0.11
    • Маска подсети: 255.255.255.0
    Выберите имя устройства для подключения Wi-Fi. Выйдите из настроек.
    3. Перейдите в приложение OBD Car Doctor > Настройки (Settings), где настройте следующее:
    • IP Адрес: 192.168.0.10
    • Порт: 35000
    • Кликните «Сохранить» и «Выйти»

    4. Запустите двигатель.
    5. Перейдите в приложение OBD Car Doctor на своем смартфоне. В Настройках в разделе Тест устанавливаем галочку в опции Консоль. Возвращаемся на главную страницу, кликаем Подключить и после успешного подключения выбираем пункт Консоль (данная функция доступна начиная с версии OBD Car Doctor iOS 1.3, выход которой ожидается в ближайшее время).

    По завершению описанных действий вы готовы вводить команды и получать ответы от диагностической системы автомобиля. Естественно работать с консолью в движении не очень удобно и не безопасно даже для пассажира. Поэтому экспериментировать предлагаем на заведенной, но удобно припаркованной машине.

    Выше мы упомянули, что команды подразделяются на 2 типа: команды управления адаптером и собственно OBD-II команды. Обычно команды управления начинаются с последовательности AT, в то время как OBD-II команды состоят только из шестнадцатеричных цифр.

    Итак, наша первая команда:

    • набираем ATZ и нажимаем Enter (или кнопку Отправить). Если на адаптере есть питание и связь с ним была установлена, мы должны увидеть ответную строку:
    ELM 327 v1.3a >
    Или что-то похожее, в зависимости от используемого контроллера и версии прошивки адаптера. ATZ — является командой инициализации и выполняет перезагрузку адаптера.

    • Следующей командой может быть команда установки протокола, вводим команду ATSP0, в ответ мы должны получить
    ATSP0 OK >
    Команда ATSP0 не устанавливает непосредственно протокол взаимодействия адаптера с автомобилем, это специальная команда, которая устанавливает автоматический режим определения протокола адаптером. Для непосредственного поиска и установления связи мы должны послать OBD-II команду.

    • Отправляем команду 0100 (которая расшифровывается как MODE 01, PID 00), в случае успеха мы должны получить что-то вроде
    0100 Searching…
    41 00 XX XX XX XX >
    Где X может быть любой шестнадцатеричной цифрой.


    Здесь обратим внимание на несколько моментов:

    • пробелы могут игнорироваться как в командах так и в ответах; наличие или отсутствие пробелов в ответе управляется отдельной командой ATS{0|1}
    • в ответе может присутствовать или отсутствовать эхо (т.е. повтор команды, как в приведенном выше примере); наличие или отсутствие пробелов в ответе управляется отдельной командой ATE{0|1}
    • сам ответ на команду содержит модифицированное значение команды, а именно (mode+0x40)(PID), т.е. положительный ответ на команду 0100, должен начинаться с 4100.

    В случае неудачи ответы могут быть следующими:

    0100 SEARCHING...
    UNABLE TO CONNECT >
    или
    0100 SEARCHING...
    NO DATA >

    Подобные ответы означают, что адаптеру не удалось автоматически определить протокол связи с авто.

    Вместо автоматического поиска протокола можно явно установить номер протокола, поддерживаются шестнадцатеричные номера от 1 до C.
    1 - SAE J1850 PWM
    2 - SAE J1850 VPW
    3 - ISO 9142-2
    4 - ISO 14230-4 KWP (5 baud init)
    5 - ISO 14230-4 KWP (fast init)
    6 - ISO 15765-4 CAN (11 bit, 500 Kbaud)
    7 - ISO 15765-4 CAN (29 bit, 500 Kbaud)
    8 - ISO 15765-4 CAN (11 bit, 250 Kbaud)
    9 - ISO 15765-4 CAN (29 bit, 250 Kbaud)
    A - SAE J1939 CAN (29 bit, 250 Kbaud)
    B - USER1 CAN (11 bit, 125 Kbaud)
    C - USER2 CAN (11 bit, 50 Kbaud)

    Например, для явного установления связи по протоколу ISO 9142-2 набираем команду ATSP3, получаем в ответ ATSP3 OK >
    И проверяем результативность командой 0100, опять же в случае успеха ожидаем увидеть
    0100 Searching…
    01 00 41 00 XX XX XX XX >

    Если видим что-то другое, вроде
    0100 BUS INIT:
    …ERROR
    Что значит — связь по данному протоколу не установлена.

    Для тестирования и установления протокола связи может использоваться любая поддерживаемая автомобилем OBD-II команда, но рекомендуется использовать именно 0100, поскольку она должна поддерживаться производителем в соответствии со стандартом. Данная команда должна возвращать информацию о поддержке PID c 01 по 20 для MODE 01.

    Напомним, что MODE 01 отвечает за чтение динамических параметров автомобиля (скорость, обороты, температуры и т.д.) в реальном времени. Соответственно, прочитав ответ на 0100, который содержит информацию о том, какие из PID c 01 по 20 (шестнадцатеричные) поддерживаются. Для расшифровки мы должны конвертировать шестнадцатеричное представление числа в бинарное, при этом позиция бита (от старшего к младшему) соответствует номеру PID (от 01 до 20).
    Например, ответ содержащий 80 00 00 00 = 1000 0000 0000 0000 0000 0000.
    Означает поддержку единственного PID, а именно 01.

    Сейчас вы можете прочитать ответ вашего автомобиля на команду 0100 и узнать номера всех команд (PID) поддерживаемых в вашем автомобиле. Обратите внимание, что если поддерживается команда 0120, то отправив ее, можно прочитать номера поддерживаемых PID в диапазоне 21 – 40 и т.д., т.е. 0100, 0120, … 01D0, которые отвечают за определение номеров всех поддерживаемых команд в MODE 01.

    Чтобы закрепить полученные знания, предлагаем выполнить еще одну простую команду и разобрать результат. Если вы расшифровали ответ команды 0100 и получили, что PID 0C поддерживается, отправим команду 010C (обороты двигателя), ответ должен быть в виде:
    01 0C 41 0C 0B B8 >
    Для получения значения в оборотах в минуту, необходимо полученный ответ (0B B8 = 3000) разделить на 4, т.е. получаем 750 об/мин.
    Список поддерживаемых стандартом команд и формулы преобразования можно найти здесь.

    Пока вы экспериментируете с отправкой различных команд, а также получением и расшифровкой значений, мы будем готовить следующую часть(и), в которой затронем вопросы работы с несколькими бортовыми контроллерами, что нужно знать о хедерах команд, чтение и сброс ошибок, для чего используются другие MODE, «почти OBD-II», а также другие темы, которые могут вас заинтересовать.
    • +20
    • 96,8k
    • 6
    PNN
    34,00
    Компания
    Поделиться публикацией

    Комментарии 6

      0
      А про ISO14229 планируется статья?
        0
        Отдельно про ISO14229 написать нет возможности, в том числе в связи с отсутствием машины с ISO14229 и возможности проверить что к чему. Опишем некоторые стандартные подходы и попытки «копать» пре-OBD-II протоколы.
        0
        Мне интересно: почему при возможности ELM327 работать с K-Line, он не может соединиться по MUT в mitsubishi?
          0
          и с подушками в vw
            0
            Отвечаю сам себе. Во-первых, mut2 использует странную скорость передачи данных (15625). Во-вторых, там передача по ttl serial Напрямую, а тут контроллер просто не в силах запомнить столько протоколов окромя стандартных.

            А для vw — k-line + vag-com
          0
          А можно как-то так же просто установить последовательное соединение, если у меня USB устройство, а не блютуз?

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое