02Portfolio
WireAmbi — oświetlenie auta z telefonu i Android Auto
Aplikacja na Androida, która steruje taśmami LED ELK-BLEDOM/MELK z telefonu i z ekranu Android Auto. Ma tryb muzyczny z własnym torem analizy dźwięku, sterowanie głosem offline i panel auta połączony z bramą led-auto.
- 01/07
- 02/07
- 03/07
- 04/07
W liczbach
- Testy jednostkowe
- 359
- Uderzenie → zapis BLE
- 6 ms
- Style reakcji na muzykę
- 9
Problem
Tanie sterowniki taśm LED z rodziny ELK-BLEDOM nie mają dokumentacji, a aplikacja producenta nie działa na ekranie auta. Ta sama ramka występuje w kilku niezgodnych dialektach: sterownik w aucie ignorował polecenia, choć każdy zapis Bluetooth kończył się sukcesem. Sterownik nie zgłasza stanu, przyjmuje jedno połączenie naraz i nie da się go zaszyfrować. Przy Android Auto dźwięk nie wychodzi z głośnika telefonu, więc tryb muzyczny nie ma czego słuchać przez mikrofon.
Podejście
Ramki 7E…EF wziąłem z publicznej tabeli modeli integracji elkbledom dla Home Assistant i sprawdziłem na sprzęcie. Warstwa protokołu wybiera jeden z trzech dialektów po nazwie urządzenia, a efekty, które u różnych modeli znaczą co innego, liczy telefon. Pompa zapisów Bluetooth czeka na potwierdzenie stosu i ponawia odmowy, a kolory w czasie rzeczywistym trafiają do jednoelementowego kanału, żeby taśma nie zostawała w tyle. Tryb muzyczny bierze dźwięk przez AudioPlaybackCapture i przepuszcza go przez FFT, logarytmiczny bank filtrów, detektor SuperFlux i śledzenie tempa z przewidywaniem uderzeń. Logika siedzi w module :core bez zależności od Androida i Bluetooth, więc testy sprawdzają bajty, które poszłyby do sterownika. Ekrany Android Auto trzymają się limitów szablonów wyciągniętych z bajtkodu biblioteki. Z bramą led-auto aplikacja rozmawia szyfrowanym kanałem WireLink.
Efekt
Aplikacja działa na prawdziwym sprzęcie (sterownik MELK-OC21, Android 15), a ekran auta jest sprawdzony w Desktop Head Unit. W repozytorium jest ponad 350 testów jednostkowych, lint jest czysty, kompilator nie zgłasza ostrzeżeń, a build release przechodzi z R8. Od uderzenia wykrytego w analizie do zapisu Bluetooth mija średnio 6 ms. Przy utworze 123 BPM mediana odstępów między błyskami wyniosła 487 ms, przy teoretycznych 488 ms. Interfejs jest po polsku i angielsku.
Jak to działa
Najważniejsze funkcje w krótkich klipach.
01
Parowanie bez zgadywania
Kreator prowadzi przez uprawnienia i skan Bluetooth, a sterowniki sortuje po sile sygnału. Wybrany kontroler zapamiętuje, więc w aucie WireAmbi łączy się sam — także po wejściu w Android Auto.
02
Kolory, sceny i koło barw
Osiem gotowych kolorów, koło HSV na pełen zakres i sceny zapisujące kolor, jasność, tryb i tempo pod nazwą. Suwak wysyła tylko wartość, na której zatrzymał się palec, a zapisy Bluetooth czekają na potwierdzenie stosu — żadna ramka nie ginie po cichu.
03
Światło w rytm muzyki
Dźwięk pochodzi z odtwarzanego miksu (AudioPlaybackCapture), nie z mikrofonu, więc działa też z Android Auto. Po drodze: FFT, logarytmiczny bank filtrów, detektor SuperFlux i śledzenie tempa, które przewiduje uderzenia. Do wyboru dziewięć stylów reakcji: od pulsu po tęczę i iskry.
04
Kalibracja pod każdy sterownik
Tanie sterowniki mówią trzema niezgodnymi dialektami tej samej ramki 7E…EF — aplikacja wybiera właściwy po nazwie urządzenia. Gdy taśma jest inaczej okablowana, test kolorów pokazuje to od razu, a jedno stuknięcie ustawia kolejność kanałów.
05
Panel auta z bramą led-auto
Z bramą led-auto telefon rozmawia szyfrowanym kanałem WireLink i na bieżąco pokazuje stan zamków i drzwi na modelu 3D auta. Po otwarciu drzwi zapala się światło wejścia. Odryglowanie i otwarcie szyb wymagają biometrii lub PIN-u właściciela.
06
Android Auto i głos offline
Na ekranie auta: siatka kolorów, sceny i kafle skrótów, które układa się na telefonie. Polecenia głosowe rozpoznaje Vosk bez internetu, na zamkniętej gramatyce — wynik liczy się tylko wtedy, gdy każde słowo ma pewność co najmniej 0,7.