A standalone PulseSensor heart-rate dashboard for the Waveshare ESP32-S3-RLCD-4.2, the maker board with a 4.2″ ST7305 400 × 300 monochrome reflective LCD. Flash it from your browser, wire three pins, and watch your live pulse on a daylight-readable screen — no app, no WiFi, no IDE.
This is the reflective-LCD sibling of the color-touchscreen PulseSensor CYD. The firmware is called LiveCyberDeck.
Educational biofeedback demo. Not a medical device and not intended for medical use.
The easiest path — no toolchain required:
- Tutorial + one-click installer: pulsesensor.com/pages/waveshare-rlcd
- Web installer (this repo, via GitHub Pages): worldfamouselectronics.github.io/esp32-s3-RLCD-4.2
Use Chrome, Edge, or Brave on a desktop or laptop (WebSerial is required; mobile browsers don't support it yet).
Putting the board in flashing mode: the ESP32-S3 native USB does not auto-reset into the bootloader. Before clicking Install, hold
BOOT, tapRSTwhile holdingBOOT, then releaseBOOT. Then pick the board's USB serial port.
The board exposes a rear 2 × 8 female header. Match the PulseSensor's three wires to the printed labels:
| PulseSensor wire | Waveshare rear header |
|---|---|
| Red — +V | 3V3 |
| Black — GND | GND |
| Purple — Signal | GP1 / GPIO1 / ADC1_CH0 |
Use 3V3, not VBUS. The firmware reads the sensor on GPIO1, so the purple signal wire goes to the lower-row GP1 socket (4th lower pin from the left in the line art below). Powering from VBUS can clip or flatten the waveform.
LiveCyberDeck opens with a boot splash, then a live dashboard:
- Live pulse window — a solid scrolling waveform with open/filled beat circles and a dashed
TRIGGERline at the detection threshold. - Signal status & strength —
SIGNAL SEARCH→QUALIFIED BEAT, paired with a strength meter that fills as the signal locks. - Big BPM & IBI panels — each with a large readout plus an edge-to-edge sparkline of recent qualified beats and low / normal / high reference lines.
- Header telemetry — a heart that pulses on each qualified beat, battery % + voltage, onboard SHTC3 temperature & humidity, firmware version, and a live
UP h:mm:ssuptime. - Light / dark toggle — tap
KEY(GPIO18).
Waveshare ESP32-S3-RLCD-4.2 — ESP32-S3, 16 MB flash, 8 MB PSRAM, ST7305 400 × 300 reflective LCD.
| Function | Pin |
|---|---|
| PulseSensor signal | GPIO1 (ADC1_CH0, rear-header GP1) |
| Display SCK / MOSI | GPIO11 / GPIO12 |
| Display DC / CS / RST | GPIO5 / GPIO40 / GPIO41 |
KEY button (light/dark) |
GPIO18 |
BOOT button |
GPIO0 |
| I²C SDA / SCL (SHTC3 @ 0x70) | GPIO13 / GPIO14 |
| Battery sense | ADC1_CH3 (GPIO4) |
PulseSensor Playground expects 10-bit samples, so the firmware calls analogReadResolution(10) at startup; the beat threshold (TRIGGER line) starts at setThreshold(550). Battery and SHTC3 readouts are optional — the dashboard runs without them.
This is a PlatformIO Arduino/C++ project (env waveshare_rlcd42).
# build
platformio run -e waveshare_rlcd42
# build + flash (put the board in flashing mode first: hold BOOT, tap RST, release BOOT)
platformio run -e waveshare_rlcd42 -t upload
# serial monitor
platformio device monitor -b 115200Firmware name/version/date come from the APP_NAME / APP_VERSION / APP_DATE build flags in platformio.ini.
The pre-built binaries in firmware/ and manifest.json are what the browser installer flashes (ESP Web Tools).
Every reading comes from the PulseSensor Playground library — getLatestSample(), sawStartOfBeat(), isInsideBeat(), getBeatsPerMinute(), getInterBeatIntervalMs(), getPulseAmplitude() — with the "snappy-lock" beat-detection behavior carried over from the CYD build.
MIT — see LICENSE. Made by World Famous Electronics. Heartbeats in your project, lickety-split. ♥
