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 • Smart switch • Live brew ratio • Shot history • Target yield alert • GaggiMate BLE • Beanconqueror BLE • Wi-Fi web UI
Features • Hardware • 3D Print Files • 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.
![]() Dashboard |
![]() Settings |
![]() Calibration |
![]() Updates |
![]() Shot Log |
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.
⚠️ Safety notice: This feature requires fitting a Shelly relay into your machine's mains electrical circuit. This work involves mains voltage and must only be carried out by a competent person who understands the risks. The authors of this project accept no liability for damage, injury, or death arising from electrical work carried out in connection with this feature. This is entirely optional — CaffePeso is fully functional without it.
CaffePeso can automatically stop your espresso machine by controlling a Shelly smart relay fitted inline with the pump or solenoid valve. This does require electrical work inside the machine and should only be carried out by a competent person.
When armed with a dose and target ratio, CaffePeso monitors weight and flow rate during the shot and fires a relay-off command when the projected final yield is about to hit the target:
trigger = target_weight − (flow_rate × after_stop_time)
The After-Stop Time (AST) — the seconds of drip after the pump cuts — is learned automatically from each shot and stored per dose/ratio combination, improving accuracy over time.
A post-trigger safety interlock keeps the relay off until you perform a hold-tare, preventing the pump accidentally restarting between shots.
See Section 14 of the User Guide for setup instructions.
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
Supported boards:
- ESP32-S3 SuperMini (4 MB flash) — default
- XIAO ESP32S3 (8 MB flash)
All enclosure files are included in this repository and available as a single download — no need to navigate anywhere else.
The ZIP contains:
| File | Purpose |
|---|---|
WeighMyBru² - Top.3mf |
Main lid — standard wall thickness |
WeighMyBru² - Top (0.8mm).3mf |
Main lid — 0.8 mm walls (lighter) |
WeighMyBru² - Bottom.3mf |
Base |
WeighMyBru² - Bottom Supported.3mf |
Base with built-in print supports |
WeighMyBru² - ESP32 Clamp.3mf |
Board clamp for ESP32-S3 SuperMini |
WeighMyBru² - XAIO Clamp.3mf |
Board clamp for XIAO ESP32S3 |
WeighMyBru² - Screen Clamp.3mf |
OLED display clamp |
WeighMyBru² - Touch Clamp.3mf |
Touch button clamp |
WeighMyBru² - M2 Washer.3mf |
M2 washer spacer |
Each .3mf also has a matching .step file for editing in CAD software.
These files are from the WeighMyBru² project by 031DevStudios and are licensed under CC BY-NC-SA 4.0.
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
- Smart switch: predictive Shelly relay control to stop the machine at target yield, with per-dose AST learning and post-trigger safety interlock
This derivative is also released under CC BY-NC-SA 4.0.
This project is provided "AS IS" without warranty of any kind. The author makes no representations about suitability, reliability, or fitness for any purpose. Your use is entirely at your own risk. The author shall not be liable for any damages arising from use, including but not limited to direct, indirect, incidental, or consequential damages.
- 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




