Homelab BLE Sniffer with an ESP32
Building an ESP32 BLE scanner that sends device sightings over HTTPS to a Linux server in my homelab.

The idea
I have enough Bluetooth and IoT devices around the house that guessing what is nearby stopped being useful. I wanted a simple way to see BLE activity from my own network without buying another closed box that depends on somebody else’s cloud service.
An ESP32 is a good fit for this. It is inexpensive, has Wi-Fi and Bluetooth built in, and can sit on a shelf doing one job. The board watches for BLE advertisements and turns those sightings into a feed that I can process elsewhere.
The board I used is an [ESP32 MODEL TO ADD]. I forgot the exact model while writing this, so I am leaving the placeholder here instead of guessing. I will replace it after I check the board.
Where the data goes
The ESP32 sends the live feed over HTTPS to another Linux server in my homelab. That server is where I can store the observations, inspect the data, and decide what I want to do with it later.
The basic path is simple:
- The ESP32 listens for nearby BLE advertisements.
- It collects the useful information from each sighting.
- It connects to my home network over Wi-Fi.
- It sends the feed to my Linux server over HTTPS.
I used HTTPS because there is no reason to send the data across the network in plain text when the server can accept an encrypted connection. This is all inside my home network, but that is not an excuse to build it badly.
Flashing the ESP32
I used the Arduino IDE to load the current program onto the ESP32. I selected the ESP32 board and serial port, compiled the sketch, and uploaded it over USB.
The Arduino IDE is not exciting, which is fine. I needed it to compile the program, flash the board, and give me serial output when something did not work. It did that job without turning this into a larger project than it needed to be.
Once flashed, the ESP32 could scan for BLE traffic and send its results to the Linux server. The code is still being worked on, so I am not posting an unfinished version and pretending it is ready.
Adding full-house coverage
One scanner cannot reliably cover the entire house. Walls, distance, interference, and the low transmit power of many BLE devices all matter. A device visible near one end of the house may be weak or completely missing at the other end.
I plan to add a second ESP32 scanner on the other side of the house. Both scanners will send their sightings to the same Linux server. That should give me much better coverage and make it possible to compare which scanner saw a device and how strong the signal was at each location.
I also plan to add antennas to improve reception. The goal is not to make weak signal numbers look impressive. The goal is to pick up more consistent sightings and get a better picture of BLE activity across the house.
The exact antenna setup depends on the ESP32 model and whether the board supports an external antenna connection. I need to confirm the board model before ordering parts or modifying anything. Guessing here is an easy way to buy the wrong antenna or damage a board for no useful reason.
Cases and placement
The scanners also need proper cases. A bare development board with a USB cable is acceptable while testing on a desk. It is not how I want to leave hardware installed around the house.
I will most likely design and 3D print a case for each scanner. The case needs access for power, enough ventilation, and a sensible way to mount the antenna without putting strain on the board. It also needs to be easy to open because this project is still changing.
Once both scanners have cases, I can place one on each side of the house and keep their position consistent. Placement matters when I compare signal strength. Moving a board around every few days would make the data less useful.
This is not meant to be a complicated enterprise tracking platform. It is two small boards feeding one server so I can see what is happening in my own home. If the data turns out to be useful, I can build on it. If it does not, I am out the cost of two ESP32 boards instead of an expensive box and another subscription.
What comes next
The next work is confirming the ESP32 model, finishing the server feed, testing the antenna setup, designing the cases, and installing the second scanner. I also need to clean up the code and remove the parts that only make sense on my network.
When that is done, I will post the code on GitHub with setup notes and the configuration it expects. Until then, this is a working homelab project, not a finished product.