Меню

andipanda.dev

CaRadio: CarPlay на Raspberry Pi и Linux

После первых экспериментов с CaRadio проект постепенно дошёл до состояния, когда это уже не просто прототип на столе, а магнитола, которой я действительно пользуюсь в машине.

Основой остался Raspberry Pi под Linux. К нему добавились сенсорный HDMI-дисплей Waveshare и Carlinkit, через который работает Apple CarPlay.

В повседневном использовании всё довольно просто: садишься в машину, телефон подключается автоматически, на экране появляется CarPlay, запускаешь Google Maps, включаешь YouTube Music и едешь.

Но за этим привычным интерфейсом по-прежнему находится полностью самодельная система.

Raspberry Pi и Linux

Raspberry Pi был основой CaRadio практически с самого начала.

Для такого проекта это удобная платформа: есть всё необходимое для подключения экрана, внешних устройств и автомобильной электроники, а Linux позволяет полностью контролировать работу системы.

Это одна из причин, почему я не стал использовать готовую Android-магнитолу. Мне хотелось самому определять, как будет запускаться система, как будет выглядеть интерфейс и какие функции появятся дальше.

Само приложение CaRadio написано на C++ с использованием SDL3 и работает непосредственно под Linux.

Но со временем стало понятно, что самостоятельно делать навигацию, музыкальный интерфейс и полноценную интеграцию со смартфоном особого смысла нет. Всё это уже есть в CarPlay.

Экран Waveshare

Для новой версии CaRadio я использовал 7-дюймовый сенсорный HDMI-дисплей Waveshare с разрешением 1024x600.

Он достаточно компактный для установки в автомобиль и при этом даёт нормальную площадь для интерфейса магнитолы и CarPlay.

Именно с этим экраном CaRadio уже прошла несколько тысяч километров и много часов непрерывной работы.

Эксплуатация, конечно, показала и недостатки. Главный из них — яркость. Под прямым солнцем её хотелось бы больше. Возможно, со временем экран будет заменён, но пока он вполне справляется со своей задачей.

Carlinkit и CarPlay

Следующей частью системы стал Carlinkit.

Это небольшой USB-донгл, к которому подключается iPhone. Сам Carlinkit соединён с Raspberry Pi и фактически становится мостом между телефоном и моей магнитолой.

Основная разработка CaRadio велась именно с проводным подключением. На столе это совершенно не мешало: подключил телефон кабелем и можно работать.

Но перед установкой магнитолы в автомобиль я задумался о том, что постоянно подключать телефон кабелем будет не очень удобно.

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

После смены iPhone появилась ещё одна причина что-то менять. Старый Carlinkit по-прежнему запускал CarPlay, но с новым телефоном перестал передавать звук.

Нужно было искать другое решение.

U2W

Так у меня появился U2W.

Когда я его покупал, то предполагал, что он просто заменит старый Carlinkit и позволит использовать беспроводной CarPlay.

Но после подключения выяснилось, что работает он совсем иначе.

U2W не заменяет Carlinkit. Он подключается туда, куда раньше подключался iPhone, и для Carlinkit фактически изображает подключённый по кабелю телефон. Настоящий iPhone при этом соединяется уже с U2W без провода.

В результате вместо одного устройства получилась связка из двух:

Raspberry Pi → Carlinkit → U2W → iPhone

На первый взгляд конструкция получилась несколько странной, но она решила сразу обе проблемы: звук снова заработал, а подключать телефон кабелем больше не требовалось.

Именно в таком виде CaRadio в итоге отправилась в автомобиль.

Теперь достаточно завести машину и немного подождать. Телефон подключается автоматически, на экране появляется CarPlay, после чего можно открыть навигацию или включить музыку.

Телефон при этом может всё время оставаться в кармане.

Это и был тот результат, которого мне хотелось добиться.

Из прототипа в рабочую магнитолу

На этом этапе CaRadio наконец перестала ощущаться экспериментом, который существует в основном ради самой разработки.

Ею стало удобно пользоваться каждый день.

Конечно, проект на этом не закончился. Остались вопросы к экрану, предстоит интеграция с электроникой автомобиля, камерой заднего вида и ещё много работы.

Но появилась рабочая основа, вокруг которой всё это уже можно строить.

А U2W неожиданно открыл ещё одно направление.

Я покупал его исключительно для того, чтобы избавиться от кабеля. Но когда выяснилось, что устройство фактически притворяется подключённым iPhone, стало интересно понять, как именно оно это делает.

Что происходит после подключения?

Как Carlinkit общается с программой?

Что передаётся между устройствами?

И можно ли воспроизвести эту работу самостоятельно?

С этого момента обычная интеграция CarPlay постепенно превратилась в совсем другое исследование.

Но это уже следующая часть истории.