Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


This project is a 3D scanner for WiFi signals.

I built this thing to visualize how WiFi moves through space. To do so I used an old 3D printer frame and an ESP32 NodeMCU. The ESP32 probe was moved in a grid pattern and every 1 cm an RSSI (signal strength) measurement was captured.

The ESP32 was connected to the old print head and hosted an API with the RSSI measurements. The two axis have been controlled by an Ethersweep controller each and a python script collected and visualized the captured data.

What I found interesting was the distance between the light and the dark spots in the plot. They were around 12.5 cm which is the wavelength of 2.4GHz WiFi. Also, I didn't think that such low spec test equipment was able to create a detailed map of how WiFi spreads through space.

3D visualization of the intensity changes in a WiFi signal:

PCB Photo

One slice of the scan:

PCB raw B

The scanner:

PCB raw B

How to build a 3D WiFi scanner:

  1. Install the 'node_mcu_code' on the NodeMCU. (change Wifi credentials to your network)
  2. Open a serial monitor and read the IP of the NodeMCU. Paste it to a browser and test if you get an RSSI readout.
  3. Take two Ethersweep controllers (or similar) and build your measurement grid. (might need changes!)
  4. Test the Ethersweep controllers and adapt the direction and step multiplier settings (steps_per_step)
  5. Install all missing dependencies (in an venv)
  6. Start a 2D scan with python3
  7. If everything works you can start an assisted (move third axis by hand after each scan) 3D scan python3
  8. After all images are captured (20 slices took >1h with my setup) you can plot slices python3
  9. ... or 4D python3

If you don't want to build the scanner you can just play with the date in stack_data. Each file is one slice of the scan. First and second values in the CSVs are X and Y, the third value is the RSSI.




A project to make wifi signals visible in 3D space.






No releases published

Sponsor this project



No packages published