Написать пост

rybkau

Часть 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», а также другие темы, которые могут вас заинтересовать.
Интересно?
Да
28
70.0%
Нет
6
15.0%
Я об этом знал (ла)
6
15.0%
проголосовало 40 пользователей
37 комментариев 9нравится 11избранное
DobriyS
Expeditor
MaxKadett
vpr
TauRus36
zxEngineer
kapion
Linberg
Tdr
  • lolwut
    1 01 авг 2013 в 11:29
    >ATZ
    >ATSP0

    Вспомнились AT-команды инициализации модемов из диалапно-BBSного прошлого. Ностальгия.
  • f1203
    8 01 авг 2013 в 11:30
    Ждём часть 4 Как пропатчить OBD под FreeBSD
  • kulakowka
    4 01 авг 2013 в 11:34
    Читал читал, читал читал и так и не понял, зачем это нужно простым автолюбителям?
    Чувакам которые занимаются постройкой корчей, тюнингом двигателя и тд - с ними все понятно :)
    • Q2W
      01 авг 2013 в 11:43
      Я в прошлом топике писал, зачем пользуюсь я. У меня не корч, машина фулл сток.
      Кстати, когда серьёзно тюнингуют машину, часто приходится покупать другой мозг, а с ним по obd уже не пообщаешься.
      • BeeRMaN
        1 01 авг 2013 в 12:03
        kulakowka говорит о том, что нахрена простым автолюбителям все эти ваши телнет команды, строка терминала и т.д. Обычный автолюбитель пользуется готовой программой, которая сразу показывает нужные значения в дружелюбном интерфейсе и не ломает голову над программированием.
        • lolwut
          4 01 авг 2013 в 12:06
          Не согласен. Я думаю многим интересно узнать о низкоуровневом обмене данными в диагностических протоколах.
          99% населения кадабры айтишники же.
          • BeeRMaN
            1 01 авг 2013 в 12:07
            Дык это вам на хабр)
            • lolwut
              2 01 авг 2013 в 12:08
              Зачем мне туда? Я всегда думал, что кадабра это автомобильный филиал хабра.
              • BeeRMaN
                01 авг 2013 в 12:10
                Я думаю, маркетолог ТМ очень с тобой не согласится.
        • BeeRMaN
          01 авг 2013 в 12:06
          Вот скриншот Torque под Андроид



          Скриншот ScanMaster-ELM под Windows

          • BeeRMaN
            01 авг 2013 в 12:18
            Например, у Torque можно настроить несколько экранов и накачать кучу скинов



            Или этот топик согласованный рекламный для OBD Car Doctor? Ну тогда извините.
            • BeeRMaN
              1 01 сен 2013 в 22:17
              Справедливости ради хочу заметить, что поюзав OBD Авто Доктор, могу сказать, что он имеет завидный расширенный функционал, поболее, чем у торка и мобильного скан мастера.
    • vanchez
      3 01 авг 2013 в 11:57
      ну я себе прикупил такой девайс, теперь на диагностике тупо экономлю 1к рублей и имею возможность приехать в сервис и сказать, что им нужно сделать, а не слушать о том, что может быть =)
      т.е. ты читаешь номера ошибок и лезешь на форумы смотреть, что с ними делать и уже сервисмены тебя не смогут развести))
      • Q2W
        01 авг 2013 в 12:29
        К сожалению, когда застучит "где-то в подвеске", ошибки не прочитаешь =).
        Да и вообще ошибки там только типичные.
        • vanchez
          01 авг 2013 в 12:49
          нуда, с подвеской мимо,)
  • FiXIDeA
    01 авг 2013 в 12:27
    Повелся на провокацию и заказал с DX адаптер, посмотрим что он покажет...
    • FiXIDeA
      21 авг 2013 в 06:44
      Приехала железка и не может подключиться к ЭБУ, такие дела.
      • lolwut
        21 авг 2013 в 07:56
        А через какой софт производится попытка подключения?
        • FiXIDeA
          21 авг 2013 в 08:28
          Torque
          • lolwut
            1 21 авг 2013 в 11:20
            А чего пишет? Через консольку обмен данными происходит какой-нибудь?

            Я сам, кстати, только недавно стал эту штуковину осваивать, попозже может пост накатаю. Обратил внимание на то, что через ноут весьма проблематично устанавливать подключение - надо обязательно немного поплясать с бубном чтобы заработало. Через мобилу с Torque все ок, но хочется чтобы больше параметров показывало (видимо некоторые PIDы производителем прописаны не по OBD стандарту) и хочется чтобы задержки были поменьше (хотя на это наверное уже никак не повлиять).
            • FiXIDeA
              21 авг 2013 в 11:28
              К калине прекрасно подключился, а вот к Vitz 05 не может. Пишет что не может установить соединение с ЭБУ. На форумах люди пишут что проблема с машинами для внутреннего Японского рынка. Позже попробую другими программами погонять и с ноута подключиться.
            • FiXIDeA
              22 авг 2013 в 03:54
              В общем перепробовал 5 разных приложений, среди них OBD Car Doctor. Последний зависает на 5 протоколе связи при автоматическом выборе. Пробовал перебрать все протоколы вручную, результат нулевой. Консоль неактивна без подключения (в настройках все включено).
  • DobriyS
    16 авг 2013 в 20:30
    Владельцы адаптеров на базе ELM327. Может есть у кого возможность проверить на Мак? Нашел вот такую страницу http://www.totalcardiagnostics.com/support/Knowledgebase/Article/View/19/0/how-to-install-elm327-usbbluetooth-on-mac-and-obd-software где описано как подключить ELM327 по USB и Bluetooth.
    • ChinChilla
      26 авг 2013 в 13:43
      У меня wifi v-gate elm327. на макбуке единственная вменяемая софтина для диага - Movi Pro.
      Если надо - заделюсь :)
      • DobriyS
        26 авг 2013 в 20:44
        Я боюсь нам сложно будет пересечься, я в мск. В Питере бываю крайне редко. За предложение спасибо! Но если Вы используете данную связку и она работает, судя по ценнику wifi v-gate elm327, можно и заказать. А Movi попробовать в демке, я так понял можно.
        • ChinChilla
          29 авг 2013 в 12:48
          Да я про софтину
          • DobriyS
            29 авг 2013 в 14:20
            Да, софтину бы поюзал, Спасибо. Жду когда приедет приборчик.
  • scl
    17 окт 2013 в 08:46
    мне вот интересно как распараллелить сигнал K-line?
    например у меня приборная панель установлена с бортовым компьтером встроенным и она использует сигнал K-line
    а я бы еще хотел параллельно использовать коммуникатор ...
    • Linberg
      17 окт 2013 в 10:17
      тройничок придумать. в котором бы была очередь запросов и по очереди отсылал их эбу. По другому думаю никак
      • scl
        17 окт 2013 в 10:27
        Никита, а слабо тебе сделать такое?:)
        • Linberg
          1 17 окт 2013 в 10:40
          нет) но другое дело что некогда) и дешевым врядли получится, потому как микроконтроллеры не изучал, а плис (с которыми работаю) дорога сама по себе)
          • scl
            1 17 окт 2013 в 10:42
            ясно,слил:)
            • Linberg
              17 окт 2013 в 10:47
              Я ща подумываю заняться приборкой. А то она у меня французская и начинает умирать. В идеале хочу с бортовым компом. Пока курю форумы)
              • scl
                17 окт 2013 в 10:53
                а готовых приборок нет что ли ?
                • Linberg
                  17 окт 2013 в 10:55
                  Их куча модификаций. С разными защитами. И внутри приборки иммо + ключи.
                  + приборка и мозги связаны (прописаны друг в друге). вообщем там не все так просто)))
                  • scl
                    17 окт 2013 в 10:56
                    печально :(
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста, или зарегистрируйтесь.