I am having trouble validating this idea through research. I was hoping someone could give me some ballpark feedback.
- 15 NRF52832 devices on custom PCB (30mmx50mm)
- All around 100m away outside with little to no obstacles in the way
- I need to stream data from each device. This means that the Bluetooth transfer speed needs to be faster than the combined data collection speed.
- Each device collects at 24kbps. So there is a combined 360kbps of data.
I imagine that I need to connect to each device individually and receive data. Then cycle through to the next device.
The connection parameters would be:
- BLE 5.0
- PHY: 2M
- TX power: 4dB
- connection interval 7.5ms
- data packet length extension on
- connection event length extension on
I can calculate theoretical transfer speeds using the nordic online power profiler. However, it's hard to get data at long distances. Also, I am not sure if I can cycle through the 15 devices fast enough?
Can I achieve this transfer rate (360kbps) at 100m? If not, what distance should be OK?
I don't think this would be at all feasible at 100m range I'm afraid. Sustaining just one connection at 100 meters using the 2Mbps (or 1Mbps for that matter) PHY is just the theoretical range. I don't think you'll be able to do what you describe at more than 20-25 meters between peripheral and central with the datarate you require in a low interference environment. You'll also have to keep in mind that you'll need time for the connection events as well, check out this post for a word of caution on the matter. You can also check out this post for additional info on the matter of this many links to one central.
Thanks for your response this has helped tremendously!
I can probably restrain the actual distance to more like 70meters (although 100m would be ideal). Without affecting the amount of data that needs to be streamed. Would either of these solutions work at 70meters?
1. Using 1M or LE Coded (S=2) PHY
2. Using multiple Bluetooth modules on the receiving end. For example 3 modules that only needed to stream data from 5 devices each. This would bring the transfer rate down to 120kbps and reduce the amount of connection events as well.
In the case of option 2, would there be significant interference due to multiple connections streaming at the same time? Or is this a non-issue as they will be on different channels?
I don't think 2M PHY or 1M PHY would work at 70m either. Using Coded PHY you might be able to do what you describe in solution 2 (maybe even at 100 meters) but you'll have to test this in order to find out yourself, as I can't say for certain as I don't know if any similar tests have been done.
mredp said:In the case of option 2, would there be significant interference due to multiple connections streaming at the same time?
Of course there will be collisions, as you have no way to synchronize modules - you can either divide frequency range with channel map, or ensure data rate that will cover probability of lost packets. I think one board and 15 slaves with the same connection interval is much more predictable solution. To maximize throughput, set up your connection interval to maximum allowed latency for your system, configure event length to a fixed value near 1/20 of connection interval, and do not set MTU to very high values (long packets have higher probability to be corrupted). To increase distance, you have an option to add PA/LNA to central device.
BTW, is BLE a requirement for your project? You could achieve your goal with a simple custom protocol (a start frame from central then 15 frames from devices) even at 500Kbit Coded PHY.
Ok great thanks for the advice!
BLE is not a requirement. When you say custom protocol do you mean something similar to the Nordic wireless UART example?
To confirm, you think a simple custom protocol could communicate with 15 devices 70 Metres away sampling at 360kbps (total)?
I was hoping to use the tiny BMD-350 module due to strict size constraints. However, I realise that this doesn't support coded PHY. So I will possibly use the BMD-340 then.