The Brief
A garment dispensing and tracking system for hospitals, industrial facilities, and hospitality environments. The platform manages the distribution and return of uniforms, scrubs, and workwear: controlling access, tracking inventory in real time, and integrating with the customer's database and cloud backend. The system architecture, reader board firmware, controller software, and user interface were all designed and delivered as a complete, production-ready system.
System Architecture
The system is built around a two-tier expandable architecture. Each cabinet shelf or bay is served by a dedicated UHF RFID reader board, with one or more boards connecting via USB to a central embedded PC controller running Linux. The core controller application is written in Go, chosen for its concurrency model, straightforward cross-compilation for the embedded Linux target, and low operational overhead. This tiered design means the platform scales cleanly from a single-bay unit to a large multi-compartment installation without any change to the core architecture.
Reader Board — RP2040 & Impinj UHF
Each reader board pairs a Raspberry Pi RP2040 microcontroller with an Impinj UHF RFID transceiver. The RP2040 manages the full RFID interrogation cycle: initiating inventory rounds, collecting EPC tag data from the Impinj module, deduplicating reads across successive scans, and reporting structured tag events to the controller over USB. Beyond RFID, each board also controls and monitors the door lock mechanism, only releasing the lock on an authenticated command from the controller, and reporting lock state back for monitoring and fault detection.
Authentication & Access Control
The central controller handles all authentication. Users identify themselves via NFC card swipe or keypad PIN entry. The controller validates credentials and signals the appropriate reader board to release its door lock. Tag reads captured at the point of access are correlated with the authenticated user, building a complete audit trail of who took which items and when. Low-stock conditions are detected automatically and surfaced to operators both locally and via the cloud platform.
7" Controller GUI & Audio Prompts
A 7-inch touchscreen display provides the primary user interface at the cabinet. The GUI was designed for simplicity, showing cabinet status, compartment availability, and user prompts for authentication. Operators see real-time inventory levels, alert conditions, and connectivity status at a glance. The controller also drives audio prompts through the local speaker, guiding users through authentication, confirming successful dispense events, and alerting on errors. This matters in busy environments where eyes may not be on the screen.
Remote Access & Web Interface
Each controller runs a WireGuard VPN tunnel, providing secure encrypted connectivity back to the central infrastructure without exposing the unit directly to the internet. The management interface is a SvelteKit application served directly from the controller. It is accessible over the VPN tunnel from any browser, with no separate server infrastructure required. It gives operators and service engineers complete real-time visibility: inventory levels, door and lock states, reader board status, authentication logs, and system health. The same interface provides full remote control: adjusting configuration, managing user credentials, triggering diagnostics, and pushing updates to deployed units. Most support tasks need no site visit.
Software & Integration
The Go controller application manages all reader board communications over USB, processes RFID inventory events, handles authentication logic, serves the SvelteKit web interface, and maintains the local database, all within a single, lightweight binary running on the embedded Linux system. An integration layer connects to the customer's cloud platform and supports third-party laundry management software, giving operators fleet-wide visibility across all deployed cabinets. The SvelteKit web interface and local 7" touchscreen GUI share the same underlying data layer, ensuring a consistent view of system state whether accessed on-site or remotely over VPN.
Working on something similar?
If you're building an RFID tracking system, embedded controller, or connected hardware platform, we'd like to hear about it.
Start a conversation →