Menu

andipanda.dev

CaRadio: CarPlay na Raspberry Pi i Linux

Po pierwszych eksperymentach z CaRadio projekt stopniowo doszedł do etapu, w którym nie jest już tylko prototypem na stole, ale radiem samochodowym, z którego naprawdę korzystam w samochodzie.

Podstawą nadal jest Raspberry Pi z systemem Linux. Do tego doszedł dotykowy wyświetlacz HDMI Waveshare oraz Carlinkit, przez który działa Apple CarPlay.

W codziennym użytkowaniu wszystko wygląda dość prosto: wsiadasz do samochodu, telefon łączy się automatycznie, na ekranie pojawia się CarPlay, uruchamiasz Google Maps, włączasz YouTube Music i jedziesz.

Ale za tym znajomym interfejsem nadal kryje się całkowicie własnoręcznie zbudowany system.

Raspberry Pi i Linux

Raspberry Pi było podstawą CaRadio praktycznie od samego początku.

Do takiego projektu jest to wygodna platforma: ma wszystko, czego potrzeba do podłączenia ekranu, urządzeń zewnętrznych i elektroniki samochodu, a Linux pozwala zachować pełną kontrolę nad działaniem systemu.

To jeden z powodów, dla których nie zdecydowałem się na gotowe radio z Androidem. Chciałem sam decydować, jak system będzie się uruchamiał, jak będzie wyglądał interfejs i jakie funkcje pojawią się w przyszłości.

Sama aplikacja CaRadio jest napisana w C++ z wykorzystaniem SDL3 i działa bezpośrednio pod Linuksem.

Z czasem stało się jednak jasne, że samodzielne tworzenie nawigacji, interfejsu do muzyki i pełnej integracji ze smartfonem nie ma większego sensu. Wszystko to jest już dostępne w CarPlay.

Ekran Waveshare

W nowej wersji CaRadio wykorzystałem 7-calowy dotykowy wyświetlacz HDMI Waveshare o rozdzielczości 1024×600.

Jest wystarczająco kompaktowy, aby zamontować go w samochodzie, a jednocześnie oferuje odpowiednio dużo miejsca dla interfejsu radia i CarPlay.

Właśnie z tym ekranem CaRadio przejechało już kilka tysięcy kilometrów i przepracowało wiele godzin bez przerwy.

Eksploatacja oczywiście pokazała również jego wady. Największą z nich jest jasność. W bezpośrednim słońcu przydałoby się jej więcej. Być może z czasem ekran zostanie wymieniony, ale na razie całkiem dobrze spełnia swoje zadanie.

Carlinkit i CarPlay

Kolejnym elementem systemu został Carlinkit.

To niewielki dongle USB, do którego podłącza się iPhone. Sam Carlinkit jest połączony z Raspberry Pi i w praktyce staje się mostem między telefonem a moim radiem.

Większość prac nad CaRadio prowadziłem właśnie z połączeniem przewodowym. Na stole zupełnie to nie przeszkadzało: podłączasz telefon kablem i można pracować.

Jednak przed zamontowaniem radia w samochodzie zacząłem się zastanawiać, czy ciągłe podłączanie telefonu kablem będzie wygodne.

Chciałem, żeby działało to inaczej: uruchamiam samochód, telefon łączy się automatycznie, CarPlay pojawia się na ekranie — i można jechać.

Po zmianie iPhone'a pojawił się jeszcze jeden powód, żeby coś zmienić. Stary Carlinkit nadal uruchamiał CarPlay, ale z nowym telefonem przestał przesyłać dźwięk.

Trzeba było znaleźć inne rozwiązanie.

U2W

W ten sposób pojawił się u mnie U2W.

Kiedy go kupowałem, zakładałem, że po prostu zastąpi stary Carlinkit i pozwoli korzystać z bezprzewodowego CarPlay.

Po podłączeniu okazało się jednak, że działa zupełnie inaczej.

U2W nie zastępuje Carlinkit. Podłącza się go tam, gdzie wcześniej był podłączony iPhone, i z punktu widzenia Carlinkit zachowuje się jak telefon podłączony przewodem. Prawdziwy iPhone łączy się natomiast bezprzewodowo z U2W.

W rezultacie zamiast jednego urządzenia powstał zestaw dwóch:

Raspberry Pi → Carlinkit → U2W → iPhone

Na pierwszy rzut oka taka konstrukcja może wydawać się trochę dziwna, ale rozwiązała oba problemy jednocześnie: dźwięk znów działał, a podłączanie telefonu kablem nie było już potrzebne.

Właśnie w takiej konfiguracji CaRadio ostatecznie trafiło do samochodu.

Teraz wystarczy uruchomić samochód i chwilę poczekać. Telefon łączy się automatycznie, na ekranie pojawia się CarPlay, a potem można otworzyć nawigację albo włączyć muzykę.

Telefon może przy tym cały czas pozostać w kieszeni.

I właśnie taki efekt chciałem osiągnąć.

Od prototypu do działającego radia

Na tym etapie CaRadio w końcu przestało sprawiać wrażenie eksperymentu istniejącego głównie dla samego procesu tworzenia.

Zaczęło być czymś, z czego wygodnie korzysta się na co dzień.

Oczywiście projekt na tym się nie skończył. Nadal pozostają kwestie związane z ekranem, integracją z elektroniką samochodu, kamerą cofania i wiele innych rzeczy do zrobienia.

Pojawiła się jednak działająca podstawa, wokół której można już rozwijać cały system.

A U2W niespodziewanie otworzył jeszcze jeden kierunek.

Kupiłem go wyłącznie po to, żeby pozbyć się kabla. Kiedy jednak okazało się, że urządzenie w praktyce udaje podłączonego iPhone'a, zaciekawiło mnie, jak właściwie to robi.

Co dzieje się po podłączeniu?

Jak Carlinkit komunikuje się z programem?

Jakie dane są przesyłane między urządzeniami?

I czy da się samodzielnie odtworzyć sposób jego działania?

Od tego momentu zwykła integracja CarPlay zaczęła stopniowo zmieniać się w zupełnie inne badanie.

Ale to już kolejna część tej historii.