I’m working on a custom RTLS solution using DWM1000 modules, where I’ve designed custom hardware based on the ESP32-S3 controller, using the DWM1000 as the UWB transceiver. This hardware functions as the tag, and I’m leveraging the ESP32-S3 to send data over Wi-Fi.
For the anchors, I’m using the DWM1001C dev kits with the pre-built PANS firmware. However, my challenge is that I haven’t been able to find the PANS firmware to modify and upload it to the ESP32-S3. Does anyone know how to obtain the PANS firmware for customization?
Alternatively, if you have other solutions or approaches to achieve this, I’d appreciate any advice!
In terms of other solutions, there are adruino esp32 based DW3000 drivers available and I believe basic point to point ranging code.
These are a port of the open source qorvo supplied driver and their supplied example code with an arduino friendly wrapper added to make things simpler to use.
The same driver and examples are available for the DWM3001C boards.
So if you find the arduino/ESP32 drivers and throw away the wrapper they added you can have the same API and application level code running on both platforms, the only differences will be the low level drivers talking to the SPI interface.
In terms of the standard example code the most common issues people hit is that it is single tag to anchor range measurement, it doesn’t include the addressing information needed to control which anchor responds which is required for a working RTLS. There are lots of posts here about how to get around that.
Also the example code is not the best, it uses a byte array for the packet structure with hard coded magic numbers to control where each bit of information is within the packet. Personally I’d throw that away and use a packed struct to define the packet structure.
Sorry, for some reason I read it as you were using the DWM3000 not the 1000. Not sure why.
Yes, the same is true for the DW1000, the api for the official drivers is very similar for the two and while not officially supported there are community ports to the ESP32.
In fact the DW1000 is generally better supported, the supplied drivers have always been open source and the user manual has less holes in and is complete enough that you can write your own driver from scratch if you are so inclined.
For a long time the DW3000 user manual said to see the drivers for how to do something rather than actually documenting it and the latest drivers were then closed source so you couldn’t look at them. Older versions of the drivers that were initially released as open source modified registers that didn’t exist according to the manual or changed them to values that the manual said not to use. It was a bit of a mess. I think the newer drivers are now open source again but the manual still has holes in.