More than 4 anchor ranges in tag


I need to get the ranges between tag and anchor for more then 4 without limitation.

What I need is:
One or more DWM1001C (moving tag) showing ranges of other DWM1001C modules (moving anchor) with short addresses in the area as a list.

It can be 1 anchor and 1 tag,10 anchors and 1 tag or 5 anchors and 10 tags (the numbers may change) in the area since they all in move.

The idea is stopping a vehicle if there is a person close enough. So it needs to be working inside the building or outside the building without a location calculation.

We have done this by the default firmware (PAN2) but 4 nodes limit make it impossible to continue.

We are planning to calculate the location further by placing tags on the ceiling and make the ceiling devices send the ID and range of the moving devices to the server. It can be then calculated by the server.

If there is a solution for this can you guide me? We are using J-Flash lite to upload firmware and Segger Embedded Studio for any coding.


Hi, it feels like the “meshposition” engine I developped fits perfectly for your need. I had exactly that in mind

  • dynamic creation of superframes where the server decides of the initiators and responders at runtime
  • there is no limit in the protocol on number of initiators or responders (limit might come from time drift, 10 is still ok, can be improved with auto sync in case >20 needed)
  • the API on server side is python
  • Nodes friendly names even used in the API

See this post

Then this page

Now a warning :warning: although this solution is working and tested, this not a mature solution and not intended for production. It can be used in production in case it is further tested and adapted. Just the concept of dynamic superframes might have issues in certification as it is harder to prove that the sw won’t misbehave :warning:

That being said, I’ll help and guide anyone who’d like to use or drive this concept further, but you need someone familiar with embedded systems, RTOS, nRF, linux, zephy, python,… otherwise I’ll help too but then it is going to take much longer.

Hi wassfila,

Which firmware should I upload to DWM1001C module?
Factory image DWM1001_PANS_R2.0.hex or any other firmware you provide?

Do I have to upload additional software using Segger Embedded Studio? If yes, which code?

Factory image gives ranges using api commands but only if location is calculated. I need to get the ranges as plane text without using the localization engine.

I am listening the module from UART with an STM32 chip, so what I need is the module giving me all the ranges around from UART.


DWM1001_PANS_R2.0.hex is a very good firmware to start with and very well documented on the official Decawave website and forum. But it has limitations though. As a beginner it’s important to use it and fully understand it before thinking on creating your own firmware.
Imagine you are new to developping applications on linux with Python or c++, then instead you have to patch the os kernel, that’s a comparable complexity increase when moving from using a PANS library to creating your own.
The reason is, the firmware I provide is not ready for production and not intended to be used by someone not familiar with the firmware tools. The solution I suggest is pretty much DIY open source solution, and it would not work without reading the the doc.
In the doc there is mention of the repo “Zephyr MP Node UWB repo :”

That is the source code that generayes the firmware. You need to be familiar with Zephyr, as I use it as RTOS

If you are not, start by reading all of its doc and test it’s simplest samples

Hope that helps, hope you don’t get disappointed by realizing that things are more complex than what you expected, that’s what learning is about.