Getting Started NEXT firmware
Why NEXT
NEXT is a ground-up rewrite of the HealthyPi 5 firmware. If you’ve used the board before, this page explains what changed and why it was worth changing.
The short version: sample loss used to be something you tuned for. Now it’s something the architecture prevents.
What the old firmware looked like
You picked a firmware image based on what you wanted to do that day.
| Image | What you got | What you gave up |
|---|---|---|
| Basic | USB + BLE + SD + numeric vitals | — |
| BLE | Wireless streaming | — |
| Display | Waveform plots on the LCD | USB streaming, BLE, SD logging |
| Logger | SD recording | — |
Want plots on the screen and a USB stream? You couldn’t have both. Want to change your mind? Reflash.
Underneath, a single core did everything: read the sensors, run the DSP, format packets, write the SD card, feed the radio. When one of those took too long, sample acquisition waited. Under load, samples were dropped — quietly, and with no way to know how many.
What NEXT does instead
One firmware, features you switch on
The modes are gone. There is one production firmware, and each former mode is now a line of code:
HealthyPi5.computeVitals(); // heart rate, SpO2, respiration
HealthyPi5.streamOpenView(); // USB stream
HealthyPi5.recordSD(); // microSD recording
HealthyPi5.enableBridge(); // BLE / Wi-Fi
HealthyPi5.begin();
All four at once, on the same board, at the same time. Delete a line to drop a feature.
Acquisition can no longer be starved
The RP2040 has two cores. NEXT gives one of them exactly one job.
- Core 1 does nothing but read the sensors at 128 SPS and push samples into a lock-free ring. It calls no operating-system function that could block it. Its only output is that ring.
- Core 0 runs everything else — DSP, USB, SD, wireless — as separate scheduled tasks, each with its own queue.
The ring holds 512 samples, about four seconds of slack. A stall on core 0 has to last longer than that before a single sample is at risk.
A slow SD card, an unplugged ESP32-C3, or a heavy DSP routine can only ever drop its own samples. It cannot slow down acquisition, and it cannot affect any other consumer.
Each of those drops is counted, and the count is printed once a second. You are never guessing whether you lost data.
That’s the real change. Losslessness stopped being a tuning exercise and became a structural property.
It tells you when something is wrong
NEXT emits a telemetry line once per second on the debug UART, with per-sink drop counts, uptime, and link health. A hardware watchdog resets the board if a task hangs. Faults dump state rather than failing silently.
Wireless became its own computer
This one surprises people, so it’s worth being precise.
| Old | NEXT | |
|---|---|---|
| RP2040 | Ran the whole Bluetooth host stack | Acquires; hands finished vitals to the ESP32 |
| ESP32-C3 | A bare Bluetooth HCI controller — just a radio | Runs its own BLE stack, plus Wi-Fi, MQTT, a web dashboard |
Bluetooth used to cost the RP2040 real time and memory, on the same core doing acquisition. Now the ESP32-C3 is a self-contained wireless application, and the RP2040 sends it framed vitals over a UART. If the radio stalls, the host never notices.
You also get things the board simply didn’t have: a live web dashboard at http://healthypi.local, and MQTT publishing.
Arduino stopped being the toy
Previously the Arduino code was published to help people read the design; serious work happened in Zephyr. It also shipped with the wrong pins for current boards.
Now the Arduino firmware is the production firmware — same dual-core architecture, byte-compatible OpenView 2 stream, correct pin map — plus eleven teaching sketches that bring up one sensor at a time. You can start with a 40-line ECG sketch and end at the full firmware without switching toolchains.
Side by side
| Old firmware | NEXT | |
|---|---|---|
| Firmware images | 4 (Basic / BLE / Display / Logger) | 1 |
| USB + BLE + SD together | Only in Basic | Always |
| Acquisition | Best-effort, shared with everything else | Dedicated core, lossless by design |
| Sample loss | Silent | Counted and reported every second |
| Fault isolation | A slow consumer stalls acquisition | A slow consumer drops only its own data |
| Watchdog / telemetry | — | Hardware watchdog + 1 Hz telemetry |
| Wireless | RP2040 ran the BLE host | ESP32-C3 runs BLE + Wi-Fi + MQTT + dashboard |
| Web dashboard / MQTT | — | ✅ |
| Arduino support | Teaching only, mis-pinned | Production parity, 11 tutorials |
| On-board display | ✅ | Zephyr only, for now |
What you give up
Being honest about the trade, because there is one.
- The on-board display isn’t supported by the Arduino NEXT firmware yet. The LVGL vitals screen is held back pending hardware validation and returns in a later release. If you use the display today, stay on the Zephyr firmware, which still drives it.
- SD recordings are binary, not CSV. NEXT writes a compact
/REC*.BIN— a 32-byte header plus 16-byte records. That’s faster and lossless, but you parse it yourself. The format is documented, with a short Python snippet. - You can’t pull SD logs over Bluetooth from the phone app on the Arduino path. Read the card directly, or use Zephyr.
- Upgrading means flashing two chips. The ESP32-C3 needs its own new firmware. It’s one command, but it isn’t optional — see below.
Should you move to NEXT?
Yes, if you care about not losing samples, you want USB and BLE and SD at the same time, you want a Wi-Fi dashboard, or you want to write your own firmware or signal processing.
Wait, if the on-board display is central to how you use the board. Come back when the LVGL screen lands.
Moving an existing board
Two chips, two firmwares. Both must be flashed.
- RP2040 — flash the NEXT firmware. Arduino Quick Start
- ESP32-C3 — flash HealthyBridge. Programming the ESP32-C3
Your ESP32-C3 currently holds a Bluetooth HCI controller image, not HealthyBridge — NEXT cannot talk to it. Flash the RP2040 alone and you’ll have working USB streaming, SD recording and vitals, but no Bluetooth at all: the device won’t even appear in the phone app.
The BLE service map is unchanged, so once both chips are updated the OpenView 2 app connects exactly as before.
Next
- Choosing Your Firmware Path — Arduino or Zephyr.
- Arduino Quick Start — first signal in ten minutes.
- Release Notes — the full changelog.