Расбери пай в машину
Мультимедиа в машину из Raspberry Pi 4 (4 GB)
Подарили мне новенькую малинку на Новый Год 🙂
Решил сделать из нее бортовой комп на Ферозу, ютубчик на ней не глючит как было на 3-м поколении. Думаю получится отличная голова для дальнейших доработок моего джипа.
Корпус буду делать из прозрачного листа полистирола.
Есть у меня тачскриновый 7″ дисплей Waveshare 1024×600. Обклеил его рамкой чтобы крепить к нему остальную часть корпуса.
Затем прикрутил к дисплею малинку.
На фотке видно что HDMI кабель у меня ручной работы 🙂 Укоротил 3 метровый провод и сделал из него компактный проводок для малинки.
К дисплею еще нужен microUSB провод чтобы работал тачскрин. Решил тоже спаять кастомный чтобы не торчал по бокам корпуса и хорошо сгибался.
Начнем с USB части, которая пойдет в малинку 🙂
Со стороной microUSB мне повезло больше, была заготовочка под пайку.
Припаял проводки к microUSB части.
Не судите строго за качество пайки, с паяльниками мне не везет 🙁 то припой к жалу не липнет, то само жало плавится.
Теперь провод можно согнуть у основания и он не будет торчать из корпуса.
Паяю вторую часть, которая будет в малинке.
Получилось, провод не торчит за пределами корпуса.
Первое включение 🙂 Операционка загрузилась, ютубчик работает как надо. Получился практически полноценный линукс в маленькой коробочке. Тачскрин тоже отлично работает.
Пока жду преобразователь питания в машину на 5V 3A от китайцев (HW-273 KIS3R33S), буду отлаживать системку дома. В планах добавить еще плату Arduino mega для комфортной работы с различными датчиками и прикрутить к ней GPS.
CarPC на Raspberry Pi. Часть 1.
Монитор с камерой обгона ещё не доделал, но тут пришли комплектующие для следующего проекта, и стало очень интересно попробовать запустить.
Попытками, удачами и не очень, решено делиться.
Коментарии, подсказки, конструктивная критика приветствуется.
1. Сенсорный 7ми дюймовый экран. 1, 2, 3, 4 пункты на фото
Для отображения и управления
Разрешение 800*480 (для авто мне хватит, не работать же на нём)
Имеются готовые к работе входы — HDMI, VGA, вход типа колокольчик.
Переключаются кнопкой на панели(4).
Есть русское меню(правда перевод так себе, но тоже не критично)Настройки типа яркость контрастность цветовая температура, положение и т.д.
(1, 2, 3, 4 пункты на фото брал в комплекте.)
в комплекте кабель питания есть, а блока питания нет.
Я подключил к зарядке от телефона. От малины включаться не хочет, нужно отдельно питать.
2. Малина (5 пункт на фото)
Raspberry Pi 2 model B+
Краткие характеристики:
Проц — 4-ядерный ARM Cortex-A7
ОЗУ — 1 Гб
Разъемы: 4хUSB, LAN, HDMI, AV выход, питание микро ЮСБ, 40 пинов GPIO. и др.
Операционка ставиться на микро сд карту,
выбор ОС в принципе широк, две официально поддерживаемые производителем NOOBS и Raspbian(последняя на основе линукса), а так же 2 версии Ubuntu, виндовс 10, OSMC, OpenElec, Pinet, RiscOS. (Подробней про выбор ОС чуть позже)
Питание — вход микро юсб, 5в, рекомендуется не менее 2А.
Я вместе с малинкой заказал необходимый блок питания с проводом с кнопкой.
3. ЮСБ Хаб (6 пункт на фото)
4 порта юсб
Возможность подключить доп питание. Что мне и необходимо сделать. Так как ЮСБ хард не заработал.
Также подключены:
беспроводная мышь,
Wi-fi свисток, (заработал с коробки, т.е без каких либо установок и настроек. Выбрал необходимую сеть, ввел пароль и вуаля.
Блютус свисток, (с коробки работать не захотел) позже буду разбираться.
Юсб хаб, мышь, провода, карты памяти были в наличии.
ОС
Изначально выбор пал на OSMC и OpenElec. Это две версии ОС используемых в качестве медиацентра.
Первую запустить так и не удалось.(
Вторая заработала сразу, при подключении к интернету самостоятельно перевелась на русский и установила время и дату.
Установил приложение ютуб, посмотрел видео, всё работает.
НО! Сенсор работает некорректно! А именно горизонтальные движения пальцем двигают курсор по вертикали, а вертикальные движения двигают горизонтально. И не по всей поверхности сенсора. Калибровку сенсора так и не нашел…
Решил поставить Виндовс10. Начал процесс записи образа на карту. Никак(
Погуглил и выяснил что, установить без заморочек можно только из виндовс10. А с семерки нужно немного поковыряться со скачиванием дополнительных образов, разархивированием, заменой файлов и т.д.
Плюнул на окна.
Установил Raspbian.(на основе linux debian) На ней пока и остановился.
Сенсор заработал на всей плоскости, но так же зеркально.(Мне тут подсказали, может соседи китайцы неправильно стекло приклеили) Буду разбираться позже. Скачал дрова сегодня для этого экрана. Вечером возможно продолжу ковыряния.
Что нужно сделать:
1.Докупить ЦАП, (желаю 5ти канальный да чтоб юсб, нашел в принципе на али, но пока ещё думаю)
2.Докупить GPS модуль.
3.Докупить ФМ модуль.
4.Продумать питание всей системы. Чтоб включалось одной кнопкой, и выключалось тоже, при этом ОС чтобы корректно завершала работу.
5.Продумать дизайн и изготовить лицевую панель в авто. (но это всё гораздо позднее)
6.Докупить кнопки и каким то образом заставить их работать.(хочу чтоб помимо сенсора были физические кнопки, такие как: воспроизвести, пауза, след-предыдущий трек, запуск медиа плеера, навигации, радио, ОБД сканера. И обязательно крутилка для громкости!
Сначала была мысль упаковать всё это в 2дин короб, но передумал, ибо неудобно это. Доставать всю магнитолу чтобы переустановить ОС. На лицевой панели планирую разместить экран, кнопки, может быть ЮСБ. А мозги уложить в коробочку и разместить в бардачке. Есть мысль добавить в эту коробочку GPS трекер(в целях безопасности и отслеживания в случае угона.
Raspberry pi 3b в штатную мультимедиа BMW, установка, подключение, функционал
Всем привет! Сегодня очень интересный пост для тех, кому ну не хватает функциональности штатной 16:9 с горой древних дорогущих сыпящихся блоков, и вы хотите это всё выкинуть и вкорячить китайскую голову, пожертвовав аутентичным интерьером старой BMW. Не спешите, в качестве альтернативы предлагаю дооснаститься hand-made устройством на базе одноплатного компьютера Raspberry pi 3B (переводится как малина), на который существует операционная система BMWRaspControl с аддоном IBusCommunicator.
Итак, мой вариант сборки выглядит следующим образом
Все компоненты можно заказать на алиэкспрессе, кроме флешки BMW IBUS Interface. В моём варианте исполнения потребуется:
— Сам одноплатный компьютер Raspberry pi 3B с карточкой памяти от 8гб. Есть ньюанс — нужно заказывать более старую модель 3B без плюса, иначе операционка не встанет (судя по отзывам).
— USB внешняя звуковая плата, так как своя звуковуха у малинки отстой, и мини-джек будет занят видеовыходом.
— Устройство BMW IBUS Interface, для связи по шине I-bus, заказать можно у немца, который изготавливает их www.reslers.de/IBUS/
— Преобразователь напряжения 12v-5v, так как малинка питается от напряжения 5v. Я купил сразу с выходом microusb, хотя многие рекомендуют припаиваться к пинам GPIO (40 штырьковая гребёнка на малинке).
— Подавитель шумов, не помню как он правильно называется, нужен для того, чтобы убрать помехи звука на заведённом двигателе. Преобразует питание 12v через катушки индуктивности, на фотке жирный такой блочок с оранжевой наклейкой.
— Миниджек 3 для звуковой косы и 4 для видеоблока.
— Провода, штекера, коннекторы, державки проводов, моток изоленты, паяльник с припоем, термоусадку и корпус CD-чейнджера.
Всё это дело подключается вместо CD-ченджера, сам я собрал его в корпус ченджера выкинув оттуда потроха.
Малинку прикрепил на гайки материнской платы от корпуса компютера
Преобразователь напряжения идеально встал в посадочное место под микросхемы сидюка. Все минусовые провода собрал в один бош-коннектор.
Провода развёл в прикольные державки проводов, на алике такие стоят копейки и в хозяйстве всегда пригодятся. Также они не замыкаются намертво и всегда можно вытащить провод, чтобы его переуложить в случае ошибки.
Одну такую подложил под флешку Ibus, чтобы снизить механическое напряжение на юсб-порты
Задача была сделать всё строго Plug and play, чтобы можно было без проблем отключить устройство. Как раз у меня завалялись разноцветные бмвшные коннектора папа-мама, а провода с пинами взял с жгута из прошлого поста.
Собирается всё по этой схеме, только звук я не стал мудрить через бм54, а подключился к звуковым проводам CD-чейнджера.
Так, устройство готово, теперь самое сложное, взрываем багажник и оголяем всю заднюю бочину, добираясь до фишек тв-блока. К фишкам согласно схеме подключаем три пина с проводами
Небольшое отступление по поводу ТВ. Так как у меня отсутствуют стёкла с антеннами телевизора, а провода антенн были беспощадно зарезаны разборщиком, то у меня появилась идея поставить нештатную антенну с активным усилителем, такую я нашёл на алиэкспрессе, она очень простая маленькая, клеится к окну вместе с усилителем, а питание я взял от тв-блока. Фотки я не делал, так как там требуется две антенны, с одной телевизор хотя бы заработал, но картинка плохого качества, так что буду ставить вторую на второе стекло и сделаю полноценный пост по поводу этого
Продолжаю вести провода вдоль основного жгута. Наконец-то была приобретена изолента на тканевой основе, которую заказал с алика, как подделку Tesa, но поверьте, качество на высоте, уверен, что их мотают на одном конвейере. Вот все ПВХ обрывки из прошлогоднего дооснащения теперь замотаны правильной изолентой, получилось красиво.
Также желательно запаралелить один плюсовой проводок от проводки плафона, чтобы устройство выключалось через 16 мин стоянки и не высаживало аккумулятор. Тут воспользовался оригинальным зажимом от BMW, стоит такая одноразовая штучка 100р, но её фишка в том, что не надо оголять провода и мотать изоленту, а держится всё мёртво. запаралеленная сопля теперь выглядит качественно.
Подводим всю группу проводов к косе CD-чейнджера
Всего понемногу: автомобиль, облако, Raspberry Pi и CAN
Развлекательный центр (in-vehicle infotainment, IVI) стал неотъемлемой частью современного автомобиля. Если раньше это был просто радиоприемник, затем кассетный магнитофон, потом музыку можно было слушать просто с флэшки, а теперь едва хватает двух дисплеев по 10.25-дюймов для приборной панели и развлекательного центра в новом Mercedes A-класса. Кстати, IVI – это уже не только музыка, но и навигация, доступ к Интернет и многие другие возможности внутри транспортного средства, которые потихоньку дают старт воплощению концепции «подключенного автомобиля» (Connected Car). Пожалуй, автотранспорт так же очень близок к реализации концепции Интернета вещей (IoT). И все это достигается благодаря «ассимиляции» компьютера и автомобиля.
В продолжении предыдущей заметки «Автомобиль, Интернет вещей и прочие технологии» хотелось бы рассмотреть идеи для воплощения автомобильного компьютера на уровне открытых проектов и немного затронуть современные тенденции в этом ключе.
Image: Bringing its A game: new 2018 Mercedes A-class hatch revealed – CAR Magazine
Интернет вещей – это не призрак далекого будущего, а вполне реализуемая концепция настоящего. Начиная от лампочек и завершая домашними голосовыми ассистентами – все эти устройства уже имеют доступ в Интернет и могут взаимодействовать между собой. Да, сейчас для этого нужно немного настроить, например, сервис IFTTT и т.п., но прогресс уже не остановить. Как следствие – компьютер начинает проникать в автомобиль, как базовый компонент развлекательного центра. Для автопрома есть вполне обоснованные ограничения, которые прямо влияют на скорость развития IVI – это соблюдение всех мер безопасности. В любом случае, нельзя пренебрегать безопасностью как своей, так и других участников дорожного движения. Автомобиль и дорога – не место для экспериментов. Поэтому проекты энтузиастов, которые хочется рассмотреть в этой заметке – лишь идеи, которые возможно перерастут в будущие прототипы, но уже для коммерческих предложений. Конечно, если речь заходит о безопасности, то доверять следует сертифицированным изделиям, за которыми стоят часы разработок и тестирования.
Поскольку речь пошла о Connected Car и IVI, то стает очевидным использование ресурсов облака с функциями IoT, для реализации на «верхнем уровне» соответствующей программно-аппаратной архитектуры. Например, большинство универсальных облачных платформ, таких как Amazon AWS, Microsoft Azure, IBM Watson или др., содержат практически универсальные сервисы для построения Интернета вещей. По сравнению с сними, будут интересны и открытые решения в этой сфере. Проект Kaa является одним из таких примеров.
Picture: Веб-интерфейс платформы Kaa
Разработчики позиционируют Kaa, как многоцелевую платформу промежуточного уровня для решений IoT, нацеленную на создание приложений для подключенных устройств и интеллектуальных систем. Платформа Kaa представляет собой открытый, многофункциональный инструментарий для разработки встраиваемых систем и решений для облака. Платформа выпущена под лицензией Apache Software License 2.0. Для быстрого ознакомления с платформой можно скачать образ для VirtualBox или развернуть систему в облаке AWS.
Идея Kaa заключается в том, что разработчикам предоставляется SDK для создания приложений с использованием API рассматриваемой платформы, и соответствующие сервисы в облаке, включая компиляцию низкоуровневых программ. В текущей версии поддерживаются языки: C, C++, Java, Objective-C и операционные системы Linux, Windows, Android и iOS, а также заявлена поддержка множества встраиваемых аппаратных платформ, например, Raspberry Pi, Intel Edison.
Тут хочется отвлечься и заметить, что, примерно, как когда-то давно в начале 2000-х годов Intel ушла с рынка микроконтроллеров со своим интереснейшим решением – MCS-51, а сейчас, фактически, мы являемся свидетелями подобного – завершение разработки систем Galileo, Joule и Edison, это не осталось не замеченным у сообщества разработчиков и энтузиастов. Многие идеи из предыдущих систем станут началом для новых устройств и решений. Конечно, если для кристалла i8051 (MCS-51), компания Intel продолжила лицензировать его архитектуру, даже после своего ухода с рынка микроконтроллеров, то сейчас, пожалуй, значительно укрепятся позиции Raspberry Pi и Arduino (на классической платформе микроконтроллеров Atmel), как основных инструментов прототипирования встраиваемых устройств. Но не стоит забывать, что для IoT также интересны разработки на основе устройств ESP8266/ ESP32 Espressif и подобные системы с интегрированным интерфейсом Wi-Fi на кристалле.
Возвращаясь к проекту Kaa, следует отметить, что существует ряд архитектурных особенностей, которые делают разработку IoT на этой платформе исключительно быстрой и легкой. Решения на Kaa не должны зависеть от конкретной аппаратной платформы и, таким образом, проект является совместим практически с любыми подключенными устройствами, датчиками и шлюзами. Конечно, это достигается за счет использования универсальных протоколов связи и стандартизированных интерфейсов между компонентами системы. Также Kaa обеспечивает четкую структуру функций и расширений IoT для различных типов приложений. Они могут использоваться, почти по аналогии технологии plug-and-play, с минимальным кодом, который все-таки должен доработать разработчик для своих систем и устройств. Эти возможности, в сочетании с аналитикой в облаке, делают Kaa достаточно привлекательной платформой для Connected Car и др. решений.
Проект Kaa успешно развивается и совершенствуется, но есть и другая, можно сказать, обратная задача для построения решений Connected Car. Суть ее лежит в выполнении задач тестирования программной части облачной системы и непосредственной эмуляции поведения множества подключенных к облаку автомобилей. Для этой задачи интересны проекты с открытым кодом, например, AutoSIM компании Automatski, который разрабатывается с поддержкой двух лицензий: GPLv3 и коммерческой. В данной системе используются основные протоколы передачи данных, включая MQTT, AMQP, CoAP и др. Пользователь при помощи Rest/Json API управляет работой сервера для симуляции требуемых процессов. AutoSIM теоретически позволяет имитировать поток данных от более чем 100 миллионов устройств.
Kaa и AutoSIM – замечательные примеры открытых систем и, возможно, решений, которые станут очень востребованными для автопрома. Но уже сейчас, на нижнем уровне встраиваемых систем для автомобиля, есть множество интересных открытых решений, которые успешно взаимодействуют с облачными сервисами. Например, платформа Android Auto компании Google. Это решение базируется на Android Automotive и нацелено на объединение смартфона и автомобильного медиа-центра в единую платформу, расширяющую функционал IVI-систем.
Поскольку в современном автомобиле присутствуют множество блоков, которые непосредственно взаимодействуют с медиа-центром, например, с использованием сетей Controller Area Network (CAN), Local Interconnect Network (LIN), Media Oriented Systems Transport (MOST), а также более привычные Ethernet и протоколы TCP/IP, то Android Automotive предлагает некоторую абстракцию – hardware abstraction layer (HAL) между физическими сетями автомобиля и функционалом операционной системы Android, доступного разработчикам.
Figure: Vehicle HAL and Android automotive architecture
Но, если Android вполне прогнозируемое решение от Google, то использование Linux, в качестве платформы для автомобильного развлекательного центра, пожалуй, уже стала классикой жанра. И, как говорится, кто-нибудь определенно должен был предложить проект, например, Automotive Grade Linux. Это открытая разработка, объединяющая автопроизводителей, поставщиков и технологические компании под эгидой The Linux Foundation. Конечно, AGL доступен в виде исходного кода, а для первоначального знакомства можно скачать образ виртуальной машины, например, для запуска в VirtualBox или вполне можно запустить дистрибутив систему на Raspberry Pi. Для работы с AGL SDK потребуется Docker.
Picture: Automotive Grade Linux – Getting Started
Разработка приложений для AGL предусмотрена на HTML5, Qt OpenGL. Сама платформа автомобильного Linux сосредоточена на безопасности. Например, архитектура решения предполагает гипервизор и, конечно, изоляцию критически-важных приложений, систем мультимедиа и развлечений. Приложения и компоненты AGL строятся по модульному принципу с интерфейсами в виде сигналов/событий, что позволяет скрыть сложную программную реализацию низкоуровневых решений, например, реализацию интерфейса CAN-шины, и предоставить простой API для приложений.
Figure: Upgraded Security Blueprint 2017. AGL security overview — Automotive Grade Linux Documentation
Интересно, что разработчики Automotive Grade Linux присматриваются к реализациям уровня архитектуры из других проектов, впрочем, что характерно для всего движения открытых систем. Например, интересным решением в проекте OpenXC является принцип описания в формате JSON всех сигналов CAN, которые нужно обрабатывать. Программный генератор преобразовывает такое описание в файл на языке C ++, которая может быть скомпилирована и т.п.
Figure: OpenXC is an open source, data-focused API for your car
Если говорить о проекте OpenXC, то в нем используется комбинация аппаратного и программного обеспечения с открытым исходным кодом, которое позволяет расширить функционал автомобиля с помощью специальных приложений и подключаемых модулей. Проект сконцентрирован на получении данных об автомобиле и использует стандартный интерфейс диагностического разъема OBD-II. Фактически проект позволяет разработать свое мобильное приложение под Android, iOS или использовать для разработки Python, а в качестве основной автомобильной платформы выбрана марка Ford.
Возвращаясь к проекту Automotive Grade Linux стоит заметить, что в нем Raspberry Pi используется скорее для целей демонстрации и прототипирования, а вот для промышленной платформы выбраны специализированные решения, например, системы на базе ARM SoCs (система на чипе) компании Renesas Electronics серии R-Car Generation 3 и некоторые др.
Figure: R-Car H3. System Block Diagram – Renesas Electronics
Поскольку можно и дальше рассматривать различные платформы для построения IVI-систем, то хочется сделать небольшой вывод об уже приведенных примерах. Все говорит о том, что текущий, 2018 год, будет годом доставляемых пользователю и разработчику приложений. Ведь, как в проекте облака Kaa, так и решениях для операционной системы AGL, используется принцип предоставления практически готового приложения в виде SDK для разработчика. Также широко используется подход на основе описания критериев разрабатываемой системы, например, в формате JSON, и генерации на их основе каркаса приложения. Это чем-то напоминает идеи раскрытые ранее в публикации: «Быстрое прототипирование устройств Интернета вещей», где были рассмотрены решения, в которых разработчики микросхем предоставляют стартовые наборы и т.п. для быстрого ознакомления с их компонентами. Действительно, для программиста, разрабатывающего проект для IoT, всегда будет удобно начать разработку не с детального ознакомления с «неким» API, а с уже готового каркаса приложения.
Давайте обратим внимание на немного другой уровень IVI, где не используются такие многофункциональные системы, как Renesas или др. Интересно рассмотреть подходы на основе уже традиционного решения Raspberry Pi. Понятно, что все это скорее прототипы, т.к. Raspberry Pi вряд ли можно сравнить с промышленной платой, специально разработанной для автомобильных применений, но всегда интересны идеи и подходы энтузиастов. Так, одним из любопытных решений для медиа-центра стоит отметить проект CarPC, который фактически является разработкой и совершенствованием графического интерфейса и дополнительного функционала для известного кроссплатформенного медиапроигрывателя Kodi (ранее проект XBMC).
Picture: CarPC-touch for Kodi
Но Kodi или другой медиа-центр не позволят получить и отобразить данные из бортовой сети автомобиля. Для этого проще всего подключиться к диагностическому разъему автомобиля, как было рассмотрено в нашей предыдущей публикации: «Разъем диагностики OBD-II, как интерфейс для IoT». И тут интересен проект Carberry, представляющий из себя плату расширения для Raspberry Pi.
Picture: Carberry for RPi 3 – Paser
Плата Carberry итальянской компании Paser стоит 123.83 € (евро). Она подключается к стандартному порту расширения Raspberry Pi 3 и поддерживает: CANBUS, GMLAN, инфракрасный приемник и другой функционал. Плата расширения служит отличным дополнением к программным решениям, например, уже упомянутому CarPC. Следует отметить, что программно-аппаратный проект постоянно развивается в сторону расширения функционала и т.д.
Picture: What is AutoPi and What Does It Do? – AutoPi.io
Так же активно развивается немецкий стартап AutoPi, представляющий собой проект автомобильной IoT-платформы. Интересной в AutoPi является аппаратная часть на базе Raspberry Pi Zero и наличием интерфейса OBD-II, а также: 3G/4G, Bluetooth, WiFi, GPS-приемника и других компонентов, умещающихся в достаточно небольшом устройстве.
Стоит заметить, что низкая цена модуля MCP2515/TJA1050 обусловлена его скромным размером и количеством элементов на плате. Она отлично подходит для работы с платами Arduino, но в таком случае при программировании следует не забывать, что в основном на модуль MCP2515/TJA1050 разработчики устанавливают кристалл кварца 8 MHz, а не 16 MHz, который обычно присутствует на большинстве плат Arduino CAN-BUS Shield. Таким образом, само-собой напрашивается использование модуля MCP2515/TJA1050 для подключения к Raspberry Pi и работа с шиной CAN, например, с эмулятором OBD-II, рассмотренным все в той-же статье «Разъем диагностики OBD-II, как интерфейс для IoT» или напрямую с модулем ELM327 и т.п.
Picture: Модуль CAN Bus на базе MCP2515/TJA1050
Но работая с электронными модулями всегда нужно внимательно относиться к напряжению питания и ограничениям по линиям передачи данных. При использовании стандартного интерфейса расширения GPIO платы Raspberry Pi это достаточно актуально. Дело в том, что на разъеме Raspberry Pi присутствуют напряжения 5В и 3.3В, которыми можно запитать внешние схемы, однако, линии ввода-вывода платы работают только с уровнями до 3.3В. Соответственно, плату модуля MCP2515/TJA1050, рассчитанную только на 5В не следует сразу подключать к Raspberry Pi.
Schematic: CAN bus on raspberry pi with MCP2515 – Raspberry Pi Foundation Forum
Решением может стать простой двухсторонний преобразователь уровней 3.3В/5.5В. Таких готовых модулей для шины SPI предостаточно, но MCP2515 имеет дополнительный вывод прерывания, свидетельствующий о готовности данных. Такой вывод позволит процессору Raspberry Pi выполнять свою работу и реагировать на данные от MCP2515 только в требуемые моменты времени, не отвлекаясь постоянно на мониторинг SPI-интерфейса. Следовательно, готовый модуль сопряжения не будет иметь дополнительного контакта и нужно будет просто сделать свою схему.
Picture: Небольшая доработка модуля CAN Bus на базе MCP2515/TJA1050 для работы с Raspberry Pi
Есть и совершенно простое решение, но конечно, не лучшее. Оно основано на том, что микросхема MCP2515 вполне работоспособна с уровнем напряжений от 2.7В до 5.5В, значит ее можно запитать 3.3В с Raspberry Pi, а линии интерфейса SPI и прерывания INT – подключить к GPIO. Для TJA1050 потребуется питание 5В, которое можно подключить все с того же разъема GPIO, но на модуле MCP2515/TJA1050 потребуется аккуратно перерезать дорожку общего питания и подпаяться к ней.
В качестве правильного усовершенствования такой схемы очень разумно использовать делитель напряжения для согласования уровней 5В микросхемы трансивера TJA1050, кстати, можно использовать аналог MCP2551 от компании Microchip или др., и CAN-контроллера MCP2515 с питанием 3.3В (см. рис.). Также интересен проект CAN Simulator на основе Raspberry Pi и, конечно, MCP2515. В качестве трансивера в симуляторе используется микросхема TJA1049, которая хотя и требует питание 5В, но работает без дополнительных компонентов согласования уровней с 3-х вольтовыми системами. Если выбирать самое интересное решение, то, пожалуй, проект CAN-Bus Interface with galvanic isolation самый интересный, так как предлагает использовать трансивер MCP2562, позволяющий без дополнительных элементов подключить контроллер с напряжениями в диапазоне от 1.8В до 5В.
Schematic: CAN + Raspberry Pi
Определившись с аппаратной частью можно переходить к работе с Raspberry Pi на программном уровне. В качестве операционной системы выберем достаточно традиционное решение Raspbian Stretch. А для работы с CAN поддержку драйвера MCP2515 уровня ядра Linux.
Picture: Передача данных между Raspberry Pi и Arduino по шине CAN
В нашем случае – это Linux raspberrypi 4.9.59+. Более детальную информацию о дистрибутиве и самой плате можно узнать, используя команды:
$ cat /etc/debian_version – версия базового дистрибутива Debian;
$ cat /etc/os-release – особенности релиза;
$ cat /proc/cpuinfo – версия аппаратной платформы (подробности можно узнать из статьи: «How to Check the Software and Hardware Version of a Raspberry Pi»).
Для работы SPI с микросхемой MCP2515 нужно добавить параметры в конфигурационный файл /boot/config.txt операционной системы:
# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=spi=on
dtoverlay=mcp2515-can0, oscillator=8000000, interrupt=25
Понятно, что если кварц на плате 16 МГц, то нужно указать число «16000000».
# dtoverlay=spi-bcm2835-overlay
Драйвер bcm2835 потребуется явно указывать в конфиге только для старых ядер Linux до kernel 4.4.x+
Следующий параметр следует раскомментировать для современных систем:
# dtoverlay=spi1-1cs
А, вот, после долгих поисков нашлась актуальная строчка, которая позволила заработать нужному модулю на ядре Linux raspberrypi 4.9.59+ в текущей системе:
dtoverlay=spi0-hw-cs
После перезагрузки можно просто «поднять» сетевой интерфейс:
$ sudo ip link set can0 up type can bitrate 500000
Чтобы каждый раз при старте системы не «поднимать» интерфейс, можно добавить пару стандартных строк в файл конфигурации /etc/network/interfaces и т.п.
Screenshot: Передача данных между Raspberry Pi и эмулятором OBD-II на базе платы Arduino
Дальше остается писать новый код или использовать готовые библиотеки. Поскольку драйвер MCP2515 фактически дает системе новый сетевой интерфейс, то разработку можно выполнять практически на любом языке. И тут сразу хочется сказать немного о Go, кроссплатформенном, компилируемом, многопоточном языке программирования, разработанным компанией Google. Этот язык однозначно очень интересен в плане разработки встраиваемых систем и, конечно, будет совсем не сложно найти под него уже готовую библиотеку, подходящую для проекта, например, CAN bus in Go. А если зайти дальше, то следует рассмотреть и проект Gobot – фреймворк, направленный на создание роботов, решений для IoT и т.д. Но, пожалуй, для этой публикации это будет уже слишком много.
К вопросам программирования на Go обязательно следует вернуться, но уже в следующих публикациях. Так же нужно будет не забыть об операционной системе Tizen, на которой ранее базировалась Automotive Grade Linux, а также рассмотреть тренд этого года – голосовые ассистенты в салоне автомобиля и многое др. А в завершении авто тематики текущей публикации просто вспомним о платформе цифровой кабины, представленной Samsung и HARMAN на CES 2018 и немного вдохновимся идеями дизайнеров и инженеров, разработавших этот концепт.