π Public Beta β This is beta software, provided as-is. Expect bugs, rough edges, and missing documentation. Use at your own risk.
SpoolmanScale is an open-source ESP32-based filament scale with NFC reader, integrating directly with Spoolman.
Yes, another filament scale β but hear me out, this one might actually earn a spot next to your printer. π
Place a spool on the scale β it reads the NFC tag, pulls the spool data from Spoolman, and lets you update the remaining weight, log a drying date, or archive empty spools. All from a 3.5" touchscreen. No phone needed.
A running Spoolman instance on your local network is required β this is what stores all your spool data.
π Public Beta is live! Firmware is released and available via the Web Flasher or as a direct download from Releases.
Please note: This is a beta release. A more detailed guide is in the works, but this README already covers all the essential steps to get your SpoolmanScale up and running. If you run into issues, join the Discord β happy to help.
Currently tested with a Spoolman library of 150+ active spools and running stable. If you have an even larger collection β I'd love to hear how it holds up!
---
- π·οΈ Bambu Lab NFC tags β place a spool on the scale and SpoolmanScale reads it instantly: material, color, vendor, remaining weight and drying history appear automatically. No tapping required
- π Bambu Lab spool linking β first time using a spool? SpoolmanScale finds the matching entry in Spoolman automatically by filtering unlinked spools by material type, subtype (e.g. HF, CF, Matte) and color similarity β so you only see spools that actually match your tag
- π Third-party spool linking β place any NTAG sticker β select vendor and material β pick from a filtered list β linked in Spoolman via
extra.tag - π Copy spool β running low? Place a new spool on the scale, tap Copy spool, and SpoolmanScale creates an identical entry in Spoolman, tags the NFC chip, and logs the current weight β all in one step
- βοΈ Live weight (NAU7802) β moving average filter, TARE, live diff vs. Spoolman remaining weight
- π‘ Spoolman REST API β update remaining weight, set initial weight, set spool weight (per spool / filament / vendor), log drying date, archive spools
- π± Touchscreen UI (LVGL 8.3, 480Γ320) β settings menu, confirmation popups, sleep/wake, no-tag timer
- βοΈ On-device Wi-Fi setup β scan networks, enter credentials and Spoolman IP directly on the touchscreen
- π Firmware updates (OTA) β update via browser upload or check for new releases directly from the settings menu. No IDE, no cables, no computer needed
- β‘ Web Flasher β first-time flash via browser over USB, no IDE needed: niko11111.github.io/SpoolmanScale
- π DE / EN language support β language selection on first boot, switchable in settings
- π Power management β display dimming, deep sleep, wake via touch
- πͺ΅ SD card logging β insert a microSD card and SpoolmanScale logs all events automatically. Download logs via browser β no disassembly needed. Useful for diagnosing issues and tracking device behavior during beta phase
| Component | Model | Link |
|---|---|---|
| MCU + Display | WT32-SC01 Plus (ESP32-S3, 480Γ320, ST7796) | AliExpress |
| Debug Board (recommended) | ZXACC-ESPDB | AliExpress |
| NFC Reader | PN532 | AliExpress |
| Scale ADC | NAU7802 (Adafruit) | AliExpress |
| Load Cell | YZC-133 2 kg beam cell (5 kg works as well) | AliExpress |
| Connector Cables | STEMMA QT / JST cables | AliExpress |
| Connector Cables (recommended) | Micro JST 1.0 SH 5-pin β for easier assembly and maintenance | Amazon |
| USB-C Panel Mount 90Β° Extension | 90Β°, 30 cm β tested and working with full USB-C PD and data support | AliExpress |
Additional materials:
- Thin stranded wire in 5 different colors (black, red, yellow, white, ~30β40 cm each)
- 2Γ M5Γ25 socket head screws, 2Γ M4Γ15 socket head screws
- 9Γ M2.5Γ5 self-tapping screws, 2β4Γ M2Γ4.4 self-tapping screws (something like this)
- Self-tapping screws are recommended, but standard machine screws (M2.5Γ5, M2Γ4) will likely work as well if you have them on hand.
The printable enclosure files are available on MakerWorld: π makerworld.com/@FormFollowsF
V0.6.0+ (ideas & community requests)
- Drying reminder β notify when filament hasn't been dried in a while (configurable per material or manual threshold)
- Fix: occasional crashes during first-time setup and while navigating the settings menus
- Fix: crash on invalid Spoolman IP
- Filaman compatibility β integration with Filaman) is being explored, so spools tagged with Filaman could be recognized by SpoolmanScale and vice versa. Early-stage investigation β no promises on timing yet
- More ideas welcome β feel free to open an issue or join the Discord!
β οΈ A detailed build guide with wiring diagrams and photos is coming soon. This is a quick overview.
Step 1 β Order parts & print the enclosure
Order everything from the hardware list above. AliExpress shipping typically takes 2β3 weeks, so order early.
While waiting, print the enclosure. All parts fit on 3 print plates (currently distributed across 4). If you can print TPU, use it for the feet β they grip better. Otherwise, self-adhesive silicone feet work just as well.
If you run into print fit issues (enclosure too tight or too loose for your display), please report it on MakerWorld or in the Discord β display dimensions can vary slightly between batches, and sharing your experience helps improve the fit for everyone.
Step 2 β Flash the board first
Before assembling anything, flash the firmware to the bare board via the Web Flasher. This lets you confirm the board is working before you start wiring.
Once flashed, connect components one at a time β NFC reader first, then the scale ADC and load cell β and verify each one comes to life before moving on. Much easier to debug at this stage than inside a fully assembled enclosure.
Step 3 β Assemble & close up
Wire everything up according to the wiring section below. The recommended assembly order for the PN532 is described there in detail. Do a final check that all components are working, then press the display into the enclosure. It should sit snugly without screws. If you want extra security, it can be fastened from the back β but it likely won't be necessary.
Step 4 β Calibrate the scale
Once you're through the first-time setup, go to Settings β Scale β Calibration.
First, tare the scale with nothing on it. Then place an object with a known weight β ideally something close to 1000 g, like a full filament spool or any package you can verify on a kitchen scale beforehand. Enter the exact weight in grams into the numpad and save. From that point on, the scale will show accurate readings. The more precise your reference weight, the more accurate your results will be.
All components connect to the I/O connector on the WT32-SC01 Plus using the included 7-pin cable. The I/O socket on the board has 8 pins β plug the 7-pin cable in flush to the left.
The PN532 and NAU7802 share the same I2C bus (SDA/SCL) and are wired in parallel β but do not daisy-chain them via the NAU7802's STEMMA QT passthrough, as that port only supplies 3.3 V and the PN532 requires 5 V.
| Pin | Color | Signal | Connect to |
|---|---|---|---|
| 1 | Red | 5 V | PN532 VCC + NAU7802 VIN |
| 2 | Black | GND | PN532 GND + NAU7802 GND |
| 3 | Yellow | GPIO10 (SDA) | PN532 SDA + NAU7802 SDA |
| 4 | Green | GPIO11 (SCL) | PN532 SCL + NAU7802 SCL |
| 5 | Blue | β | unused |
| 6 | White | β | unused |
| 7 | Brown | GPIO12 (RST) | PN532 RST |
The PN532 has no connector β wires must be soldered directly. Always solder from the back of the PCB β there is not enough clearance on the front once it's mounted.
Recommended assembly order:
- Solder all other components first (NAU7802, load cell, WT32 breakout cable) with the enclosure open and everything accessible.
- Leave the PN532 wires loose and long enough to work with.
- Feed the loose wires up through the PN532 mount opening from below.
- Solder the wires to the back of the PN532 PCB.
- Slide the PN532 into its mount and pull the excess cable back down into the enclosure.
- Route and secure the cables so they don't press against the weighing platform.
If you use a 5-pin JST SH 1.0mm connector on the PN532 pigtail, the mount opening is just large enough to pass the connector through β which means you can do all the soldering outside the enclosure and simply plug it in during final assembly.
| Pin | Color (3rd party) | Signal | WT32 Cable |
|---|---|---|---|
| 1 | Black | GND | Pin 2 (Black) |
| 2 | Red | 5 V | Pin 1 (Red) |
| 3 | Yellow | SDA | Pin 3 (Yellow) |
| 4 | White | SCL | Pin 4 (Green) |
| 5 | Orange | RST | Pin 7 (Brown) |
Soldering directly to the labeled pads (VIN, GND, SDA, SCL) on the NAU7802 is the safest and most reliable option. If you prefer to use the STEMMA QT connector, note that the pin order of third-party JST SH 1.0mm cables does not match the WT32 cable β you will need to re-pin the connector or swap the wires:
| STEMMA QT Pin | Color (3rd party) | Signal | WT32 Cable |
|---|---|---|---|
| 1 | Black | GND | Pin 2 (Black) |
| 2 | Red | 5 V | Pin 1 (Red) |
| 3 | Yellow | SDA | Pin 3 (Yellow) |
| 4 | White | SCL | Pin 4 (Green) |
Connect the four wires of the YZC-133 load cell to the NAU7802 screw terminals:
| Load Cell wire | NAU7802 terminal |
|---|---|
| Red | E+ (excitation +) |
| Black | Eβ (excitation β) |
| White | A+ (signal +) |
| Green | Aβ (signal β) |
If the scale shows negative values, the signal wires are reversed β swap A+ and Aβ.
The USB-C panel mount extension needs to be trimmed before installation. Using a utility knife, carefully shorten the connector housing little by little until it no longer protrudes beyond the edge of the display. Take your time β small cuts at a time. Once flush, it will fit cleanly into the enclosure.
---Occasional reboots / UI freezes during menu navigation In some cases, navigating between settings screens or completing the first-time setup can cause the UI to freeze or the device to reboot. If the UI freezes, unplug the device to force a reboot β no data is lost, and the device starts back up reliably within seconds. Annoying, but not dangerous. This is a known issue with the LVGL overlay architecture on the ESP32 and is on the list to fix.
No umlauts in German UI (Γ€, ΓΆ, ΓΌ) The LVGL UI library uses a compiled bitmap font (Montserrat) that does not include umlaut characters out of the box. Only the characters explicitly compiled into the font are available, and the standard LVGL build omits Γ€, ΓΆ, ΓΌ. As a workaround, the German strings currently use ae/oe/ue substitutions (e.g. "Einstellungen" stays fine, but "GrΓΆΓe" becomes "Groesse"). A future version may add proper umlaut support via a custom font β but this is not guaranteed.
SpoolmanScale uses Spoolman's extra fields to store NFC tag UIDs and drying dates. The following extra fields need to be defined in your Spoolman settings. SpoolmanScale checks for these fields during the first-time setup and creates them automatically if they don't exist yet:
| Field | Type | Used for |
|---|---|---|
tag |
Text | NFC tag UID (Bambu UUID or NTAG UID) |
last_dried |
DateTime | Last drying date |
Recommended add-on: OpenSpoolMan
OpenSpoolMan connects to your Bambu printer via MQTT and reads which filament is loaded in which AMS tray. It uses the same extra.tag field to identify spools β so if your Bambu spools are already linked in SpoolmanScale, OpenSpoolMan will recognize them instantly without any additional setup. Both tools run alongside each other and complement each other well.
- PandaBalance 2 by the Makerworld community
- SpoolEase by yanshay
Not affiliated with Spoolman. Uses the Spoolman REST API.
Full wiring diagrams and build guide will be published at a later date.



















