Internetowe radio na ESP32-S3, przerobione i opisane tak, żeby dało się je zbudować bez dyplomu z elektroniki. Fork yoRadio, w klimacie Ubuntu.
Co to w ogóle jest to UbuRadio?
UbuRadio to nasza wersja yoRadio — otwartoźródłowego firmware'u, który zamienia zwykły moduł ESP32 w prawdziwe radio internetowe: z ekranem, pokrętłami, pilotem i własną siecią WiFi. Nie napisaliśmy tego od zera — wzięliśmy solidny fundament i dostosowaliśmy go do siebie: pod nasz sprzęt, nasz język i naszą filozofię „zrób to sam, nawet jeśli na co dzień nie jesteś programistą”.
Nazwa nie jest przypadkowa. To radio nazywa się tak samo, jak sieć WiFi, którą wystawia przy pierwszym uruchomieniu — „ubuntowany”. Cały ten materiał ma jeden cel: żebyś mógł powtórzyć ten projekt, nawet jeśli lutownicę trzymałeś w ręce raz w życiu.
Dla kogo to jest
Nie dla profesjonalistów
Nie zakładamy, że znasz się na elektronice. Każde połączenie na schemacie niżej jest opisane po ludzku — co to jest i do czego służy, a nie tylko numer nóżki.
Dla ludzi, którzy chcą spróbować
Jeśli umiesz wbić kabelek we właściwą dziurkę i przeczytać instrukcję — to wystarczy. Reszta to cierpliwość i jeden wieczór z kawą.
Z czego to jest zbudowane
Lista rzeczy, które musisz mieć, zanim zaczniesz cokolwiek podłączać.
| element | co robi |
|---|---|
| ESP32-S3-DevKitC-1 (44 piny) | mózg całego radia — WiFi, procesor, wszystko |
| Wyświetlacz ILI9488, 480×320, SPI | ekran: nazwa stacji, zegar, VU-metr (działa też z ILI9341 albo ST7796) |
| Moduł DAC PCM5102A, I2S (RPi) | zamienia cyfrowy dźwięk na analogowy sygnał audio |
| Wzmacniacz audio PAM8403, 2×3W, 5V | podbija sygnał z DAC-a na tyle, żeby ruszył głośnik |
| 2× enkoder obrotowy (np. EC11) | pokrętła — głośność i wybór stacji |
| Odbiornik podczerwieni (np. VS1838B) | obsługa pilota |
| Głośnik(i), 3W / 4–8Ω | żeby było słychać |
| Zasilacz 5V, USB-C | zasilanie płytki |
| Obudowa | druk 3D, stare pudełko, cokolwiek — to już Twoja sprawa |
Co gdzie podłączyć
Płytka ESP32-S3 jest w środku. Każdy moduł dostaje własny, kolorowy „kabel” na schemacie — to nie jest jedna linia, tylko kilka sygnałów, wypisanych w ramce obok. Zasilanie płytki: 5V przez USB-C, resztę modułów zasilasz z niej samej (3.3V albo 5V, zależnie od modułu — sprawdź opis swojego wyświetlacza).
Schemat: płytka ESP32-S3 w środku, a wokół cztery rodzaje modułów. Kolor linii = do czego prowadzi, numery w ramkach = konkretne piny GPIO do wpięcia kabelka.
Wzmacniacz PAM8403 (2×3W) nie łączy się z ESP32 — bierze gotowy sygnał audio wprost z wyjścia PCM5102A i dopiero z niego kabel idzie do głośnika. Dlatego nie ma go na schemacie z pinami GPIO.
Pułapki dla początkujących
Rzeczy, na których się wyłożyłem, żebyś Ty nie musiał.
-
01
MISO (GPIO13) trzymaj z dala od wyświetlacza. Podłączony do LCD powoduje, że pasek głośności wisi na ekranie na stałe. Dziwne, ale sprawdzone — po prostu go nie podłączaj.
-
02
Kierunek obrotu pokrętła to tylko kolejność pinów A/B. Jeśli w prawo ścisza zamiast dodawać głośności, nie przelutowuj niczego — wystarczy zamienić numery GPIO przypisane do A i B w ustawieniach.
-
03
Surowy enkoder (bez płytki) ma 5 nóżek: A, B, C, S1, S2. C to wspólna masa dla obrotu, S1/S2 to zwykły przycisk bez plusa i minusa — ważne tylko, żeby jedna nóżka poszła na masę, druga na GPIO.
-
04
Aktualizacje przez WiFi (OTA) to wygoda, nie magia. Radio musi mieć w routerze zarezerwowany, stały adres IP — inaczej pewnego dnia przestaniesz je widzieć w sieci i wrócisz do kabla USB.
-
05
Hasło do aktualizacji WiFi musi się zgadzać w dwóch miejscach naraz (w konfiguracji firmware i w komendzie wgrywającej). Zmieniasz je? Ostatnie wgranie ze starym hasłem musi się jeszcze udać, zanim zacznie obowiązywać nowe.
Co to UbuRadio potrafi
Nie jest to gołe radio z jednym przyciskiem. Kilka rzeczy dosztukowaliśmy specjalnie pod nasz dom.
Co zmieniliśmy względem oryginału
yoRadio to solidny fundament, ale „z pudełka” jest neutralny i angielski. To, co niżej, to konkretna robota, która zamieniła go w UbuRadio — nie tylko przemalowanie etykietki.
-
01
Cały klimat Ubuntu, nie tylko nazwa. Radio wystawia przy starcie własną sieć WiFi o nazwie takiej samej, jak nasza domena — od razu wiadomo, czyje to urządzenie, zanim jeszcze cokolwiek skonfigurujesz.
-
02
Polskie znaki, które nie znikają po aktualizacji. Biblioteka obsługująca wyświetlacz przy każdym świeżym budowaniu projektu (nowy komputer, wyczyszczony cache) nadpisuje czcionkę swoją domyślną wersją — bez polskich ogonków. Dopisaliśmy skrypt, który po każdym budowaniu automatycznie wgrywa naszą, poprawioną czcionkę z powrotem. Nie trzeba nic robić ręcznie — nawet jeśli PlatformIO ściągnie nowszą wersję biblioteki wyświetlacza.
-
03
Sterowanie z Home Assistant, którego w oryginale nie ma. Dopisaliśmy komunikację MQTT od zera: radio publikuje stację, tytuł i głośność, a z panelu domu można je włączyć, wyłączyć i przełączyć.
-
04
Dwa pokrętła naraz, każde z inną rolą. Kod potrafi obsłużyć dwa enkodery, ale w oryginale trzeba samemu rozpisać, co który robi. U nas jedno steruje od razu głośnością, drugie stacjami — łącznie z poprawką kierunku obrotu, żeby „w prawo” zawsze znaczyło głośniej.
-
05
Detale, które ułatwiają życie na co dzień. Zegar na pełnym ekranie zamiast czarnej plamy po pauzie, i zapowiadanie godziny głosem raz na godzinę zamiast co 15 minut (bo się okazało, że nikt tego nie potrzebuje aż tak często).
-
06
Naprawiony błąd wznawiania grania. Włączenie radia komendą MQTT działało tylko wtedy, gdy wcześniej zostało wyłączone też przez MQTT. Wyłączenie fizycznym przyciskiem albo pauzą w przeglądarce psuło ten mechanizm — namierzyliśmy przyczynę w logice „smart start” i naprawiliśmy w dwóch miejscach na raz.
Jak to wgrywamy
Pierwsze wgranie zawsze kablem USB. Później — jeśli włączysz OTA — już bez wstawania z kanapy.
Uczciwie o pochodzeniu
UbuRadio nie jest napisane od zera — i nie udajemy, że jest. To zmodyfikowana wersja otwartoźródłowego yoRadio autorstwa e2002, wydanego na licencji GPLv3. Kod oryginału: github.com/e2002/yoradio. Nasze zmiany są opisane w sekcji wyżej — cały projekt zostaje na tej samej licencji GPLv3, tak jak wymaga tego oryginał.
github.com/ubuntowany/UbuRadio ↗