Как подключить смартфон к авто или история создания OBD Car Doctor

в 14:23, , рубрики: mobile development, obd-ii, obd2, авто + смартфон, автомобили, Блог компании PNN, диагностика, мобильное приложение, метки: , , , , ,

История

Идея подключить смартфон к бортовой системе автомобиля возникла достаточно давно. Спусковым крючком стала прочитанная статья об электронной начинке современных авто и CAN шине, которая позволяет обмениваться данными различным устройствам, подключенным к этой шине.
image
Воображение рисовало радужные картины «робомобиля» полностью управляемого со смартфона, записывающего и оптимизирующего все параметры работы двигателя и систем, предупреждающего о критических параметрах и ошибках в работе. Ну ладно с управлением это, пожалуй, чересчур, ведь кроме цифровых датчиков тут понадобятся и некоторые управляющие контролеры с сервоприводами…

Картина чуть поблекла, но считывать-то доступные параметры мы сможем, а если повезет, то может и центральный замок открыть/закрыть сможем (хотя такая перспектива сулит дыру с системе безопасности Винд… т.е. автомобиля :) ).
И так, пора приступать к практическому исследованию!

Исследование
Исследование
Автомобиль был в наличии, и теперь оставалось разобраться в том, как к нему подключиться. Подключаться нужно к диагностическому разъему (DLC — Data Link Connector). Данный разъем служит для подключения диагностических сканеров (которые «компьютерная диагностика») к бортовой сети авто и опроса/съема данных различных подсистем автомобиля.
Посмотрев на разнообразие марок авто, сканеров, коннекторов возникла легкая паника, как разобраться со всем этим «зоопарком», или хотя бы как найти вариант для своей машины?! К счастью, благодаря одному из экологических ведомств США (а именно California Air Resources Board — CARB), которое стремилось к унифицированному контролю уровней выбросов автомобилей, стандартизация добралась и до этой сферы.

Актуальным на данный момент является свод стандартов OBD-II, который описывает механические (форма и размер разъема), электрические (питание, сигнальные протоколы) и логические (информационные протоколы) уровни совместимости.

Здесь следует обратить внимание, что соответствие одному из параметров еще не гарантирует соответствия остальным. Т.е. Наличие правильного механического разъема в автомобиле не гарантирует соответствия стандарту сигнальных и логических протоколов, то есть не обязательно обеспечивает соответствие OBD-II стандарту.

Теория

Рассмотрим вышеупомянутые уровни совместимости:
Как подключить смартфон к авто или история создания OBD Car Doctor

  • Механически это трапециевидный разъем фиксированного размера с 16 контактами.
  • На электрическом уровне поддерживаются 5 основных сигнальных протоколов: SAE J1850 PWM, SAE J1850 VPW, ISO 9141-2, ISO 14230 KWP2000, ISO 15765 CAN
  • Логический уровень предполагает отсылку сообщений заданной структуры и соответственно получение структурированного ответа. Пакет состоит из заголовка, тела сообщения, контрольной суммы — <header><body><crc>.

Рассмотрим структуру тела запроса:
Структура представляется как <mode><pid>.
<mode> (1 байт) определяет функциональную группу параметров, например 01 – параметры реального времени, 02 – «снимки» параметров на момент возникновения ошибки и т.д.
<pid>(1 или 2 байта) — Parameter ID, идентификатор запрашиваемого параметра в контексте группы, например для mode 01 pid 0D отвечает за текущее значение скорости автомобиля.
Например, 68 6C F1 01 0D A6, где header = 68 6C F1, body = 01 0D, crc = A6.

Структура тела ответа содержит код возврата:
• для положительного ответа <mode+0x40>< pid >
• для информации об ошибке 7F<pid | mode>
• затем собственно возвращаемое значение
<header><body><crc>.
Например, 48 6B 10 41 0D 00 11, где header = 48 6B 10, body = 41 0D 00, crc = 11, т.е. собственно возвращаемое значение 00

Ну вот, уже почти все готово, прямо «на блюдечке с золотой каемочкой» :-)! А где же наша волшебная команда «Сим-сим открой центральный замок»?!… Но, к нашему большому разочарованию, стандарт OBD-II такую команду не описывает :-(. Здесь мы вспоминаем, что разрабатывался стандарт по запросу экологического ведомства и естественно им нет никакого дела до того закрыт или открыт у нас центральный замок. Ну что же, придется довольствоваться тем, что есть: список охваченных стандартом команд, например вот здесь, при этом каждая конкретная модель автомобиля обычно поддерживает только небольшую часть полного списка. Нужно также упомянуть, что OBD-II стандарт предусматривает наличие пользовательских команд, специфичных для определённых производителей и моделей, однако публичная информация по этим командам практически отсутствует.

Что же в сухом остатке:

  • Есть список параметров, которые описаны стандартом и которые, при условии поддержки со стороны вашей машины, можно будет прочитать. Обычно это некоторые динамическим параметры, которые можно мониторить в реальном времени (скорость, обороты, температура, параметры с лямбда датчиков, параметры по которым можно вычислить расход топлива и т.п.); ошибки, приводящие к включению индикатора CheckEngine; некоторые результаты самодиагностики бортовых систем авто. Также может поддерживаться команда сброса информации об ошибках;
  • Есть гипотетическая возможность добраться до пользовательских параметров вашего автомобиля, список которых теоретически на много больше стандартного;

Подводим итог – мы разобрались с теорией и увидели возможные перспективы ее полезного применения. Осталось самое малое – подобрать инструментарий и реализовать задуманное.

Об этом и многом другом мы расскажем в следующих заметках, а именно о практических аспектах: какие авто поддерживаются, какие есть адаптеры для подключения смартфона или компьютера к автомобилю, как запросить и получить значения параметров.

Спасибо за внимание, до новых встреч!

Автор: Qwantro

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js