How to Build an UWB Indoor Positioning System using ESP32 and Qorvo DWM3
2025-10-17 | By Rinme Tom
License: General Public License Bluetooth / BLE Breadboards EEPROM Arduino
This project presents a fully functional DIY indoor positioning system using Ultra-Wideband (UWB) technology, specifically built with the ESP32 microcontroller and Qorvo DWM3000 UWB modules. It enables centimetre-level real-time tracking accuracy within indoor environments and is designed for asset tracking, robotics, and AR/VR applications.
Project Overview
This solution addresses the limitations of GPS and other wireless technologies (Bluetooth, Wi-Fi) for indoor positioning, achieving up to 10 cm accuracy using UWB’s time-of-flight measurements. The system uses at least three stationary anchors (ESP32 + DWM3000 modules) and a mobile tag device. The tag exchanges precise UWB pulses with anchors, performing double-sided two-way ranging (DS-TWR), allowing trilateration of its exact indoor location.
Key Technologies and Components
Ultra-Wideband (UWB): UWB measures the time radio pulses travel between devices, offering high resistance to multipath interference from walls and metal surfaces, and outperforming Wi-Fi and Bluetooth for sub-meter accuracy indoors.
Qorvo DWM3000: A compact, ready-to-use UWB RF module with integrated antenna, built around DW3110 IC, compliant with IEEE 802.15.4z, supporting global operation and real-time location applications. Communicates with ESP32 via SPI.
ESP32 Microcontroller: Acts as both tag and anchor host µC. Manages SPI-based ranging, data filtering, and Wi-Fi communication for real-time data streaming.
Python Visualisation: The tag transmits JSON data over Wi-Fi to a Python script running on a PC, which applies trilateration (least squares optimisation) to calculate and plot the tag’s location live on a floor plan, updating as the tag moves around the space.
Project Methodology
Anchor placement: Three or more anchors are installed at known fixed coordinates in the room.
Tag initiation: The mobile tag device continuously ranges to all anchors.
Double-sided TWR: Tag and anchors exchange UWB signals and measure timestamps down to fractions of a nanosecond.
Trilateration: Collected distances are processed by a Python script to determine the exact position using least squares optimisation.
Live tracking: Real-time positional and signal strength data are streamed and visualised, providing robust tracking even in cluttered or metallic environments.
Hardware and Firmware Essentials
ESP32-DWM3000 pairs for both tag and anchors
Firmware for both roles, optimised for SPI speed, ranging protocol, error handling, and anchor identification
Wi-Fi-based TCP data streaming for remote visualisation
Median filtering and RSSI checks ensure reliability and accuracy
Applications
Industrial asset tracking
Indoor robotics positioning
AR/VR localisation in enclosed spaces
Precise navigation in warehouses, airports, or factories
This project delivers a scalable, open-source foundation for highly accurate indoor location systems using modern UWB technology, ideal for maker, industrial, and research environments. This UWB indoor positioning system using ESP32 demonstrates how UWB technology can deliver professional-grade location tracking performance in a maker-friendly package, opening up possibilities for robotics navigation, warehouse tracking, and VR/AR indoor localisation applications.
