Systems Project · 2023

DRS Asset
Tracker

RFID · ESP32 · Firebase · Flutter

A real-time asset tracking system built for an applied engineering team. UHF RFID tags on physical assets are scanned by an ESP32-powered reader, deduplicated in firmware, and streamed to Firebase — where a Flutter web app gives administrators a live view of every asset across every room.

Role
Systems Engineer — hardware, firmware, Firebase schema
Team
Applied Engineering Team, 2022–23
Stack
ESP32M6E Nano (UHF)Arduino C++FirebaseFlutter/DartFreeRTOS
View on GitHub →
System Architecture
01
RFID Tags
UHF EPC tags attached to physical assets
02
M6E Nano
SparkFun UHF reader, 5 dBm, N. America band
03
ESP32
Hardware serial, FreeRTOS tasks, 2s dedup, ArduinoJson
04
Firebase
Firestore batch writes, server timestamps, flattened schema
05
Flutter App
Assets, Map, Events Log, Admin panel — iOS/Android/Web
Key Design Decisions
Problem
High-frequency re-reads
Solution
Two-second deduplication window in firmware using a map of last-seen timestamps per EPC. Eliminates redundant cloud writes without missing genuine tag re-entries.
Problem
Accurate timestamps on embedded hardware
Solution
ESP32 syncs wall-clock time from the server on boot, accounting for network latency. All final timestamps are then applied server-side via Firestore transforms — single source of truth.
Problem
Blocking I/O in a tight read loop
Solution
WiFi monitoring and LED updates run as separate FreeRTOS tasks on the ESP32, keeping the RFID polling loop non-blocking and responsive regardless of network state.
Problem
Unknown M6E baud rate at startup
Solution
Firmware attempts target baud first, then falls back to 115200 bps during handshake. Handles different hardware configurations and power cycles gracefully.
Development Timeline
Feb 2023
Foundation
Established Firebase Firestore schema using a flattened, denormalized design — assets and locations stored separately to minimize data transfer per query. Proved WPA2-Enterprise WiFi auth on ESP32 for school-network integration.
Feb – Mar 2023
RFID Pipeline
Migrated M6E Nano comms from software to hardware serial (38400 baud, Serial2) for reliability. Built the full read-to-cloud pipeline: ESP32 deduplicates tags on a 2-second window, serializes with ArduinoJson, then HTTP POSTs to a local Flask endpoint which batch-writes to Firestore with server-side timestamps.
Mar 2023
Flutter App & Chassis v1
Flutter app with bottom-nav architecture — Profile, Assets, Map, Events Log. Designed and 3D printed the first PLA enclosure to house the breadboard, M6E reader, and power supply as a single portable unit.
Apr 2023
LED State Machine & Admin Panel
Non-blocking LED status feedback runs as a concurrent ESP32 task: green for normal operation, blue for WiFi loss, red for RFID module failure. Completed the Flutter admin control panel for live inventory management and tag-to-room assignment.
May 2023
Enclosure v3 & Map Integration
Third enclosure iteration with chamfered sensor mount and improved cable routing. Integrated flutter_map to visualise real-time asset locations across rooms on an interactive floor plan.
Hardware breadboard close-up
ESP32 + M6E Nano on breadboard
Full hardware assembly
Full assembly with power supply
Explore the source
Firmware, Flutter app, Firebase schema, 3D print files
GitHub →