Fixing Poor Bluetooth Beacon Radio Signals

In most cases beacons ‘just work’ but it’s sometimes the case that beacon detection is erratic. A beacon might be detected but not all the time. Problems can be due to the strength and/or quality of the received signal. The first step is to quantify the signal strength so you can measure it at various distances and beacon positions. The post on Testing if a Beacon is Working explains how to use an app such as nRF Connect to measure signal strength (RSSI) using a smartphone.

nRFConnect detecting beacons

If you are not getting a large enough signal at longer distances then try increasing the transmit power. This is labelled ‘Tx power’ in most setup apps. Make sure it is at least 0dBm and increase it to +4dBm for a longer range. Note that changing from 0dBM to +4dBm will reduce battery life by over a half. Another option is to use a beacon with a longer range.

Minew setup tx power

Another reason for poor detection is blocking of the line of sight. The degree of blocking depends on the blocking material. The post on What Can Block Beacon Signals? provides more information.

If beacon detection is erratic irrespective of the distance you need to look into the relationship between how often the beacon is advertising vs how often the receiver is listening. The post on Why Bluetooth LE Scanning Doesn’t Always See Devices (the First Time) provides a detailed explanation. This kind of problem can often be solved by decreasing the advertising period. This is sometimes labelled ‘Advertising interval’ as in the above example screenshot. Again, reducing this by, for example, a half will halve the battery life. It needs to be 600ms or less if iOS is to reliably detect beacons.

It’s rare but there’s also the possibility of too many Bluetooth signals advertising at the same time. You can learn more in the articles on Managing Bluetooth LE Advertising Congestion and The Affect of the Number of Beacons on the Detection Time.

The Affect of the Number of Beacons on the Detection Time

We have been involved in a few projects where there have been 100s of Bluetooth beacons in one place at the same time as opposed to, the more normal, 10s at a time. We have found detection times to be significantly longer. Until now, we have found it difficult to quantify this behaviour.

We have found some research, funded by Samsung, on the Analysis of Latency Performance of Bluetooth Low Energy (BLE) Networks. The research contains lots of theoretical predictions backed up with experimental data that show how the time to detect varies with the number of scanners, number of advertisers, the scan window size, the advertisement period and the advertising interval:

The research concludes that when the number of Bluetooth devices increases, delays in device discovery show an exponential growth even when using multiple advertising channels and small frame sizes.

The authors say:

“We find that the inappropriate parameter settings considerably impair the efficiency of BLE devices, and the wide range of BLE parameters provides high flexibility for BLE devices to be customized for different applications.”

So what typical parameter settings might affect the detection time? What’s really going on? If you look at beacon advertising it transmits for about a millisecond every configurable advertising period (typically 100ms to 1 sec):

In simple terms, if two beacons happen to transmit on the same channel, at a similar time, then the transmissions will collide and receiving device will see corrupted data. The receiver will have to wait for its next scan to possibly see the beacon(s) and this increases the detection time. The chances of collision increase as the number of devices increase and decrease as the beacon advertising period increases.

Note that if two beacons collide and have the same advertising interval, it doesn’t mean they will collide next time. The advertising interval has a small amount of randomisation added to make this less likely to happen.