In order to locate themselves and to stream content between each other our modules will make extensive use of zigbee so it is a critical parameter in our project. In order to determine what we will be able to achieve I started doing some tests with the STM32 boards that we used in class (thanks to Phh and Aurélien for lending me theirs)
The localisation part will be done by measuring the signal attenuation beetween the modules. To access this data the zigbee module has to be switched in API mode through the ATAP command. Then the zigbee module is no longer acting transparently as a serial line but it receives and sends structured trames. Among the informations contained in the RX trames, we can access the Received Signal Strength Indicator in -dBm.
It appeared that this value doesn’t remain constant when the two zigbees stay at the same distance from each other. in order to see the dispersion of these values, I used a zigbee module of the robotics club connected to the serial port of the computer to log the values and I obtained the following histograms.
The green one shows the values of attenuations when the two modules are in opposite corners of the room and the blue one when they are almost stuck the one to the other.
The attenuation value is not constant but considering the median or the average on last value should give us a relevant value.
I’m concerned because the range of values is not very wide : -23 to -50 dBm in the experience, and I’ve observed that it decreases very fast with the distance and then much more slowly, I hope that we’ll be able to have a decent resolution in spite of it and I’ll try to plot an attenuation/distance curve in the next days to have precise data.
We will also use the zigbee to stream audio content between the modules and in this perspective we need to evaluate the maximum bitrate we can rely on. The theoretical value for zigbee is 250kb/s in reality we will certainly not reach it. To do some tests I used two STM32 boards, broadcasting trames containing 100bytes of datas (the maximum value on API mode). On the software part I simply used a timer that print each second the number of trames received in the last second.
The results were very disapointing. When the two modules were broadcasting and listening simultaneously I hardly reached 27 trames/s = 21.6kbps and when only one was brodcasting and the other one listening 68 trames = 64.4kbps which is still pretty far from the theoretical 250kbps. I’ll try to improve these results in the next days, so any ideas on what I could change to do so is very welcome.
Possibly related posts: