Программы для canbus андроид
Всем привет. Мучает меня следующий вопрос.
Вот есть у нас в автомобиле CAN-шина. И есть у нас китайская магнитола на андроиде, в которой тоже есть CAN-шина. Так вот, нигде не могу найти, как с помощью этой магнитолы получить доступ к шине?
Все пишут про obd, elm, декодеры какие-то… что они дают, если у нас есть CAN собственной персоной?
Также у нас есть GMLAN. На магнитоле GMLAN нет, но есть умельцы, которые ваяют переходник GMLAN-CAN. Опять же, что это даст, ведь скорости у этих шин разные?
Вообще задумка — написать программу на эту магнитолу и управлять электроникой авто через неё. Я не понимаю, почему это невозможно, но при этом, ни одной подобной темы не нашел.
Метки: android, программирование, can, canbus, gmlan, obd, elm
Комментарии 35
Тоже интересует этот момент, в ГУ все таки используется "нативный" КАН или с помощью декодера транслируется в "понятный" ему протокол… Но — какой?
Похоже, декодер шлёт уже чисто сигналы по отдельным проводам, типа "АСС ON", "задняя передача" и т.д. А на плате уже сделана разводка. Но интересно, как эти сигналы попадают в андроид?
на китайских бошках нет кан шины… canrx cantx это обычные UART пины для общения мафона с канбасом — доп. устройством, который и общается с каншиной авто по своему протоколу. это некий адаптер, который переводит кан-команды различных авто в понятные универсальные конманды для ГУ. внешним софтом (а-ля торки и обд-доктор) не подцепиться. к тому же у современных авто как минимум 2 кан сети — комфорт, двигатель (бывает и 3 и 4 сети). для мониторинга ошибок надо цепляться к двигателю, для управления окошками, климатом, температурой, звуком и т.д. надо цепляться к комфорту. короче там целая наука
Хорошо, а зачем тогда в китайской ГУ в сервисном меню выбор протокола CAN ? canbus декодер из can выдает аналоговые сигналы на управляющие аналоговые входы магнитолы. canrx и cantx у меня соединены с canl и canh автомобиля.
Там целая куча производителей канбасов со своими протоколами общения с ГУ, я выбрал наиболее простой и функциональный. Под него и писал драйвер. Тем более при выборе канбаса звук идёт не на пины колонок, а на тюльпаны.
А какой электроникой хочется рулить с головы? Климатом?
Багажник, подогрев сидений… это для начала) А в перспективе — газ, тормоз и селектор кпп :D
Ого, вот это ЖИР!)) Очень интересная вещь, спасибо!)
Больше всё таки интересует управление именно по CAN. Зачем-то же есть CAN в магнитоле!
Вот, опять же, после долгого и упроного гугления, допер, что canbus адаптер превращает can_l и can_h автомобиля в нужные нам rx и tx, т.е. преобразовывает can в uart, а can_tx и can_rx это uart, а не can. И с uart магнитола уже может работать как с обычным ком-портом. Я прав?
В уарт не превращает, увы. Если хотите преобразовать кан в уарт нужен будет промежуточный МК = например STM32F103 или PIC18F258
тогда что же делает декодер?) если у него входы can_h, can_l а выходы can_tx и can_rx?
Так вы прочитайте про форматы передачи данных по UART и по CAN. Уарт на железном уровне 1) стартовый бит 2) энное кол-во бит данных 3) парити если есть и включен 4) стоп бит
Кан :) же устроен несколько подругому и никак уарт не увидит посылок кана после трансивера.
Так что же тогда делает canbus адаптер c данными?)
Как раз отсюда эти вопросы и появились) Получается, всё таки само назначение адаптера — преобразовать can в uart) Благодарю!
ВОПРОС:
Вот есть у нас в автомобиле CAN-шина. И есть у нас китайская магнитола на андроиде, в которой тоже есть CAN-шина. Так вот, нигде не могу найти, как с помощью этой магнитолы получить доступ к шине?
= (РАВНО) ответ:
Вообще задумка — написать программу на эту магнитолу и управлять электроникой авто через неё.
Пишите, в чём проблема.
ну надо понимать, что это за магнитола такая с can-шиной, я не слышал о таких, название модели в студию, а то о чем то виртуальном разговор идет
Если совсем кратко, то CAN адаптер предназначен для облегчения интеграции андроид магнитолы в автомобиль, он выделяет из шины MS CAN автомобиля цифровые сигналы и передает их в андроид-магнитолу. При отсутсвии CAN адаптера необходимо искать самостоятельно в штатной проводке нужные аналоговые сигналы.
Основные функции CAN адаптера это формирование четырех выходных сигналов:
— "Зажигание"(IGN) или "Аккумулятор"(ACC), уровнем 12 Вольт, для включения андроид-магнитолы
— "Подсветка"(ILLUM), уровнем 12 Вольт, для изменения подсветки в андроид-магнитоле
— "Парковочный тормоз"(PARK), уровнем GND, для информирования андроид-магнитолы о нахождении автомобиля в состоянии поездки/парковки.
— "Задняя передача"(REAR), уровнем 12 Вольт, для переключения андроид-магнитолы на камеру заднего вида и включения питания для камеры заднего вида.
Дополнительные функции CAN адаптера это отображение в андроид магнитоле состояний внутренних узлов автомобиля и управление некоторыми из них через информационную линию RX/TX(uart):
— отображение состояния парковочных датчиков
— отображение положения руля в виде динамической разметки при заднем ходе
— отображение состояния открытых дверей
— отображение состояния не пристегнутых пассажиров и водителя
— установка времени в автомобиле
— отображение режима климат контроля и управление им;
— трансляция нажатий кнопок на руле в андроид-магнитолу
— отображение уровня топлива
— доступ к трип-компьютеру
— управление штатным усилителем
Теперь подробнее о выходных сигналах формируемых CAN адаптером. Для любой андроид-магнитолы кроме питания, нужен как минимум еще один дополнительный сигнал — это сигнал "Зажигание"(IGN). Сигнал зажигания(IGN) необходим для андроид-магнитолы, чтобы магнитола включалась или выходила из спящего режима при запуске автомобиля и выключалась или засыпала при глушении автомобиля.
Сейчас наверное в большинстве андроид-магнитол есть спящий режим, с ним андроид-магнитола готова к работе уже через пару секунд после запуска автомобиля, иначе при каждом запуске автомобиля андроид в магнитоле будет загружаться несколько минут. Но у спящего режима магнитолы есть один минус — это потребление тока порядка 10-20мА в спящем режиме, и зимой или при малых пробегах это может быть критично.
Так например в моей андроид-магнитоле, купленной в 2019 году не было спящего режима, через несколько месяцев после покупки, производитель с обновлением прошивки в андроид-магнитоле добавил функцию спящего режима. Помня о потреблении магнитолы в спящем режиме, я на зиму отключаю спящий режим в магнитоле, а по приходу тепла снова включаю спящий режим, отключение/включение спящего режима в моей магнитоле занимает пару минут.
Необязательный сигнал "Подсветка"(ILLUM) используется для подсветки кнопок андроид-магнитолы или для уменьшения яркости экран магнитолы ночью и увеличения яркости экрана днем.
Необязательный сигнал "Задняя передача"(REAR) используется для переключения экрана магнитолы на камеру и подключения питания к камере заднего вида, в противном случае придется тянуть от задних фонарей, это во первых неудобно, а во вторых на некоторых машинах, с импульсным контролем сгоревшей лампочки, такое питание для камеры будет создавать помехи в картинке с камеры.
Необязательный сигнал "Парковочный тормоз"(PARK) используется для разграничения некоторой функциональности в движении и на парковке, например для запрета просмотра видео в движении.
Часть андроид магнитол для конкретных моделей автомобилей продается уже с CAN адаптером и со всей необходимой проводкой и разъемами, что конечно же очень удобно. Моя же андроид-магнитола продавалась без CAN адаптера, но этот недостаток компенсировался стоимостью магнитолы в 50$. Впрочем для своего автомобиля Freelander2, я не смог найти CAN адаптер ни пару лет назад ни сейчас. Но с помощью самодельного CAN адаптера я смог сделать отображение датчиков штатного парктроника на андроид магнитоле, об этом подробне в заметке о подключении штатных парктроников к андроид магнитоле. Благодаря этой заметке несколько человек смогли сделать отображение парктроников в своих автомобилях Freelander2, в том числе и в рестайловом Freelander2.
Прошла осень, зима, и затем весна, коллега периодически спрашивал, когда уже будем обновлять прошивку в адаптере, но времени все так же не было этим заниматься. Но по наступлению лета, за счет доставки обедов на работу, появилось свободное время, которое раньше тратилось на обеденные поездки, благодаря этому за несколько дней с помощью мультиметра плата адаптера была исследована и в результате нарисована схема адаптера OD-VOLVO-02.
В целом на схеме нет ничего лишнего, функционал схемы совпадает с общим описанием CAN адаптера, это 4 выходных сигнала(IGN, ILLUM, BRAKE, REAR) и последовательный порт(RX/TX) для информационной связи с андроид-магнитолой. Обозначения и номиналы элементов на схеме совпадают с надписями печатной плате. Для программирования микроконтроллера через интерфейс SWDIO/SWCLK на плате есть специальный внутренний разъем CON2. Для обновления прошивки можно использовать любой SWDIO/SWCLK программатор, я перепрошивал микроконтроллер на плате с помощью китайского ST-LinkV2 с али, и программы openocd.
Распиновка сигналов на внешнем разъеме CAN адаптера OD-VOLVO-02 точно совпала, с найденной в сети распиновкой других китайских CAN адаптеров на 16 выводов, поэтому можно предположить что различные китайские производители CAN адаптеров делаю физически совместимые адаптеры, что в дальнейшем потвердилось.
По готовой схеме устройства написать прошивку уже было только вопросом времени. Процесс написания прошивки был итеративным и чередовался с тестами на автомобиле во время обеденных перерывов. На урале это лето выдалось теплым и было приятно провести немного времени на улице с автомобилем — немного переключиться на другое занятие от основной работы.
Помимо устранения недостатков в оригинальной прошивке, коллега попросил добавить дополнительный функционал:
— задержку снятия питания с камеры, при переключении из R в D
— управление уровнем подсветки экрана андроид-магнитолы.
В последствии этот функционал был реализован и сделан настраиваемым.
Для удобства прошивки и отладки CAN адаптера на автомобиле была сделана проводка для подключения адаптера в разъем OBD2 автомобиля. Через OBD2 разъем CAN адаптер получает питание и доступ к шине MS CAN, линия RX/TX адаптера выведена на переходник usb2com. К переходнику usb2com уже можно подключить ноутбук или телефон с андроидом для контроля работы адаптера. Если необходимо было проверить функционал CAN адаптера, то адаптер подключался к магнитоле, если надо было прошить, наладить или настроить адаптер, то адаптер подключался к разъему OBD2 автомобиля.
На следующем скриншоте показан отладочный интерфейс CAN адаптера
Адаптер извлекает из шины MS CAN данные в режиме прослушки, не посылая никаких запросов в электронные блоки автомобиля, поэтому информацию которою он может извлечь из шины CAN зависит от автомобиля, так в Freelander2 в шине MS CAN не передается информация о положении руля и нажатия кнопок, а в шине MS CAN автомобиля XC90 не передается VIN код автомобиля.
На втором скриншоте виден шаблон(зеленый и бирюзовый цвета) заданный при записи: 3 быстрых изменения уровня подсветки, пауза, 3 быстрых изменения уровня подсветки, пауза, 3 медленных изменения уровня подсветки.
В прошивке эмулируются 4 различных протокола для взаимодействия с андроид-магнитолой:
— Raise VW(PQ)
— Raise VW(MQB)
— Oudi BMW(Nbt Evo
— HiWorld VW(MQB)
При выборе типа подключенного адаптера в андроид магнитоле предлагается список из десятка различных производителей адаптеров, на али чаще всего встречающиеся адаптеры от Raise и HiWorld. Наибольший функционал по отображению узлов автомобиля в андроид магнитоле у марки Volkswagen и адаптеров Raise и HiWorld, поэтому эти протоколы были выбраны для эмуляции.
Но китайцы это новые индусы, поддержка адаптеров в магнитоле у них местами кривая, да и не хочется ограничиваться тем функционалом что есть в магнитоле, поэтому в своем автомобиле я постепенно отключаю эмуляцию CAN адаптера в плате usb2most и делаю отрисовку нужных мне вещей через свое приложение.
Помимо вышесказанного коллега ездил на автомобиле, тестировал работу CAN адаптера и выявлял замечания по его работе, для решения этих замечаний мне нужно было время и сам адаптер, но также и коллеге нужен был адаптер, получалось так, что адаптер в одно и тоже время нужен был и мне и ему. Покупать такой же второй CAN адаптер VOLVO-OD-O2 смысла не было, но у меня был адаптер для марки VW, который я приобрел чуть позднее покупки своей магнитолы, ради удовлетворения любопытства, что у него внутри. Внутри у него оказался процессор с надписью PocketLink, тогда в 2019, я не смог перепрошить этот адаптер, т.к. до конца не понимал, что это за процессор, да сейчас надпись на чипе PocketLink не даст информации о том что находится внутри этого чипа.
Видимо потратив чуть больше времени чем ранее мне удалось понять, что что внутри находится процессор NUC131, и для него свободно доступен BSP на гитхабе. Далее опять же с помощью мультиметра была проанализирована плата и нарисована схема в KiCAD этого адаптера. Китайцы сэкономили на шелкографии поэтому обозначения на схеме сделаны произвольными, но номиналы совпадают. По схеме с помощью примеров из BSP была добавлена поддержка этой платы в прошивке. Прошивка стала поддерживать уже две платы и можно было спокойно меняться адаптером с коллегой при очередном обновлении тестовой прошивки.
Схема адаптера VW_NC03 немного попроще OD-VOLVO-02, но основной функционал тот же: 4-е выходных сигнала и последовательный порт.
В дальнейшем во время экспериментов плату из CAN адаптера VW_NC03 я окирпичил — больше не смог перепрошить, поэтому на али был заказан еще один адаптер VW_NC03, но внутри него уже оказалась плата VW_NCD01 датируемая 2021 годом, а плата VW_NC03 была с датой 2017 года. Анализ с помощью мультиметра показал, что эта плата по схемотехнике почти полностью совместима с VW_NC03, но процессор в ней уже другой. Отладка через openocd показала, что процессор внутри был явно Nuvoton, имел схожие с NUC131 идентификаторы, и как оказалось для него подходит прошивка для платы VW_NC03, поэтому отдельной схемы или прошивки я не стал для него создавать. Но формально можно сказать, что прошивка поддерживает 3 различных адаптера.
В целом китайские процессоры в китайских адаптерах оказались не хуже и не лучше тех же STM32, внутри у них такое же армовское ядро cortex-m как и в STM32, поэтому могу рекомендовать такие адаптеры для каких-либо автомобильных поделок. Самостоятельная сборка подобного устройства на рассыпных элементах или из нескольких платок получится не дешевле, а тут готовое устройство c 4 программируемыми выходами и в корпусе.
Кто захочет приобрести на али такие адаптеры, то адаптер VW_NC03 можно найти по словам canbus box volkswagen, и далее выбирать адаптер с надписью HW:VW-NC-003. О обычно у продавца можно приобрести либо только адаптер или комплект из адаптера с проводкой, стоимость адаптера начинается от 7$.
По словам "volvo xc90 canbus" или "OD VOLVO 02" на али можно найти CAN адаптер для Volvo также с проводкой или без.
А комплект проводки от XC90 подходит по разъемам для Freelander2, поэтому владельцы Freelander2 в комплектации с шиной MOST смогут использовать такую проводку при установке андроид-магнитол в своих автомобилях. С разъемами из этой проводки можно акуратно подключиться в штатную проводку Freelander2 "разъем в разъем", не разрушая штатную проводку. На сером разъеме есть AUX и сигнал для усилителя FM радио, который многие используют вместо сигнала IGN. На зеленом разъеме есть шина MS CAN для подключения CAN адаптера и сигнал с резистивного делителя кнопок руля.
Данные пользователя в виртуальной машине
Login:user
Password:user
Краткая подсказка по командам в линуксе:
mc — файловый менеджер
cd canbox — переход в каталог с исходниками canbox
git pull — получить обновления исходников canbox с гитхаба
make clean — очистить текущую сборку прошивки
make — собрать новую сборку прошивки
make flash_vw_nc03 — прошить прошивку в плату WV-NC-003
На скриншоте пример как выглядит процесс прошивки
По итогу достаточного длинного изложения:
1) Коллега работой адаптера доволен, но уже закидывает вопросики про чип двигателя )
2) Прошивка поддерживает 2(3) CAN адаптера.
3) Потребление адаптера OD-VOLVO-02 в спящем режиме 4мА(с штатной прошивкой 20мА)
4) Потребление адаптера VW_NC03 в спящем режиме 1мА(с штатной прошивкой 1мА)
5) Прошивка поддерживает 2(3) автомобиля(рестайловый Frelander2 — с точки зрения шины CAN это другой автомобиль)
6) Прошивка поддерживает 4 протокола для связи с андроид-магнитолой
Вчера пришла посылка с CANBUS адаптером, для моей новенькой 2din android магнитолы, которая не так давно заняла место штатной RD-4.
Ждал я его с нетерпением, поэтому сразу направился в машину для его инсталляции.
Подключение адаптера простое, как говорится "pin to pin". Дальше прописываем адаптер в настройках магнитолы, так как автоматически он не определяется. Но и тут проблем не возникло.
Постараюсь кратенько описать этапы настройки CANBUS:
1. Кабель с адаптером подключены к магнитоле, все разъемы на своих местах (перепутать сложно);
2. Заходим в настройки самой android магнитолы;
3. Выбираем пункт "настройки разработчика";
4. Вываливается окно, где необходимо ввести пароль (думаю пароль у всех одинаковый 8888);
5. Проваливаемся в сами настройки (здесь будут все настройки на английском);
6. Кликаем на "Protocol settings";
7. Выбираем тип CAN и марку автомобиля;
В моем случае тип CAN — RAISE, марка авто — PEUGEOT;
8. Поверх появляется окно, в котором необходимо выбрать модель авто;
В данном случае все работает корректно — управление мультимедиа с подрулевого джойстика и отображение треков, и радио на верхнем экране БК, но на джойстике не задействована кнопка, та что с торца. Кстати, флешка определяется как CD.
9. Жмем "save" и выходим из настроек;
10. Проверяем все ли работает. Если все ровно, пользуемся.
Итак, что мы имеет после установки CANBUS адаптера. У нас работает управление мультимедиа с подрулевого, работает отображение треков и радио на экране БК, появляется управление настройками БК с экрана магнитолы, отображается открытие дверей на экране магнитолы. Кроме того, при включении фар, включается подсветка сенсорных кнопок управления магнитолой, а яркость экрана приглушается и наоборот.
Теперь при включении задней передачи "R", отключается звук и экран магнитолы переключается на камеру заднего хода. Камеру еще не поставил, поэтому у меня черный экран с разметкой.
Считаю это тоже плюсом, т.к. пропала необходимость тянуть сигнальный провод от камеры к магнитоле. Звук при включении камеры заднего хода можно вернуть. Заходим в настройки магнитолы, далее "другие настройки", выбираем "настройки ЗХ" и "Вкл звук". Проверяем, все работает.
Мобильное приложение VAG Virtual Cockpit
Я продолжаю изучать CAN шину авто. В предыдущих статьях я голосом открывал окна в машине и собирал виртуальную панель приборов на RPi. Теперь я разрабатываю мобильное приложение VAG Virtual Cockpit, которое должно полностью заменить приборную панель любой модели VW/Audi/Skoda/Seat. Работает оно так: телефон подключается к ELM327 адаптеру по Wi-Fi или Bluetooth и отправляет диагностические запросы в CAN шину, в ответ получает информацию о датчиках.
По ходу разработки мобильного приложения пришлось узнать, что разные электронные блоки управления (двигателя, трансмиссии, приборной панели и др.) подключенные к CAN шине могут использовать разные протоколы для диагностики, а именно UDS и KWP2000 в обертке из VW Transport Protocol 2.0.
Программный сниффер VCDS
Программный сниффер VCDS: CAN-Sniffer
Чтобы узнать по какому протоколу общаются электронные блоки я использовал специальную версию VCDS с программным сниффером в комплекте. В этот раз никаких железных снифферов на Arduino или RPi не пришлось изобретать. С помощью CAN-Sniffer можно подсмотреть общение между VCDS и автомобилем, чтобы затем телефон мог прикинуться диагностической утилитой и отправлять те же самые запросы.
Я собрал некоторую статистику по использованию диагностических протоколов на разных моделях автомобилей:
VW/Skoda/Seat (2006-2012) - приборная панель UDS. Двигатель и трансмиссия VW TP 2.0
Audi (2006-2012) - приборная панель VW TP 2.0. Двигатель UDS. Трансмиссия VW TP 2.0
VW/Skoda/Seat/Audi (2012-2021) - везде UDS
Протокол UDS
Unified Diagnostic Services (UDS) - это диагностический протокол, используемый в электронных блоках управления (ЭБУ) автомобильной электроники. Протокол описан в стандарте ISO 14229-1 и является производным от стандарта ISO 14230-3 (KWP2000) и ныне устаревшего стандарта ISO 15765-3 (Diagnostic Communication over Controller Area Network (DoCAN)). Более подробно в википедии.
Диагностические данные от двигателя по протоколу UDS (Skoda Octavia A7)
Разбор UDS пакета в формате Single Frame
Пример запроса и ответа температуры моторного масла:
Запрос температуры моторного масла:
7E0 - Адрес назначения (ЭБУ двигателя)
Байт 0 (0x03) - Размер данных (3 байта)
Байт 1 (0x22) - SID идентификатор сервиса (запрос текущих параметров)
Байт 2, 3 (0x11 0xBD) - PID идентификатор параметра (температура моторного масла)
Байт 4, 5, 6, 7 (0x55) - Заполнитель до 8 байт
Ответ температуры моторного масла:
7E8 - Адрес источника (Диагностический прибор)
Байт 0 (0x05) - Размер данных (5 байт)
Байт 1 (0x62) - Положительный ответ, такой SID существует. 0x22 + 0x40 = 0x62. (0x7F) - отрицательный ответ
Байт 2, 3 (0x11 0xBD) - PID идентификатор параметра (температура моторного масла)
Байт 4, 5 (0x0B 0x74) - значение температуры моторного масла (20.1 °C формулу пока что не смог подобрать)
Байт 6, 7 (0x55) - Заполнитель до 8 байт
Первая версия мобильного приложения VAG Virtual Cockpit умела подключаться только к приборной панели по UDS.
VAG Virtual Cockpit - экран с данными от приборной панели по протоколу UDS
VW Transport Protocol 2.0
Volkswagen Transport Protocol 2.0 используется в качестве транспортного уровня, а данные передаются в формате KWP2000. Keyword Protocol 2000 - это протокол для бортовой диагностики автомобиля стандартизированный как ISO 14230. Прикладной уровень описан в стандарте ISO 14230-3. Более подробно в википедии.
Диагностические данные от двигателя по протоколу KWP2000 (Skoda Octavia A5)
Разбор протокола VW TP 2.0 на примере подключения к первой группе двигателя:
200 01 C0 00 10 00 03 01
Настраиваем канал с двигателем. Байт 0: 0x01 - двигатель, 0x02 - трансмиссия. Байт 5,4: 0x300 - адрес источника
201 00 D0 00 03 40 07 01
Получили положительный ответ. Байт 5,4: 0x740 - к двигателю обращаемся по этому адресу
740 A0 0F 8A FF 32 FF
Настраиваем ЭБУ на отправку сразу 16 пакетов и выставляем временные параметры
300 A1 0F 8A FF 4A FF
Получили положительный ответ
740 10 00 02 10 89
Отправляем команду KWP2000 startDiagnosticSession. Байт 0: 0x10 = 0b0001 - последняя строка данных + 0x0 счетчик отправляемых пакетов 0 (0x0 - 0xF)
Получили первый ACK
300 10 00 02 50 89
Получили положительный ответ. Байт 0: 0x10 - cчетчик принимаемых пакетов 0
Мы отправили первый ACK, что получили ответ
740 11 00 02 21 01
Делаем запрос. Байт 0: 0x11 - счетчик отправляемых пакетов 1. Байт 3: 0x21 - запрос параметров. Байт 4: 0x01 - из группы 1
Получили второй ACK
300 22 00 1A 61 01 01 C8 13
Байт 0: 0x22 - 0b0010 (не последняя строка данных) + 0x02 (cчетчик принимаемых пакетов 2). Байт 1,2: 0x00 0x1A длина 26 байт. Байт 3,4: 0x61 0x01 - положительный ответ на команду запроса параметров 0x21+0x40=0x61 из 0x1 группы. Байт 5: 0х01 - Запрос RPM (соответсвует протоколу KW1281). Байт 6,7: (0xC8 * 0x13)/5 = 760 RPM (формула соответствует протоколу KW1281)
300 23 05 0A 99 14 32 86 10
Байт 1: 0x05 - запрос ОЖ. Байт 2,3: (0x0A * 0x99)/26 = 57.0 C. Байт 4: 0x14 = запрос лямбда контроль %. Байт 5,6: 0x32*0x86; Байт 7: 0х10 - двоичная настройка
300 24 FF BE 25 00 00 25 00
0x25 0x00 x00 - Заполнитель, до 8 параметров
300 15 00 25 00 00 25 00 00
Байт 0: 0x15 - 0b0001 (последняя строка данных) + 0x5 (счетчик принимаемых пакетов 5)
Отправляем ACK. Прибывляем к нашему предыдущему ACK количество полученных пакетов 0xB1 + 0x4 = 0xB5
Запрос KeepAlive, что мы еще на связи
740 A1 0F 8A FF 4A FF
Мы разрываем связь
ЭБУ в ответ тоже разрывает связь
Во второй версии мобильного приложения VAG Virtual Cockpit появилась возможность диагностировать двигатель и трансмиссию по протоколу VW TP 2.0.
VAG Virtual Cockpit - экран с данными от двигателя по протоколу VW TP 2.0
Диагностический адаптер ELM327
Для меня некоторое время было вопросом, как получить данные из CAN шины и передать на телефон. Можно было бы разработать собственный шлюз с Wi-Fi или Bluetooth, как это делают производители сигнализаций, например Starline. Но изучив документацию на популярный автомобильный сканер ELM327 понял, что его можно настроить с помощью AT команд на доступ к CAN шине.
Копия диагностического сканера ELM327 Не все ELM327 одинаково полезны
Оригинальный ELM327 от компании elmelectronics стоит порядка 50$, в России я таких не встречал в продаже. У нас продаются только китайские копии/подделки, разного качества и цены 10-30$. Бывают полноценные копии, которые поддерживают все протоколы, а бывают и те которые умеют отвечать только на несколько команд, остальные игнорируют, такие адаптеры не имеют доступ к CAN шине. Я например пользуюсь копией Viecar BLE 4.0, который поддерживает 100% всех функций оригинала.
Последовательность ELM327 AT команд для работы с UDS по CAN шине:
Для работы с протоколом KWP2000 через ELM327 нужно только указать адреса назначения и источника.
Последовательность ELM327 AT команд для работы с VW TP 2.0 по CAN шине:
Мобильное приложение VAG Virtual Cockpit
Для разработки мобильного приложения подключаемого к автомобилю требовалось:
Сниффером собрать трафик от диагностической утилиты VCDS
Изучить работу протоколов UDS, VW TP 2.0, KWP2000
Настроить диагностический сканер ELM327 на работу с UDS и VW TP 2.0
Изучить новый для меня язык программирования Swift
В итоге получилось приложение, которое сочетает в себе функции отображения точных данных панели приборов и диагностика основных параметров двигателя и трансмиссии.
Пару слов про точность данных. Штатная панель приборов не точно показывает скорость - завышает показания на 5-10 км/ч, стрелка охлаждающей жидкости всегда на 90 °C, хотя реальная температура может быть 80 - 110 °C, стрелка уровня топлива до середины идет медленно, хотя топлива уже меньше половины и при нуле на самом деле топливо еще есть в баке. Производитель это делает для удобства и безопасности водителя.
На данный момент приложение показывает следующие параметры:
Приборная панель
Двигатель
Трансмиссия (температура)
1) Какая дверь открыта
2) Скорость
3) Обороты
4) Температура масла
5) Температура ОЖ
6) Топливо в баке в л.
7) Запас хода в км.
8) Средний расход
9) Время в машине
10) Пробег
11) Температура за бортом
1) Обороты
2) Массовый расход воздуха
3) Температура забора воздуха
4) Температура выхлопа (рассчитанная)
5) Критический уровень масла
6) Уровень масла
7) Наддув турбины (реальный)
8) Наддув турбины (ожидаемый)
9) Пропуски зажигания в цилиндрах
10) Углы откатов зажигания в цилиндрах
1) ATF AISIN (G93)
2) DSG6 (G93)
3) Блок управления DSG6 (G510)
4) Масло диска сцепления DSG6 (G509)
5) Мехатроник DSG7 (G510)
6) Процессор DSG7
7) Диск сцепления DSG7
Я стремлюсь чтобы приложение поддерживало как можно больше моделей автомобилей. Пока что поддерживаются производители: Volkswagen, Skoda, Seat, Audi. На разных комплектациях могут отображаться не все параметры, но это поправимо.
Сейчас я провожу тестирование версии 3.0. Приложение доступно только на iOS, после релиза 3.0 перейду к разработке версии для Android.
В первой статье «Хакаем CAN шину авто для голосового управления» я подключался непосредственно к CAN шине Comfort в двери своего авто и исследовал пролетающий траффик, это позволило определить команды управления стеклоподъемниками, центральным замком и др.
В этой статье я расскажу как собрать свою уникальную виртуальную или цифровую панель приборов и получить данные с любых датчиков в автомобилях группы VAG (Volkswagen, Audi, Seat, Skoda).
Мною был собран новый CAN сниффер и CAN шилд для Raspberry Pi на базе модуля MCP2515 TJA1050 Niren, полученные с их помощью данные я применил в разработке цифровой панели приборов с использованием 7″ дисплея для Raspberry Pi. Помимо простого отображения информации цифровая панель реагирует на кнопки подрулевого переключателя и другие события в машине.
В качестве фреймворка для рисования приборов отлично подошел Kivy для Python. Работает без Иксов и для вывода графики использует GL.
- CAN сниффер из Arduino Uno
- Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
- Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
- Софт панели приборов на Python и Kivy (UI framework)
- Видео работы цифровой панели приборов на базе Raspberry Pi
CAN сниффер из Arduino Uno
Чтобы послушать, что отправляет VCDS в CAN шину я собрал сниффер на макетке из Arduino и модуля MCP2515 TJA1050 Niren.
Схема подключения следующая:
CanHackerV2 позволяет смотреть пролетающий трафик, записывать и проигрывать команды с заданным интервалом, что очень сильно помогает в анализе данных.
Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
Программно-аппаратный сканер VCDS предназначен для диагностики электронных систем управления, устанавливаемых на автомобилях группы VAG. Доступ ко всем системам: двигатель, ACP, АБС, климат-контроль, кузовая электроника и т.п., считывание и стирание кодов неисправностей, вывод текущих параметров, активация, базовые установки, адаптация, кодирование и т.п.
Подключив сниффер к линиям CAN_L и CAN_H в диагностическом шнурке я смог увидеть какие запросы делает VCDS и что отвечает авто.
Особенность авто группы VAG в том, что OBD2 разъем подключен к CAN шине через шлюз и шлюз не пропускает весь гуляющий по сети трафик, т.е. подключившись в OBD2 разъем сниффером вы ничего не увидите. Чтобы получить данные в OBD2 разъёме нужно отправлять шлюзу специальные запросы. Эти запросы и ответы видно при прослушивании трафика от VCDS. Например вот так можно получить пробег.
В VCDS можно получить информацию почти с любого датчика в машине. Меня в первую очередь интересовала информация, которой вообще нет на моей приборке, это:
- температура масла
- какая именно дверь открыта
Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
В качестве аппаратной части я выбрал Raspberry Pi. Была идея использовать Android планшет, но показалось, что на Raspberry Pi будет проще и быстрее. В итоге докупил официальный 7″ дисплей, и сделал CAN шилд из модуля TJA1050 Niren.
OBD2 штекер использовал от старого ELM327 адаптера.
Используются контакты: CAN_L, CAN_H, +12, GND.
Тесты в машине прошли успешно и теперь нужно было все собрать. Плату дисплея, Raspberry Pi и блок питания разместил на куске черного пластика, очень удачно подобрал пластмассовые втулки, с ними ничего не болтается и надежно закреплено.
Местом установки выбрал бардачок на торпедо, которым я не пользуюсь. По примеркам в него как раз помещается весь бутерброд.
Напильником довел лист черного пластика до размера крышки бардачка, к нему прикрепил бутерброд и дисплей. Для прототипа сойдет, а 3D модель с крышкой для дисплея и всеми нужными крепежами уже в разработке.
Софт панели приборов на Python и Kivy (UI framework)
Параллельно со сборкой самой панели приборов я вел разработку приложения для отображения информации с датчиков. В самом начале я не планировал какой либо дизайн.
Первая версия панели приборов
По мере разработки решил визуализировать данные более наглядно. Хотел гоночный дизайн, а получилось, что-то в стиле 80-х.
Вторая версия панели приборов
Продолжив поиски более современного дизайна я обратил внимание какие цифровые приборки делают автопроизводители и постарался сделать что-то похожее.
Третья версия панели приборов
Ранее, я никогда не разрабатывал графические приложения под Linux поэтому не знал с чего начать. Вариант на вебе простой в разработке, но слишком много лишних компонентов: иксы, браузер, nodejs, хотелось быстрой загрузки. Попробовав Qt PySide2 я понял, что это займет у меня много времени, т.к. мало опыта. Остановился на Kivy — графический фреймворк для Python, простой в понимании с полной библиотекой графических элементов и дающий возможность быстро создать мобильный интерфейс.
Kivy позволяет запускать приложение без Иксов, прямо из консоли, в качестве рендера используется OpenGL. Благодаря этому полная загрузка системы может происходить за 10 секунд.
Алгоритм работы следующий, используется 3 потока:
- В главном потоке работаем с графическими элементы (спидометр, тахометр, часы, температуры и др) на экране
- Во втором потоке каждые 5 мс делаем опрос следующего датчика
- В третьем потоке слушаем CAN шину, получив ответ парсим его и обновляем соответствующий графический элемент
Проект цифровой панель приборов открытый. Рад буду предложениям и комментариям!
Читайте также: