OR OPEN RADIO · CORE2
ARK. 1/1 · PRE-RELEASE ← STRONA KOSTKI 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 — 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
2,75mld
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. Celowo 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 — koegzystencja na jednym radiu 2,4 GHz. Problem, którego przewodowe radia ESP32 nawet nie dotykają, a u nas jest 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

Dziewięć polskich stacji

Wiadomości, muzyka i polskie sprawy przez Wi-Fi — na Twoim głośniku Bluetooth albo wbudowanym. 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, więc działa bez internetu — 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. Do dwóch godzin na wbudowanym aku, 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 z premedytacją.

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 do 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ęć stacji 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ęć dużych polskich anten — od rocka Antyradia po klubowe mixy RMF MAXX Club. Kostka gra ich 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 380 mAh — do 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 — 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.

SHA-256: a07569…77b671 · 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. Naprawa sprowadziła się do czyszczenia endpointu 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

250 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

Dlaczego akurat te dziewięć stacji?

Żona lubi siedem z nich. Dwie kolejne dodały się same, bo miały stabilny strumień. Inżynieria bywa prosta. ;)

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 2,75 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 trafi na GitHub po szlifach, testach długodystansowych i domknięciu bramek licencyjnych.

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.1 do pobrania — pełny flash (build powtarzalny bajtowo), z trybem szumu: biały / różowy / brązowy
Repo na GitHubie: wkrótce — źródła po dopracowaniu; do tego czasu dostępne na żądanie (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 wersji 0.2
Nie wszystko działa jeszcze tak, jak powinno — to build 0.1, 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