Skip to content

openBPM v1.0.0

Choose a tag to compare

@fobiat fobiat released this 19 Jul 14:54

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 upload

Or flash a prebuilt binary at offset 0x10000:

esptool.py --chip esp32 write_flash 0x10000 openBPM-tft.bin

MIT licensed.