История
Идея подключить смартфон к бортовой системе автомобиля возникла достаточно давно. Спусковым крючком стала прочитанная статья об электронной начинке современных авто и CAN шине, которая позволяет обмениваться данными различным устройствам, подключенным к этой шине.
Воображение рисовало радужные картины «робомобиля» полностью управляемого со смартфона, записывающего и оптимизирующего все параметры работы двигателя и систем, предупреждающего о критических параметрах и ошибках в работе. Ну ладно с управлением это, пожалуй, чересчур, ведь кроме цифровых датчиков тут понадобятся и некоторые управляющие контролеры с сервоприводами…
Картина чуть поблекла, но считывать-то доступные параметры мы сможем, а если повезет, то может и центральный замок открыть/закрыть сможем (хотя такая перспектива сулит дыру с системе безопасности Винд… т.е. автомобиля :) ).
И так, пора приступать к практическому исследованию!
Исследование
Автомобиль был в наличии, и теперь оставалось разобраться в том, как к нему подключиться. Подключаться нужно к диагностическому разъему (DLC — Data Link Connector). Данный разъем служит для подключения диагностических сканеров (которые «компьютерная диагностика») к бортовой сети авто и опроса/съема данных различных подсистем автомобиля.
Посмотрев на разнообразие марок авто, сканеров, коннекторов возникла легкая паника, как разобраться со всем этим «зоопарком», или хотя бы как найти вариант для своей машины?! К счастью, благодаря одному из экологических ведомств США (а именно California Air Resources Board — CARB), которое стремилось к унифицированному контролю уровней выбросов автомобилей, стандартизация добралась и до этой сферы.
Актуальным на данный момент является свод стандартов OBD-II, который описывает механические (форма и размер разъема), электрические (питание, сигнальные протоколы) и логические (информационные протоколы) уровни совместимости.
Здесь следует обратить внимание, что соответствие одному из параметров еще не гарантирует соответствия остальным. Т.е. Наличие правильного механического разъема в автомобиле не гарантирует соответствия стандарту сигнальных и логических протоколов, то есть не обязательно обеспечивает соответствие OBD-II стандарту.
Теория
Рассмотрим вышеупомянутые уровни совместимости:
- Механически это трапециевидный разъем фиксированного размера с 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