Note
This project is under active development. Features and hardware design may evolve. Feedback and contributions welcome.
A smart, automated espresso scale with a web interface — no custom PCBs required.
Armed auto-start • Auto-stop • Live brew ratio • Shot history • Target yield alert • GaggiMate BLE • Beanconqueror BLE • Wi-Fi web UI
Features • Hardware • Installation • Documentation • Attribution
CaffePeso is a fork of WeighMyBru² by 031DevStudios, adding brewing automation to an already excellent DIY espresso scale. It runs on an ESP32-S3 and hosts its own web interface over Wi-Fi — no external server or hub required.
It is designed to work alongside GaggiMate via Bluetooth, or as a standalone scale. Inspired by the EspressiScale approach, but built from easily sourceable off-the-shelf parts — no custom PCBs.
Hold tare to arm the scale before your shot. The timer starts automatically when the first drip hits the cup — no button press needed at the machine.
The scale remembers your cup weight. On the next shot, place the same cup and tap tare — it recognises the cup and arms itself automatically.
Set your dose once. The OLED displays a live 1:X ratio as yield builds in the cup, so you always know where you are in the extraction.
Configure a target ratio (e.g. 1:2.0). When yield approaches your target, the OLED flashes and the web UI turns amber — giving you time to stop the shot.
The last 10 shots are automatically saved to non-volatile memory: dose, yield, time, and ratio. Survives reboots and power loss. Displayed in the web UI dashboard.
A full dashboard hosted directly on the ESP32-S3 — calibration, settings, shot history, OTA firmware updates, and real-time graphs. No app required.
Once flow has been active for at least 8 seconds, the timer stops automatically when flow drops below 0.5 g/s and remains there for 2 seconds. No manual stop needed at the end of a shot.
Native Bluetooth scale support for GaggiMate and Beanconqueror. CaffePeso uses the same BLE protocol as WeighMyBru² — GaggiMate's existing WeighMyBru support works with CaffePeso without any changes on either side. Beanconqueror can connect to CaffePeso for real-time weight, tare, and timer control.
The hardware is identical to the original WeighMyBru² project. See the original WeighMyBru² repository for:
- Bill of Materials (BOM) with purchase links
- Wiring guides and pin assignments
- Enclosure CAD files and print instructions
Supported boards:
- ESP32-S3 SuperMini (4 MB flash) — default
- XIAO ESP32S3 (8 MB flash)
No software installation required — flash directly from your browser:
- Visit the flash page
- Connect your ESP32 board via USB
- Click Install Firmware and select your board
- Follow the prompts
✅ No VS Code or PlatformIO needed ✅ Installs firmware + filesystem in one step ✅ Works on Chrome, Edge, and Opera
Requires VS Code with the PlatformIO extension.
# Upload firmware (default: esp32s3-supermini)
pio run --target upload
# Upload filesystem (required for web interface)
pio run --target uploadfs
# For XIAO ESP32S3 explicitly:
pio run -e esp32s3-xiao --target upload
pio run -e esp32s3-xiao --target uploadfsImportant: Always flash firmware and filesystem using the same environment. Flashing the wrong environment (e.g. xiao firmware onto a supermini) causes a boot crash due to flash size mismatch (4 MB vs 8 MB).
Full user guide: docs/USER_GUIDE.md
For hardware build guides and video walkthroughs, see the original project.
Contributions welcome — bug fixes, features, and documentation improvements are all appreciated. Please test your changes before submitting a pull request.
This project is a derivative of WeighMyBru² by 031devstudios, licensed under CC BY-NC-SA 4.0.
Additions in this fork:
- CaffePeso branding — dark warm-brown web UI theme, Playfair Display italic title, OLED splash
- Armed auto-start: hold tare to arm; timer triggers on first drip; auto-re-arms when same cup detected
- Live OLED brew ratio during extraction
- Target yield alert: OLED flashes and web UI turns amber when approaching target ratio
- Cup weight persistence across reboots (NVS)
- Shot history: last 10 shots stored in NVS, displayed in web UI
- Power button redesigned: tap cycles timer (start → pause → reset); hold 1 s = status page; hold 3 s = sleep
- Wi-Fi always-on: toggle removed; device deep-sleeps to save power instead
- Auto-stop on flow cessation: timer stops automatically when espresso flow ends
- Auto-tare on vessel placement: tares automatically when a stable weight is detected (configurable threshold)
- Post-brew idle reset: auto-resets and re-tares after a configurable idle period
- Arm button in web UI: arm/disarm directly from the dashboard without touching the physical button
This derivative is also released under CC BY-NC-SA 4.0.
- WeighMyBru² by 031devstudios — the hardware design and original firmware this project is built on (CC BY-NC-SA 4.0)
- GaggiMate by jniebuhr — for native BLE scale support
- EspressiScale — inspiration for the approach
Built with ☕ by a home espresso enthusiast
Not affiliated with any espresso machine manufacturer