openBPM v1.0.0
First tagged release of openBPM — a tap-tempo BPM counter and beatmatch assistant for vinyl DJing on an ideaspark ESP32-WROOM-32.
Features
- Tap tempo with a rolling 8-interval average, outlier rejection and 3s idle auto-reset
- Two decks (A/B) with a pitch % readout — exactly how far to move the pitch fader
- Octave-aware matching — half/double-time records still line up, tagged
x2/1/2 - Drift timer — how long until the decks slip a full beat apart (
60 / ΔBPM) - Pitch bar with a centre detent, colour-coded green/amber/red on the TFT
- Pitch-range warning when a match needs more than ±8 %
- Beat pulse indicator as a visual metronome
- Tap-jitter readout so you know whether to trust the reading
- 8 named BPM slots persisted to flash, survive power-off
- WiFi library — the ESP32 hosts its own AP so you can name records and export CSV from a phone
- Screen sleep after 2 minutes idle
Supported boards
| Firmware | Board |
|---|---|
openBPM-tft.bin |
ideaspark ESP32-WROOM-32 + 1.14" ST7789 240×135 colour |
openBPM-oled.bin |
ideaspark ESP32-WROOM-32 + 0.96" SSD1306 128×64 mono |
openBPM-pinscan.bin |
Diagnostic — reports which GPIO each onboard button uses |
Buttons
Every action accepts several pins, so the board's onboard buttons and external wired buttons both work. Defaults: TAP = GPIO0 (onboard BOOT) + GPIO27, SWAP = GPIO26, MODE = GPIO25. Use the pin scanner to identify your board's onboard buttons and edit the lists in src/main.cpp.
Flashing
Build from source with PlatformIO:
pio run -e tft -t uploadOr flash a prebuilt binary at offset 0x10000:
esptool.py --chip esp32 write_flash 0x10000 openBPM-tft.binMIT licensed.