🧠 The Idea — Indoor Positioning Without GPS

Indoor positioning is one of those problems that looks easy until you actually try to solve it, because the moment GPS drops out, you’re forced to rely on indirect measurements that are often noisy, inconsistent, and heavily dependent on the environment.

Instead of going for high-end solutions like UWB or vision tracking, I decided to start with something minimal:

BLE RSSI (Received Signal Strength Indicator)

At a high level, the idea is simple:

But in practice, signal strength is affected by:

Which means you’re not measuring distance… you’re estimating it.


🧩 System Architecture — Keeping It Simple, but Complete

Rather than building a quick demo, I wanted a system that actually felt usable, so I split it into three main components that communicate in real time and each handle a specific part of the pipeline.

📡 Tag (ESP32)

This is the device being tracked, and its only job is to continuously broadcast a BLE signal so that other devices can detect it.

📍 Anchors (ESP32)

These are fixed nodes placed around the environment, and they constantly scan for the tag, measure RSSI, and send that data over Wi-Fi to a central server.

🖥️ Server + Web Interface

On the backend, a Python server collects RSSI values from all anchors and processes them to estimate position, while a web interface visualizes everything in real time.


📐 Why Three Anchors?

To estimate a position in 2D space, you need at least three reference points, because each anchor gives you a rough distance estimate, and combining those estimates allows you to approximate where the tag is located.

More anchors = better accuracy.


🧪 Testing — When It Starts Feeling Real

Once everything is configured, with all anchors connected to the same network and the server running, the system becomes interactive in a way that’s hard to appreciate until you see it working.

You place anchors on the map, define their positions, and after a few seconds:

A green dot appears.

Then you move the tag.

Not perfect.
But alive.


⚠️ RSSI Reality — Noise Everywhere

This is where things get interesting, because RSSI is not a clean measurement, and the more you rely on it, the more you realize how unpredictable RF environments really are.

To reduce this, I added calibration:

It helps.
But it doesn’t eliminate noise.


🤯 The Turning Point

At this stage, the system was working, but it still felt like a controlled demo rather than something dynamic, and that’s when a simple idea completely changed the direction of the project.

What if the thing I’m tracking isn’t in my hand… but moving on its own?

Something faster.
Less predictable.

So I decided to attach the tag to something mobile.

And that’s where things escalated.


🔧 Hardware — Minimal Design, Real Constraints

ESP32 — Main Controller
MPU6050 — Stabilization
SI2302 MOSFETs — Motor Driving
Power System
CP2102 — Communication

🎮 Control System — From Pain to Usable

❌ Version 1 — Serial Control

Typing values to control motors. It worked… but it wasn’t usable.

✅ Version 2 — Web Controller

I built a web server directly on the ESP32 so I could control the drone from a browser.


🧪 Flight Testing — Where Theory Breaks

The Problem

Result: No lift.

🛠️ The Hack

Not ideal.
Not portable.
But enough to keep experimenting.


💡 What This Project Became

This is no longer just a positioning system or a drone — it’s a combination of RF experimentation, embedded development, and hardware design where every part affects the others.

It’s a platform.


🧠 Lessons Learned

Building, debugging, and flying at the same time is chaos.


🧡 Sponsored by NextPCB

Big thanks to NextPCB for supporting this project!
If you're building your own ESP32-DIV or any other PCB project, I highly recommend NextPCB for fast, reliable, and affordable PCB manufacturing and assembly.

🛠️ Get your boards made here → https://www.nextpcb.com


💻 Code & PCB

If you’re interested in building this project, the code and schematic are available on GitHub. Simply visit the GitHub repository to download the necessary files.  Feel free to test the code and share your feedback or improvements.

GitHub repository: github.com/cifertech/ESP32-Drone

🚧 What’s Next


🎯 Final Thoughts

This started as a simple idea:

“Can I track something indoors using BLE?”

And turned into:

Not perfect.
Not stable.
But real.

And that’s what makes it worth building.