Blog ·
The first test stand
The first version of the station was not a device but a desk full of parts:
| Part | What |
|---|---|
| Board | Olimex ESP32-DevKit-LiPo (classic ESP32, 4 MB flash, no PSRAM) |
| NFC reader | MFRC522 module on SPI |
| Scale | HX711 with a single-point load cell of about 5 kg |
| Inventory | Spoolman 0.27 on the local network, with my real spools in it |
The firmware is written with ESP-IDF. The NFC and scale code live in two separate libraries, one for spool tags and one for load cells, so that another reader or ADC can be added later without touching the application.
Day one and two: tags
The reader part worked quickly. On the second day the station could:
- read the tags of Bambu Lab spools and find the spool in Spoolman,
- write TigerTag and OpenTag3D data to blank NTAG215 stickers and read them back,
- link a tag to a spool in Spoolman,
- erase a tag it had written.
Real data brought the first surprises. Spoolman had two spool entries with the same Bambu Lab tray UID, so “find the spool for this tag” had two answers. The station now never picks one by itself: it shows all matching spools and lets you choose.
Names do not always match either. The TigerTag brand table spells a vendor one way, my Spoolman another, so the automatic match found nothing. That is fine as long as the station says so and offers a list instead of guessing.
The scale: harder than it looks
The load cell was not mounted at first, and the first calibration was stored without a zero. The result: an empty scale showed anything between 35 and 85 g and still reported a stable reading. That is the worst kind of error, because it looks plausible.
The station only reads a tag when the weight is stable, so a scale like that would propose wrong weights with full confidence. The fixes for that are in the next post.
The web interface
Everything runs in the browser: the station serves its own page, and the page talks only to the station. On the phone that means: put the spool down, tap Read, check what the station proposes, confirm.
Questions or ideas? Join the discussion on GitHub. Get updates by e-mail.