...

четверг, 1 августа 2013 г.

Часть 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», а также другие темы, которые могут вас заинтересовать.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Комментариев нет:

Отправить комментарий