aivs
Участник
Всем привет, меня зовут Виталий, я инженер-программист и я делаю виртуальную панель приборов, которая подходит многим VAG'ам.
Мне давно было интересно узнать, как работает электроника в моей машине Skoda Octavia A5, могу ли я перенастроить ее работу и управлять с телефона. После изучения работы VCDS я понял, что через OBD2 разъем можно запросить все данные о машине, если знать какие команды отправлять.
Для того, чтобы узнать какие CAN команды отправляет VCDS я собрал сниффер из Arduino и модуля MCP2515 TJA1050 Niren и подключил его к кабелю.
Специальный скетч arduino-canhacker для Arduino отлавливает все CAN команды и передает их в программу CANHacker V2.
За несколько месяц исследования я собрал список CAN команд для запроса значения датчиков и подобрал формулы для расшифровки.
Я протестировал эти команды на нескольких Octavia A5 разных комплектаций и они всегда срабатывали, но вот на Octavia A7 не все работает, например для состояния дверей другие команды.
Следующим этапом было визуализировать полученную информацию с датчиков. На базе микрокомпьютера Raspberry Pi и 7 дюймового дисплея я собрал панель приборов, которая подключается к CAN шине.
В Skoda Octavia A5 особо нет места для дополнительно дисплея, поэтому я решил бардачок на торпедо переделать в стойку для панели. Из черного пластика вырезал заглушку для бардачка и на ней закрепил все компоненты.
Вот так выглядит установленная панель приборов
Исходные коды выложены на github, при желании любой может повторить. Работать должно и на VW, Audi, Skoda, Seat. Интерфейс написан на python kivy и работает очень быстро.
Видео работы панели приборов
Я не стал останавливаться на достигнутом и решил найти способ, как перенести эту панель приборов на телефон. У меня был ELM327 Wi-Fi сканер, который я изредка использовал для считывания и сброса ошибок. Я решил выяснить, может ли он работать с CAN шиной и как оказалось ДА! при правильной настройке ELM327 может отправлять и принимать CAN команды через OBD2 разъем.
Вот так можно получить доступ к CAN шине с помощью ELM327:
Тестовый запрос в CAN-шину:
Оставалось нехитрое дело, а именно написать приложение для телефона, которое по Wi-Fi отправляет запрос на ELM327, а адаптер запрашивает данные уже по CAN шине. В итоге получилось приложение VAG Virtual Cockpit пока, только под iOS.
Приложение умеет показывать:
Сейчас я активно работаю над следующей версией, если есть идеи, что добавить, пишите. Версия для Android планируется.
Мне давно было интересно узнать, как работает электроника в моей машине Skoda Octavia A5, могу ли я перенастроить ее работу и управлять с телефона. После изучения работы VCDS я понял, что через OBD2 разъем можно запросить все данные о машине, если знать какие команды отправлять.
Для того, чтобы узнать какие CAN команды отправляет VCDS я собрал сниффер из Arduino и модуля MCP2515 TJA1050 Niren и подключил его к кабелю.
Специальный скетч arduino-canhacker для Arduino отлавливает все CAN команды и передает их в программу CANHacker V2.
За несколько месяц исследования я собрал список CAN команд для запроса значения датчиков и подобрал формулы для расшифровки.
Код:
// Двери
714 03 22 22 0D 55 55 55 55
77E 05 62 22 0D 55 65 AA AA - все закрыты
77E 05 62 22 0D 00 65 AA AA - все открыты
77E 05 62 22 0D 54 65 AA AA - водительская открыта
77E 05 62 22 0D 51 65 AA AA - пассажирская открыта
77E 05 62 22 0D 50 65 AA AA - водительская и пассажирская открыта
77E 05 62 22 0D 45 65 AA AA - задняя левая открыта
77E 05 62 22 0D 15 65 AA AA - задняя правая открыта
77E 05 62 22 0D 44 65 AA AA - водительская и задняя левая открыта
77E 05 62 22 0D 40 65 AA AA - водительская, пассажирская, задняя левая открыты
77E 05 62 22 0D 54 65 AA AA - багажник закрыт
77E 05 62 22 0D 54 64 AA AA - багажник открыт
01010101 = 0x55 (все закрыты)
0 бит - водительская
2 бит - пассажирская
4 бит - задняя левая
6 бит - задняя правая
// Ручник
714 03 22 22 05 55 55 55 55
77E 05 62 22 05 21 AA AA AA - нажат
77E 05 62 22 05 20 AA AA AA - не нажат
// Наружная температура
714 03 22 22 0С 55 55 55 55
77E 04 62 22 0C 55 AA AA AA - -7.5°С
77E 04 62 22 0C 65 AA AA AA - 0.5 101°С
77E 04 62 22 0C 66 AA AA AA - 1 = 102°С
77E 04 62 22 0C 68 AA AA AA - 2 = 104°С
// Наружная температура отображаемая
714 03 22 10 14 55 55 55 55
77E 04 62 10 14 84 AA AA AA - 16°С
// Запас хода
714 03 22 22 94 55 55 55 55
77E 05 62 22 94 00 8E AA AA - 142км
// Запас хода в литрах
714 03 22 22 9A 55 55 55 55
77E 05 62 22 9A 00 85 AA AA - 16.625л = 133
77E 05 62 22 9A 00 66 AA AA - 12.750л = 102 // 102/8 = 12.75
// Уровень топлива с датчика
714 03 22 22 06 55 55 55 55
77E 04 62 22 06 2C AA AA AA - 44л
77E 04 62 22 06 16 AA AA AA - 22л
// Положение стрелки указателя уровня топлива
714 03 22 22 96 55 55 55 55
77E 05 62 22 96 01 9A AA AA - 41.0°
77E 05 62 22 96 01 13 AA AA - 27.5°
// Температура ОЖ
714 03 22 F4 05 55 55 55 55
0 = 63
77E 04 62 F4 05 63 AA AA AA - 27°С
77E 04 62 F4 05 85 AA AA AA - 52.5°С - 133 // 1.5 = 2; 52.5/1.5 = 35;
77E 04 62 F4 05 87 AA AA AA - 54.0°С - 135
77E 04 62 F4 05 8F AA AA AA - 60.0°С - 143
77E 04 62 F4 05 91 AA AA AA - 61.5°С - 145
77E 04 62 F4 05 93 AA AA AA - 63.0°С - 147
77E 04 62 F4 05 95 AA AA AA - 64.5°С - 149
77E 04 62 F4 05 97 AA AA AA - 66.0°С - 151
77E 04 62 F4 05 BD AA AA AA - 94.5°С - 189 // (189 - 63)/2*1.5 = 94.5
77E 04 62 F4 05 BF AA AA AA - 96.0°С - 191
77E 04 62 F4 05 C1 AA AA AA - 97.5°С - 193
77E 04 62 F4 05 С5 AA AA AA - 100.5°С - 197
77E 04 62 F4 05 С7 AA AA AA - 102.0°С - 199
77E 04 62 F4 05 СB AA AA AA - 105.0°С - 203
// Обороты двигателя
714 03 22 F4 0C 55 55 55 55
77E 05 62 F4 0C 0B C6 AA AA - 753.5 об/мин; 0BC6 = 3014/4 = 753
77E 05 62 F4 0C 0B DC AA AA - 759 об/мин; 0BDC = 3036
77E 05 62 F4 0C 0B E8 AA AA - 762 об/мин; 0BE8 = 3048
77E 05 62 F4 0C 1C 32 AA AA - 1804.5 об/мин
// Скорость
714 03 22 F4 0D 55 55 55 55
77E 04 62 F4 0D 18 AA AA AA - 24 км/ч
77E 04 62 F4 0D 16 AA AA AA - 18 км/ч
77E 04 62 F4 0D 1С AA AA AA - 28 км/ч
// Температура масла
714 03 22 20 2F 55 55 55 55
77E 04 62 20 2F 36 AA AA AA - -4°С
77E 04 62 20 2F 67 AA AA AA - 45°С
77E 04 62 20 2F 68 AA AA AA - 46°С
// Температура в салоне
746 03 22 26 13 55 55 55 55
7B0 05 62 26 13 00 5B AA AA - 9.1, 91 == 0x5B
7B0 05 62 26 13 00 5C AA AA - 9.2°С
7B0 05 62 26 13 00 5D AA AA - 9.3°С
// Время
714 03 22 22 16 55 55 55 55
77E 05 62 22 16 11 1E AA AA - 17:30
// Кнопки подрулевого переключателя
714 03 22 22 1B 55 55 55 55
77E 05 62 22 1B 80 AA AA AA - не нажата
77E 05 62 22 1B 81 AA AA AA - нажата вверх
77E 05 62 22 1B 84 AA AA AA - нажата вниз
// Средний расход 2
714 03 22 22 99 55 55 55 55
77E 05 62 22 99 00 91 AA AA - 14.5л/100км
77E 05 62 22 99 00 49 AA AA - 7.3л/100км
// Текущий расход
714 03 22 22 98 55 55 55 55
77E 05 62 22 98 00 00 AA AA - 0.0л/100км
// Пробег
714 03 22 22 03 55 55 55 55
77E 05 62 22 03 24 C0 AA AA - 94080 км 0x24С0 * 10
// Напряжение сети
746 03 22 02 86 55 55 55 55
7B0 04 62 02 86 8C AA AA AA - 14.0В
7B0 04 62 02 86 8B AA AA AA - 13.9В
// TRIP
Я протестировал эти команды на нескольких Octavia A5 разных комплектаций и они всегда срабатывали, но вот на Octavia A7 не все работает, например для состояния дверей другие команды.
Следующим этапом было визуализировать полученную информацию с датчиков. На базе микрокомпьютера Raspberry Pi и 7 дюймового дисплея я собрал панель приборов, которая подключается к CAN шине.
В Skoda Octavia A5 особо нет места для дополнительно дисплея, поэтому я решил бардачок на торпедо переделать в стойку для панели. Из черного пластика вырезал заглушку для бардачка и на ней закрепил все компоненты.
Вот так выглядит установленная панель приборов
Исходные коды выложены на github, при желании любой может повторить. Работать должно и на VW, Audi, Skoda, Seat. Интерфейс написан на python kivy и работает очень быстро.
Видео работы панели приборов
Я не стал останавливаться на достигнутом и решил найти способ, как перенести эту панель приборов на телефон. У меня был ELM327 Wi-Fi сканер, который я изредка использовал для считывания и сброса ошибок. Я решил выяснить, может ли он работать с CAN шиной и как оказалось ДА! при правильной настройке ELM327 может отправлять и принимать CAN команды через OBD2 разъем.
Вот так можно получить доступ к CAN шине с помощью ELM327:
Код:
atz // сброс всех настроек
at e0 // отключаем эхо
at sh 714 // ID к которому будем отправлять запрос
at cra 77e // ID с которого будем получать ответ
at fc sh 714 // Включить Flow control для ID 714
at fc sd 30 00 00 // Задать данные для Flow control
at fc sm 1 // Режим Flow Control, когда юзер задает ID и данные
at al // Разрешить длинные сообщение, больше 7 байт
at sp 6 // Протокол общения ISO 15764-4 CAN (11 bit ID, 500 kbaud)
at ca f0 // CAN auto formating off
at l0 // отключаем перенос
Тестовый запрос в CAN-шину:
Код:
03 22 22 0D 55 55 55 55 // запрос температуры масла
05 62 22 0D 55 65 AA AA // ответ
Оставалось нехитрое дело, а именно написать приложение для телефона, которое по Wi-Fi отправляет запрос на ELM327, а адаптер запрашивает данные уже по CAN шине. В итоге получилось приложение VAG Virtual Cockpit пока, только под iOS.
Приложение умеет показывать:
- Какая дверь открыта
- Скорость
- Обороты
- Температура масла
- Температура двигателя
- Объем топлива в баке в литрах
- Запас хода в километрах
- Средний расход
- Время в машине
- Пробег
- Температура за бортом
- Skoda Octavia A5 2011
Skoda Octavia A5 Универсал 2012
Skoda Yeti 2011
Skoda Octavia A7 2014 (не все параметры отображаются)</li>
Сейчас я активно работаю над следующей версией, если есть идеи, что добавить, пишите. Версия для Android планируется.