Getting Started NEXT firmware

Why NEXT

Last updated Jul 10, 2026

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.

The important consequence

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.

  1. RP2040 — flash the NEXT firmware. Arduino Quick Start
  2. ESP32-C3 — flash HealthyBridge. Programming the ESP32-C3
Don’t skip the second chip

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