Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Open Radio Core2

Open Radio — signal cube logo

CI Released 0.4.1 GPL-3.0-or-later M5Stack Core2 236 stations shipped 250 tests, 62 gates

Open Radio playing on a real M5Stack Core2 cube

Now-playing screen Station picker Settings screen Status card

⚡ Install from the browser · Download 0.4.1 · Release notes · The 236 stations

Released publicly as Open Radio. The published release is 0.4.1 (2026-08-02, qualified on the owner's Core2 v1.0); 0.1, 0.2, 0.2.1 and 0.4 remain downloadable as historical builds, and 0.2.1 is the release that was field-validated across the Core2 line — v1.0, v1.1 and v1.3. Official binaries come only from open-radio.me/core2. Release notes and known limitations: docs/146-release-0-4-1.en.md.

Open Radio is AI-assisted, human-directed and owner-accountable: every public release is gated by executable tests, exact artifact hashes, documented hardware evidence and an explicit known-limitations list.

Open Radio Core2 is a reliability-first, open-source internet-radio cube for M5Stack Core2. It is designed to play Polish stations over Wi-Fi through a remembered Bluetooth speaker, with the built-in speaker as an automatic fallback.

Polska wersja

Product promise

Turn it on and it plays. Daily listening requires no account, phone, project cloud or routine update. A phone is used only when a new Wi-Fi network must be configured through the local device portal.

The radio is designed to:

  • remember approved Wi-Fi networks and select one that is reachable,
  • reconnect to the last Bluetooth speaker,
  • resume the last working station,
  • fall back to its built-in speaker,
  • recover from Wi-Fi and stream failures without a reboot,
  • explain actionable failures in plain language,
  • keep its last-known-good catalog and configuration on the device.

It never autojoins unknown or open networks. There is no telemetry, account, automatic OTA, recording, project-operated backend or routine remote catalog. The current device firmware uses optional direct NTP time synchronization only. Any future approximate-location or weather lookup must be bounded and must never become a boot or playback dependency.

What “Core2” means

Core2 is the target hardware model: M5Stack Core2. It is a technical qualifier, not necessarily the final consumer-facing brand. Keeping it in the working title makes the hardware boundary honest while the final name remains open.

Honest Bluetooth promise

The testable contract is standards-based interoperability with Bluetooth Classic A2DP Sink speakers using SBC. Playback does not require AVRCP or vendor-specific features. Bluetooth LE Audio-only speakers are outside the original ESP32 hardware contract. No claim of universal speaker compatibility will be made before physical qualification.

Honest air-sensor promise

Sensors are optional, and nothing waits or blinks without them. Plug a supported module into Port A and the cube shows carbon dioxide, temperature, humidity, pressure and a relative figure from the gas element — relative because it only says how far the air has drifted from what the sensor grew used to in this room. The thresholds carry published sources, and alerts are quiet by default.

Environmental readings come from optional, user-installed sensors and are informational. This is NOT a carbon-monoxide, smoke or gas-leak detector: its gas element answers many different substances with a single number and cannot identify any of them. Fit certified detectors for those hazards.

Current station scope

The device holds nine station slots, and you pick those nine yourself from a built-in directory of 236 Polish stations — each verified by a real connection and measured under load — at first power-on and any time later through the phone console (QR). Browse the full directory at open-radio.me/en/stations.

The factory default nine (used until you choose your own): RMF FM, Radio ZET, TOK FM, Antyradio, Radio ESKA, RMF MAXX, Radio Plus, Złote Przeboje and Meloradio.

Every directory entry ships with an MP3 playback path in the public source lane. The private hardware-lab lane can retain an AAC fallback for diagnosis, but AAC and HLS remain outside a public binary until separate legal, transport and resource gates pass. The project does not proxy, rebroadcast or record station audio and does not imply broadcaster endorsement.

Hardware target

  • M5Stack Core2 with ESP32-D0WDQ6-V3 — field-validated on hardware revisions v1.0 (AXP192), v1.1 (AXP2101) and v1.3 with the same image; every new Core2 revision joins the release test matrix as soon as it is available
  • 16 MB flash and 8 MB PSRAM
  • 320×240 touch display
  • built-in I2S speaker and internal battery
  • continuous USB-C power from a power bank
  • Bluetooth Classic A2DP Source output

Current status

The public release is 0.4.1, published 2026-08-02 and flashed to the device it ships to from an erased flash: nine tile logos out of nine, Bluetooth paired from an empty configuration, and a speaker power-cycle recovered on the first attempt. It fixes a tile that replayed the station it used to hold and moves the catalogue to 236. What was not tested is listed in the release notes beside what was. 0.2.1 remains downloadable and was confirmed by an external user on a factory-fresh Core2 v1.1. The historical note below about a failed 60-minute run describes an older pre-release lab image.**

Available now:

  • exact 320×240 light and dark GUI previews,
  • full and minimal now-playing layouts,
  • local settings, screensavers and screen-off policy,
  • local Wi-Fi onboarding with multiple secured profiles and bounded recovery,
  • executable MP3 resolver paths for all nine current catalog entries,
  • built-in-speaker playback routing and automatic model-agnostic discovery of Classic Bluetooth audio-rendering devices, with one approved peer remembered by address through the bounded pairing/link flow,
  • up to eight automatically selected approved Wi-Fi profiles plus a two-touch full local-data reset,
  • host-side renderer, persistence and firmware-contract tests,
  • reproducible firmware source, guarded exact-image restore and hardware evidence capture.

Measured on the 0.2.1 release line, which is still the only release with evidence from more than one unit:

  • release-day smoke on the owner's Core2 v1.0, an independent field install on a factory-fresh v1.1, and a customer confirmation on v1.3 — the whole hardware line covered by the same image,
  • all nine station logos fetched in a single pass, first audio ≈1.2 s after the network, the remembered speaker back in ≈3.1 s, zero underruns at start,
  • battery, owner-measured: about 2.5 hours of typical playback, close to three in favourable conditions (draw ~140 mA, ~190 mA at peaks; screen dimming changes little),
  • Xiaomi Sound Pocket remains the Classic A2DP/SBC reference speaker.

Earlier lab captures — including a failed pre-release 60-minute run — are preserved as dated history in STATUS.md.

Still open on the release line:

  • forced-recovery cycles (Wi-Fi, stream, speaker) and the long endurance soak, with SD and power-bank behavior,
  • additional Classic Bluetooth A2DP/SBC speaker interoperability,
  • DRAM headroom during Bluetooth dialing (a ~5 KB dip stays on watch),
  • the setup-portal browse cap and search placement — scheduled for 0.2.2 (docs/117),
  • final enclosure fit.

The public MP3-only lane is the released lane: 0.4.1, 0.4 and 0.2.1 all reproduce byte-for-byte outside its provenance stamp when the documented build parameters are honored (see REPRODUCIBILITY.md). Endurance items above stay open and are listed honestly in the release notes.

Detailed engineering evidence is maintained in STATUS.md.

Preview the software

From the repository root:

npm run simulator

Open http://127.0.0.1:4173/gui-lab/ for the canonical device emulator. It has one visible 320×240 canvas, no renderer tabs and no zoom control. Every visible device pixel comes from the same C++ RGB565 renderer linked into the Core2 target, including the bundled Inter 600 atlas and compiled icon masks. The 26 screens produce 104 deterministic PL/EN and Light A/Dark B variants.

The canvas proves the logical framebuffer and interaction flow, not the physical two-inch size, IPS color, brightness, touch calibration or real-device readability. Those remain hardware measurements. The separate recovery and onboarding simulators remain engineering tools outside the device emulator. See the corrected emulator pixel-parity audit.

User guide

Read USER-GUIDE.md for first start, daily controls, display settings, recovery behavior, privacy and known limitations.

Development and validation

npm run check

The complete host gate validates contracts, generated files, documentation parity, renderer determinism, firmware-host behavior and source reproducibility. Device backup, flash, erase and monitor commands remain outside this command.

Key documentation

Historical loop reports remain under docs/ as engineering evidence, not as the recommended starting point for users.

Attribution and license

Founder and original author: Tomasz Fiedoruk — fiedoruk.pl.

Software is licensed under GPL-3.0-or-later, original documentation and artwork under CC BY-SA 4.0, and catalog data under CC0-1.0. Official station logos are not bundled without documented permission. Public firmware releases (0.1, 0.2, 0.2.1, 0.4 and the current 0.4.1) ship from fiedoruk.pl/os/; the corresponding-source archive for the current release is published alongside the binary, and each release records its provenance in a release manifest.

About

Open Radio — reliability-first internet-radio cube for M5Stack Core2. GPL-3.0-or-later, no cloud, no accounts, no telemetry. AI-assisted, human-directed, owner-accountable.

Topics

Resources

Contributing

Security policy

Stars

6 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages