Plug the cube in with a USB-C cable, press the button and wait two minutes. That is the flashing itself; for the whole thing, with Wi-Fi and picking your nine stations, count on about a quarter of an hour. Nothing to install on your computer, nothing to compile, no account to create.
This browser cannot talk to the cube over the cable. Open this page in Chrome or Edge — or scroll down to the terminal route.The browser blocked access to the port. Open the page over HTTPS and try again.
This is the one for a new cube, or when you want to start clean — it erases your settings: Wi-Fi, speaker, chosen stations.
The cube takes 15–30 seconds to start. That is normal — do
not jab at the screen. It has to join Wi-Fi, reach the station and fill a
buffer before anything plays. For the first moments the screen can ignore
you; wait until a station name appears. It is not a phone and it does not
wake like one.
And this is still a test build. The cube plays, but on
some stations the sound can cut out, and now and then the device restarts
itself. Open Radio is a non-commercial project built in spare time — you are
not buying anything and nobody is promising hardware that simply works.
Fixes ship as they are found, and every one of them is in the
changelog.
only these browsers can drive the cableChrome ✓Edge ✓Opera ✓Safari noFirefox 151+, untested
You need a computer running Windows or macOS; installing from a phone is untested. No Chrome, Edge or Opera? Install Chrome: it is free and takes a few minutes, google.com/chrome ↗. If you would rather not, the terminal route further down does the same job.
WHAT YOU NEEDM5Stack Core2 cubeUSB-C data cableWindows / macOS computerhome Wi-Fi, 2.4 GHzpassword to that Wi-Fi (you type it in step 05)a phone with a camera (for step 05)BT speaker (optional)
▣ SEE IT FIRST — 70 SECONDS
From the box to the music: the QR code, the phone picking your nine stations, and then twelve screens you can touch — swiping to the next station, volume, a Bluetooth speaker, all three home screens, the air, the sleep noise and the console that changes your nine later. Every screen was drawn by the same code that draws on the cube — these are not mock-ups.
no sound · 1920×1080 · MP4 and WebM from our own server, no YouTube and no tracking
STEP 01BUY
Buy the cube
M5Stack Core2 — one box with a screen, speaker, battery and both radios, ~€50. No soldering iron required for anything. A short USB-C cable, 20 cm, comes in the box and does the job here, so you do not need to buy one. Buy the cube from the official M5Stack store ↗ (ships worldwide), or in Poland from Botland ↗ (approx. 220 PLN, 24 h shipping). Every revision so far (v1.0, v1.1, v1.3) runs the same file.
Paid partnership · M5Stack pays me a commission when you buy through my link; Botland gives me devices to test.
STEP 02IMAGE
Download the system image
Installing from the browser? Then skip this step. The install button in step 04 fetches this file by itself, so you do not have to download anything. Go straight to step 03. The file and the checksum below are for the manual route (esptool) and for anyone who wants to check what they got.
One file with the whole system. Nothing to build or install on your computer. The current release is 0.4.6: 236 tested stations, you pick nine from your phone, station logos that fetch themselves, a screen that tells you why the radio is silent, and room for air sensors if you ever want them.
Two files, two routes. The factory image writes from zero and erases every setting — Wi-Fi, speaker, chosen stations. Does your cube already run 0.4.5? Then the update under step 04 keeps all of that, from the browser or from the terminal.
By downloading you accept the terms: GPL-3.0-or-later license, project name protected, no warranty. Full text: LICENSE-0-4-6.txt. The licences of the libraries built into the image: NOTICES-0-4-6.txt. The source corresponding to exactly this binary is published beside it (GPL §6d): open-radio-0-4-6-corresponding-source.tar.gz (59 MB, .sha256) — with the code cut, four libraries at pinned commits, the recipe for the rebuilt ESP32 libraries and the rebuild procedure. The rebuilt libraries themselves come as an archive attached to the release on GitHub. Public repository: github.com/fiedoruk/esp32ai-me-open-radio ↗ (synchronised to 0.4.6, tag open-radio-0-4-6; release 0.4.6 ↗).
Previous releases: 0.4.5, 0.4.4, 0.4.2, 0.4.1, 0.2.1 and 0.1
0.2.1 — open-radio-0-2-1.bin (2.4 MB) · SHA-256: 295ca3fdf9f9daf7a11ee979bc3371b2c79aaf48de5afe455668b72b23dc0546 (.sha256). It is the only release with evidence from more than one cube — v1.0, v1.1 and v1.3.
Use a USB-C cable that carries data (many “charging” cables have no data lines and the computer will see nothing). The simplest choice is the short cable that came in the cube's box. The USB-C socket is on the left side of the cube, just below the power button. The cube shows up as a serial port — the channel the computer uses to talk to it down the cable — through its CH9102 chip. If the cube's screen is dark, press the power button on its left side once.
Nothing visible happens when you plug it in. No window opens on the computer, nothing beeps. The check comes in step 04: the browser puts up a small window listing ports, and the cube is in it as “USB Single Serial” (on Windows with a COM number after it). If that entry is missing, your system needs the driver — a small program that lets the computer talk to the cube's USB chip. Install it from the M5Stack driver page ↗ (the “CH9102 Driver” section, Windows and macOS builds) and replug the cable.
STEP 04FLASH
Flash the image
▣ FROM THE BROWSER — THE MAIN PATH
Three moves, nothing to install: 1. open this page in Chrome or Edge on a computer, cube on the cable · 2. click the button and pick the port · 3. confirm erase and install. The page flashes the system and reboots the cube (~2 min). The confirmation window is in Polish: “Zainstaluj” means Install, “Potwierdź instalację” means Confirm installation, “Czyszczenie urządzenia…” means Erasing the device.
This browser cannot talk to a device over a cable. Open the page in Chrome or Edge, or expand the options below.The browser blocked access to the cable. Expand the options below.
In the port picker the cube may appear as an “Unnamed device”, “USB Single Serial”, cu.usbserial-… (macOS) or COM… (Windows) — the name comes from the cube's factory USB chip (CH9102), not from our system. Unplug other USB-serial devices and the cube will be the only entry.
What is normal while it writes. After you click, the browser asks which port: choose “USB Single Serial”. While the image is being written, the cube's screen may freeze or go dark. That is normal, so watch the bar in the browser instead. Do not unplug the cable while the bar is moving. It ends at 100 %, the cube restarts by itself, and the first start takes 15–30 seconds.
▣ UPDATE FROM 0.4.5 — KEEPS YOUR SETTINGS
Is your cube already running 0.4.5? Then you can move it to 0.4.6 without setting it up again. The update writes the system and leaves your Wi-Fi, paired speaker and nine stations where they are. Station logos are cleared once and come back by themselves, about four with each power-on. Made for 0.4.5 — from older releases we have not tried it, so use the factory image there.
This browser has no Web Serial.Web Serial blocked.
What we ran on these bytes. We put this update on our cube over an earlier 0.4.6 test build, with the settings kept, and it played through a Bluetooth speaker for 20 hours without a restart. The router’s Wi-Fi protection dropped the link seven times; each time Wi-Fi and the stream came back by themselves after 63–64 seconds, and the sound a second or two later. Not yet tried on these bytes: this browser button, the update from 0.4.5 and the factory image from zero. The update from 0.4.5 did keep the settings on an earlier 0.4.6 build of the same code. We did check that the button’s files are on the server and match their checksums.
One box to watch. The installer asks whether to erase the device; the window is in Polish and the box reads “Wyczyść urządzenie” (Erase device). Leave it unticked, click Next and then “Zainstaluj” (Install), and the cube keeps its Wi-Fi, speaker and stations. Ticking it gives a clean install: the settings are gone and the radio starts setup from the beginning.
Until 31 July this page had an update button that did not ask. With such a button the installer erases the whole memory and writes the system alone, and a cube without its start-up code does not start. Someone reported that it did not work, and we took it down. This mechanism may explain that report. We worked it out from the installer’s code and did not reproduce it on a cube. The new button asks, and it writes every part the cube needs to start.
Or from the terminal. Install esptool as described under “terminal install” below, download the file, then run this, with your port in place of PORT (on macOS type python3):
Other options: previous releases and terminal install (esptool)
▣ PREVIOUS RELEASES FROM THE BROWSER
This browser has no Web Serial.Web Serial blocked.This browser has no Web Serial.Web Serial blocked.This browser has no Web Serial.Web Serial blocked.This browser has no Web Serial.Web Serial blocked.This browser has no Web Serial.Web Serial blocked.
Terminal (Safari/Firefox/Linux, or if you prefer the classic way). esptool is Espressif’s official tool. You install it once and use it with a single command:
▣ WINDOWS
Install Python ↗, then tick “Add python.exe to PATH” in the installer.
Open the Command Prompt (Start → type “cmd”) and install the tool:
python -m pip install esptool
Find the port number: Device Manager → Ports (COM & LPT). E.g. COM5.
Flash the image (swap COM5 and the file name for yours):
After 1–2 minutes you'll see Hash of data verified. The cube reboots on its own straight into the radio.
STEP 05FIRST BOOT
Connect to Wi-Fi with your phone
The cube brings up its own temporary setup network and shows a QR code on its screen. Point your phone's camera at it and the phone offers to join the OpenRadio-Setup network by itself. The password for that network is the code shown in the left column of the cube's screen, under the label “Kod awaryjny” (Backup code) — type it in only if the camera offers nothing. Then the setup page opens by itself; if it does not, open 192.168.4.1 in the phone's browser. The setup network stays on until the cube is connected to your Wi-Fi, so there is no need to hurry.
The cube starts in Polish. That very first screen, the one with the QR code, has a “Język” (Language) button in its bottom-left corner — switch there and the rest of the cube follows.
Keep the phone in hand — that page asks two things. First the stations: it proposes nine to start with and one tap accepts them, or you pick your own nine from the catalogue of 236 tested ones, and you can go through the list on a computer first. Then your home Wi-Fi: choose your network from the list and type its password. The page disconnects itself at that point, the cube restarts with your nine stations and starts playing — that is when the phone stops being needed. The nine can be changed later in the settings, with no reflashing.
Your network is not on the list? The cube sees 2.4 GHz networks only. Most routers broadcast a 2.4 GHz network next to the 5 GHz one, sometimes under a separate name.
Wi-Fi gone later? A cube that is set up keeps trying your saved networks by itself and does not bring the setup network back. To add a network or change a password, tap the button in the top-right corner of the main screen, open Wi-Fi and tap “Add Wi-Fi network”.
STEP 06SPEAKER
Pair a Bluetooth speaker (optional)
The built-in speaker always plays first, so you can skip this step and the radio still works. Want better sound? Then pair a Bluetooth speaker once. The first pairing is the awkward part: every speaker does it a little differently, and it usually takes two or three goes before the two find each other. That is normal. It does not mean you did anything wrong.
Pairing for the first time. Put the speaker into pairing mode first, before you touch the cube. On most speakers a light starts blinking. How you get there depends on the model: usually you hold the Bluetooth button or the power button for a few seconds. Some speakers go into pairing mode by themselves the first time they are switched on, some announce it out loud, and the blinking looks different on each one. Your speaker’s own manual is the authority on that part. Right after the first start, a cube with no speaker in its memory searches for one by itself, so if your speaker is already blinking there is nothing to tap. To start a search later, tap the button in the top-right corner of the main screen, open Bluetooth and tap “Scan speakers” (once a scan has run, that button reads “Scan again”).
Give it about a minute. The cube tries again by itself every 15 seconds. It shows the name of the speaker it finds and connects to it by itself — there is no list to choose from and nothing to tap; you know it worked when the sound moves from the cube to the speaker. Tapping search again or restarting the cube does not make it any faster.
If the speaker was paired with a phone before, it may try to go back to that phone first. Switch Bluetooth off on the phone, or switch the other device off, for the time of the first pairing.
Every day after that, the order does not matter. The cube calls the remembered speaker when it starts, and the speaker calls the cube when you switch it on, so it works both ways round. Only the waiting time differs: usually a quarter of a minute, sometimes a few minutes. The radio plays from the built-in speaker meanwhile, and the cube keeps trying on its own. You do not have to press anything.
The speaker is still not there? Wait — for up to five minutes the cube is still trying by itself and the speaker will usually come back on its own. Only if there is still nothing after that: switch the speaker off and on once. If that does not help either, only then tap the button in the top-right corner of the main screen, open Bluetooth and tap “Scan speakers” to pair it afresh.
The cube remembers one speaker. Pair a second one and it takes the place of the first. One more thing from our measurements: the cube likes to sit more than 2 m from the router, whose transmitter can drown out Bluetooth.
During a 20-hour run on 0.4.6 we switched the speaker off and back on once; it was connected again about 3 seconds after it came back on. In one test we carried the speaker out of range, and the link held. On 0.4.5 we did the off-and-on test ten times: seven times the sound was back within 15 seconds, once after 16.5 seconds, and twice it took far longer (72 seconds with a phone paired to the speaker lying next to it, about 140 seconds on weak Wi-Fi). That was one speaker; we have not tried a second on 0.4.6. One thing to know: the cube’s own speaker does not play smoothly yet. With the Bluetooth speaker switched off it can pause about every three seconds, as on 0.4.5, even with the station’s data arriving in time, and it can also pause when the data arrives too slowly.
Common stumbles:
computer does not see the cube→9 times out of 10 it's a cable with no data lines. Grab another one; then the CH9102 driver (Step 03)
“Permission denied” / port busy→close the programs holding the serial port (Arduino IDE, serial monitors) and try again — no sudo needed
flash OK, but nothing plays→the cube has a battery, so pulling the cable does not switch it off. Hold the power button on the left side for about 6 s, until the screen goes dark, then press it once to switch the cube on again (or press the small RST button on the bottom); the first time a station starts, the cube buffers for about 2 s
the bar stopped, or the browser shows an error→unplug the cable, hold the power button on the left side for about 6 s until the screen goes dark, plug the cable back in and click Install again; writing the image a second time cannot harm anything
stuck anyway?→write through the contact form — a person answers, not a bot
Tomasz Fiedoruk — strategic advisor: AI, IT, marketing
Two AI agents wrote this system. I supervised it, and I answer for it. The name, the story and the distribution channel are mine too. The same way I built zenbox, the hosting brand I co-founded as CMO and took into Poland's top five. For clients I do both: I frame the decision, set the brand and communication, run the build and put my name on the result. Doing this since 2003, 8 systems in production, 47 projects under NDA. I take on work, from a one-off consultation to running an entire build.