OR OPEN RADIO
EN
Polskie stacje radiowe, wszędzie na świecie/M5Stack Core2/ gra na biurku

Polskie radio,
które po prostu gra.

Rodzina i znajomi za granicą lubią mieć w tle polskie radio. Do tej pory oznaczało to płatne aplikacje albo drogie dedykowane odbiorniki, więc zrobiłem kostkę, która gra dziewięć polskich stacji radiowych przez Wi-Fi i Bluetooth. Do tego generator białego, różowego i brązowego szumu: usypia, wycisza i działa bez internetu. Obraz systemu udostępniam za darmo, więc możesz powielić ją u siebie.

RYSUNEK ZŁOŻENIOWY OR-C2 LAB
54 mm 54 mm 16 mm USB-C 5 V ESP32 2 × 240 MHz 16 MB FLASH · 8 MB PSRAM GŁOŚNIK 1 W WI-FI 2,4 GHz + BT CLASSIC OR-C2 · EKRANY: EMULATOR 1:1
ostatni capture: route BTstarvation 0watchdog 0kolejka pełna
A1
9
stacji radiowych
A2
~50
cały sprzęt, bez lutowania
A3
3
kolory szumu do wyciszania
A4
0
kont · chmur · telemetrii
A5
3,45mld
tokenów AI w produkcji
A6
100+
dokumentów inżynierskich
KOSTKA W AKCJI REC
leci w pętlikliknij po dźwięk z kostki
/ nowa platforma, świadomie

Znamy yoRadio. Budujemy coś innego.

yoRadio to świetny kombajn DIY: sam dobierasz ekran i przetwornik, lutujesz, kompilujesz w Arduino IDE i grasz po kablu. Szanujemy. My budujemy od zera nową platformę o innej filozofii: Bluetooth zamiast kabla, mobilność, wygoda i lekkość.

  • Audio przez Bluetooth przy aktywnym Wi-Fi, czyli koegzystencja na jednym radiu 2,4 GHz. Przewodowe radia ESP32 tego problemu nawet nie dotykają, a u nas jest on sercem systemu.
  • Recovery jako kontrakt. Last-known-good, rotacja endpointów, watchdogi, safe-mode. Radio ma wstawać samo, zanim sięgniesz po kabel.
  • Buildy powtarzalne bajtowo z bramkami telemetrii przed wydaniem: starvation Δ0, wstrzyknięta cisza 0,0 s. Werdykt wydają liczby.
  • Emulator pixel-parity w przeglądarce. Każdy piksel podglądu rysuje ten sam renderer C++ RGB565, który działa na urządzeniu.
  • Lokalny tryb szumu. Wellness bez internetu; kategoria, której klasyczne radia internetowe w ogóle nie mają.
  • Flash w 2 kliknięcia z przeglądarki. Zamiast Arduino IDE 1.8.19, generatora myoptions.h i podmiany fontów w bibliotekach.

A jeśli kochasz grzebać: yoRadio ma 65 tysięcy slotów na stacje, MQTT i Home Assistanta, i jest w tym świetne. My robimy radio dla twojej mamy. A może po prostu nowy trend, niezależnie od wieku: mała kostka, która daje ci tło — muzykę albo szum — żeby lepiej się żyło i pracowało.

01 / co potrafi

Dwa tryby: radio i szum

W dzień polskie stacje. Wieczorem generator szumu, który usypia i wycisza. Jedna kostka.

TRYB-01RADIO

Polskie stacje — dziewięć z 222

Wiadomości, muzyka i polskie sprawy przez Wi-Fi, na Twoim głośniku Bluetooth albo wbudowanym. Od wydania 0.2 dziewiątkę układasz sam z katalogu 222 sprawdzonych stacji. Włączasz i gra, resztą kostka martwi się sama.

TRYB-02WELLNESS

Szum: biały · różowy · brązowy

Jeden dotyk i radio staje się maszyną do wyciszania: sen niemowlaka, drzemka, medytacja, praca w skupieniu. Szum powstaje w kostce i gra bez sieci, także w hotelu, w aucie i w samolocie.

ZASTOSOWANIA sen niemowlakadrzemkamedytacjapraca w skupieniumaskowanie hałasurelaks
02 / po co to naprawdę

Polska zawsze w kieszeni

Miliony Polaków mieszkają poza krajem. Ta kostka kosztuje tyle, co dwie pizze, a daje coś, czego nie sprzedaje żadna platforma: polskie poranki, polskie wiadomości i polską muzykę w Dublinie, Chicago czy Oslo.

Niezależność

Nikt ci tego nie wyłączy

Zero subskrypcji, konta i regulaminu, który jutro się zmieni. Nie ma OTA ani chmury, więc nie ma też przycisku, którym ktoś zdalnie zgasi twoje radio.

Zawsze przy tobie

54 mm w walizce

Hotelowe Wi-Fi wystarczy na radio, a szum gra nawet bez sieci. Zmierzone ~2,5–3 h na wbudowanym aku (pobór 140–190 mA), dalej dowolny powerbank.

Jedna cena

~50 € i koniec rachunków

Strumienie stacji są publiczne, szum rodzi się w kostce. Nie ma czego opłacać co miesiąc.

Kostka nie jest usługą. Nie ma serwera, który może paść, ani firmy, która może zmienić zdanie. Jest twoja, jak radio na półce, tylko że gra z internetu.

03 / zakres

Czym ta kostka jest, a czym świadomie nie jest

Open Radio powstało z jednego założenia: kupić gotowy sprzęt all-in-one i napisać do niego cały system. Zakres funkcji zamknęliśmy raz i od tamtej pory go nie ruszamy.

Jest

  • Systemem do sprzętu z półki. Hardware robi M5Stack, my robimy resztę: firmware, GUI, recovery, katalog stacji. Zero lutownicy i drukarki 3D.
  • Kompromisem kosztu i wydajności. ESP32 kontra streaming w 2026 roku. Cała inżynieria tego projektu wynika z tej dysproporcji.
  • Mobilną i prostą w obsłudze. Trzy dotknięcia na dole ekranu: poprzednia stacja, siatka, następna. Urządzenie zrozumiałe w dziesięć sekund, a na wbudowanym aku gra co najmniej 2 h bez kabla.
  • Maksymalnie bezobsługową. Sieć, strumień, głośnik, konfiguracja: wszystko, co może paść, ponawia się samo, bez rebootu i bez telefonu.
  • Celowo małą funkcjonalnie. Każdy kilobajt DRAM jest policzony, a Wi-Fi i Bluetooth walczą o jedno radio. Więcej funkcji zwyczajnie się w tym krzemie nie mieści.

Nie jest

  • Audio hi-end. MP3 128 kb/s przez SBC na głośnik Bluetooth albo wbudowany 1 W. Do kuchni, warsztatu i na balkon, nie do odsłuchowni.
  • Platformą do wszystkiego. Dziewięć slotów na stacje i zamknięta funkcjonalność. Bez Spotify, podcastów, budzików i sterowania z telefonu.
  • Kombajnem do konfigurowania. Ustawienia mieszczą się na trzech ekranach. Nie ma ukrytych plików ani trybu eksperta.
  • Produktem chmurowym. Jedyny ruch wychodzący to strumienie stacji i opcjonalny NTP. Radio nie wie, czego słuchasz, i nie ma komu o tym powiedzieć.

Dziewiątkę fabryczną kostka gra od pierwszego włączenia. Katalog liczy 222 pozycje i to z niego układasz własną listę. Kostka sięga po oficjalne, publiczne strumienie MP3 wprost od nadawców: bez retransmisji, bez nagrywania, bez pośredników. Z perspektywy stacji to po prostu kolejny słuchacz na liczniku, tyle że w ładniejszym pudełku. Linki prowadzą na oficjalne strony.

04 / hardware

Jedno pudełko z półki

MCUESP32-D0WDQ6-V3 · 2 rdzenie Xtensa LX6 @ 240 MHz
Pamięć520 KB SRAM + 8 MB PSRAM · 16 MB flash
EkranIPS 2,0″ · 320 × 240 · dotyk pojemnościowy
Audiowzmacniacz I2S NS4168 + głośnik 1 W
RadioWi-Fi 2,4 GHz b/g/n + Bluetooth Classic · A2DP source (SBC)
ZasilanieUSB-C · wbudowany aku 500 mAh — co najmniej 2 h grania bez kabla
Obudowa54 × 54 × 16 mm · gotowa, fabryczna
Dlaczego M5Stack Core2

Bo to jedyna droga do 50 € bez lutowania. Ekran, dotyk, głośnik, bateria, obudowa i oba radia są w cenie, więc wyciągasz z pudełka i flashujesz.

Płaci się za to jedną walutą: Wi-Fi i Bluetooth dzielą jeden modem radiowy 2,4 GHz i muszą się nim wymieniać w czasie. Większość wpisów w dzienniku poniżej wynika wprost z tej jednej decyzji zakupowej.

Sam Core2 to fragment większego ekosystemu M5Stack: kostki Core z ekranem, mniejsze Atom i StickC oraz dziesiątki nakładanych modułów, wszystko na ESP32, z publiczną dokumentacją. Do tego projektu niczego nie dokładaliśmy: jedna kostka prosto z pudełka.

Współpraca płatna · Botland jest partnerem projektu. Link do sklepu M5Stack i do dokumentacji jest bez żadnej umowy.

SHA-256: 3040146f…8d2467a · licencja (GPL-3.0, bez gwarancji) ·

05 / tor audio

Od CDN-u do membrany

SCHEMAT PRZEPŁYWU OR-C2/A 44,1 kHz
STACJACDN · MP3 128 kb/s WI-FI / TCPpotrzeba 16 KB/s DEKODER MP38192 ramki / przebieg KOLEJKA PCM≈ 6 s zapasu · 44,1 kHz BT A2DP · SBCreconnect 8–20 s GŁOŚNIK BTtwój, zapamiętany GŁOŚNIK 1 Wfallback wbudowany awaria BT → dźwięk gra dalej lokalnie
MP3 128 kb/s potrzebuje 16 KB/sWi-Fi pod aktywnym BT dowozi 12–14 KB/sta różnica = główny przeciwnik projektu → LOG-01
06 / dziennik produkcji

Nerd stuff: co się naprawdę działo

Wybrane wpisy z dziennika inżynierskiego. Wszystkie liczby pochodzą z telemetrii zrzucanej z urządzenia podczas wielominutowych testów.

LOG-01FIZYKA

Jedno radio, dwie roboty

Wi-Fi i Bluetooth siedzą w ESP32 na wspólnym module 2,4 GHz i dzielą antenę w czasie. Gdy A2DP nadaje, okno TCP (~5,7 KB, stała kompilacji Arduino LWIP) pomnożone przez RTT rozdęte do 350–500 ms daje 12–14 KB/s. Strumień MP3 128 kb/s potrzebuje 16. Deficyt to nie bug, to arytmetyka.

LOG-02PUŁAPKA

WiFi.setSleep(false)

Klasyczna rada z forów na przyspieszenie Wi-Fi w ESP32. Przy aktywnym Bluetoothu kontroler robi abort() i kostka boot-loopuje co 26 sekund. Bez modem-sleep koegzystencja obu radiów po prostu się sypie.

LOG-03FIZYKA

Burst-equilibrium

CDN oddaje pierwsze sekundy strumienia szybkim burstem, potem już dokładnie 1× realtime. Każdy próg bufora ustawiony powyżej punktu równowagi nigdy nie zostanie osiągnięty: radio w nieskończoność „czeka, aż się zbuforuje". Wszystkie progi rezerw musiały zejść poniżej.

LOG-04ODKRYCIE

Budżet dekodera ≠ przepustowość

Potrojenie pracy dekodera na przebieg pętli nie dodało ani jednej ramki audio (deficyt siedzi w sieci), za to wydłużyło przebieg do 1,6 s i zabiło dotyk. Przy deficycie sieciowym budżet dekodera decyduje wyłącznie o responsywności interfejsu. Wróciło 8192 ramek na przebieg.

LOG-05BUG

Rotacja, która nie rotowała

Ścieżki śmierci strumienia nie czyściły aktywnego endpointu, więc „rotacja kandydatów" od zawsze otwierała w kółko ten sam martwy URL. Objaw: 81 restartów w 3 minuty. Wystarczyło wyczyścić endpoint w trzech miejscach.

LOG-06RAM

TLS kontra Bluetooth

Handshake TLS potrzebuje ~40 KB wolnego DRAM. Przy grającym Bluetoothu zostaje 25–30 KB, więc przełączenie na stację wymagającą discovery przez HTTPS w trakcie grania jest fizycznie niewykonalne. Rozwiązanie: przypięte fallbacki plain-HTTP per stacja plus cache ostatniego działającego źródła.

LOG-07BT

Okno parowania

Głośnik po odłączeniu zasilania nie czeka grzecznie na skan. Sam dzwoni do kostki. A kostka odrzucała nieznajomych. Klincz. Fix: dotknięcie „skanuj" otwiera okno, w którym przychodzący zgodny głośnik zostaje adoptowany i zapamiętany.

LOG-08RF

Za blisko routera

Kostka 2 m od punktu dostępowego tnie audio falami; w drugim pokoju gra idealnie. Nadajnik Wi-Fi routera zagłusza odbiornik Bluetooth w kostce. Czasem najlepszą poprawką firmware'u jest przestawienie urządzenia o trzy metry.

07 / bezobsługowość

Co się dzieje, gdy coś pada

Zasada projektowa: wtyczka + prąd = gra. Każdą awarię radio ma przeżyć samo, bez telefonu i bez człowieka.

padło Wi-Fiponawia znane sieci z ograniczonym backoffem; nigdy nie wejdzie w obcą ani otwartą sieć
serwer zerwał strumień2 s bez ramki = natychmiastowy reopen i rotacja kandydatów (jeden z serwerów zrywał TCP 65× na 12 min, gra mimo to)
padł głośnik BTdźwięk przechodzi na głośnik wbudowany, reconnect próbuje w tle co 8–20 s
martwy URL w katalogulast-known-good: ostatnie działające źródło każdej stacji zapamiętane na flashu
zwis pętli głównejwatchdog 30 s: diagnostyczny reset i automatyczny powrót do grania zamiast cegły
uszkodzona konfiguracjasafe mode z lokalną naprawą; zepsuty stan nigdy nie nadpisuje ostatniego działającego
0 kont0 chmury0 telemetrii0 nagrywania0 auto-OTAjedyny ruch: strumienie stacji + opcjonalny NTP
08 / produkcja

Zbudowane w trójkącie: dwa AI i człowiek

System powstaje w całości w parze agentów AI pracujących na jednej maszynie, z audytami krzyżowymi między silnikami. Człowiekowi zostają decyzje i uszy.

Główny inżynier

GPT-5.6 Sol · Codex

2,5 mld
tokenów

Architektura, firmware, symulator GUI z pixel-parity (przeglądarka rysuje dokładnie te same piksele RGB565 co urządzenie), dwujęzyczna dokumentacja.

Stabilizacja i audyt

Claude Fable 5 · Claude Code

950 mln
tokenów

Przejęcia produkcji w kryzysie: fizyka toru audio, hotfixy rotacji i TLS, bramki QC, audyty krzyżowe raportów drugiego silnika.

Właściciel projektu

Tomasz Fiedoruk

1 para uszu
+ decyzje i weto

Wyznacza granice produktu, słucha wyników na żywo i zatrzymuje każdy flash, który nie przeszedł protokołu. Jedyny element układu, który słyszy.

Werdykt PASS/FAIL wydaje telemetria. Każdy kandydat na firmware przechodzi wielominutowy test z zapisem: starvation Δ0 · watchdog Δ0 · wstrzyknięta cisza 0,0 s / 300 s · kolejki pełne. Dopiero potem człowiek słucha.

W repo jest ponad 100 numerowanych dokumentów inżynierskich, każdy po polsku i angielsku. Tak, do radia.

09 / FAQ

Pytania, które już padły

Część z nich naprawdę.

FAQ-01

Które stacje zagra kostka?

Od wydania 0.2 wybierasz dziewięć z katalogu 222 pozycji sprawdzonych realnym połączeniem. Konfigurator pyta o nie przy pierwszym uruchomieniu i zostaje w ustawieniach.

FAQ-02

Czemu gra lepiej w drugim pokoju niż obok routera?

Bo router krzyczy Wi-Fi prosto w bluetoothowe ucho kostki. Zmierzyliśmy to. Trzy metry odstępu robią więcej niż niejeden firmware-fix, szczegóły w LOG-08.

FAQ-03

Przecież są aplikacje na telefon.

Są, czasem płatne. Tylko że telefon dzwoni, powiadamia i wychodzi z tobą z kuchni. Kostka stoi i gra.

FAQ-04

Ile to naprawdę kosztowało?

Sprzęt ~50 €. Do tego 3,45 miliarda tokenów AI, których nie przeliczamy na złotówki, bo miało być hobby.

10 / status i dystrybucja

Najpierw obraz systemu, potem źródła

Kolejność wydania odwróciliśmy celowo: zamiast wypuszczać surowe źródła, najpierw udostępniamy gotowy obraz do wgrania: jedna komenda esptool i kostka gra. Kod jest już na GitHubie, razem z pełnymi źródłami obok binarki.

Gra na biurku całymi dniami. Build laboratoryjny, 9/9 stacji z logotypami, dotyk, ulubione
10-minutowy test ciągły zaliczony. 0,0 s wstrzykniętej ciszy, po drodze 1 realny restart źródła
Dwa fizyczne głośniki BT potwierdzone. Parowanie, auto-reconnect po restarcie, adopcja przychodzącego
Kwalifikacja długodystansowa w toku. Progi 60 min → 2 h → 8 h ciągłego grania przed publikacją
Obraz 0.2.1 do pobrania. Pełny flash (build powtarzalny bajtowo), z trybem szumu: biały / różowy / brązowy
Repo na GitHubie: opublikowane. Pełne źródła obok binarki i w otwartym repozytorium: github.com/fiedoruk/open-radio (licencja, §2)
+ / znane sprawy i kolejne wersje
Dotyk i szybkość. Operujemy na limitach sprzętu: jedno radio 2,4 GHz i policzony każdy kilobajt RAM. Niektóre rzeczy, jak start i reakcje generatora szumu, mają dziś zauważalne opóźnienia. Responsywność = priorytet kolejnej wersji
Nie wszystko działa jeszcze tak, jak powinno. To build 0.2, pojedyncze zgrzyty się zdarzają. Gdy coś nie gra: odłącz i podłącz zasilanie, kostka podnosi się sama
Easter eggi. W systemie kryje się jeden czy dwa easter eggi: funkcje, które czekają na oficjalne wdrożenie. Kto znajdzie, ten ma ;)

Licencje zadeklarowane: GPL-3.0-or-later (kod) · CC BY-SA 4.0 (dokumentacja) · CC0 (katalog stacji) · bez retransmisji i nagrywania audycji · logotypy stacji tylko za zgodą nadawców

Tomasz Fiedoruk
kto to zrobił

Tomasz Fiedoruk — doradca strategiczny: AI, IT, marketing

Ten system napisały dwa agenty AI pod moim nadzorem i na moją odpowiedzialność. Nazwa, narracja i kanał dystrybucji też są moje. Tak samo powstała marka zenbox, którą współtworzyłem jako CMO i doprowadziłem do pierwszej piątki hostingów w Polsce. U klientów robię jedno i drugie: pomagam podjąć decyzję, ustawiam markę i komunikację, prowadzę budowę i podpisuję się pod wynikiem. Zawodowo od 2003, 8 systemów na produkcji, 47 projektów pod NDA. Biorę zlecenia, od jednorazowej konsultacji po prowadzenie całego wdrożenia.