# How many active Bluetooth devices can I reliably detect in a single space?

I am engineering a low-cost attraction and hope to use Bluetooth device identification for proximity detection -- i.e. is guest A within range of static location X. Each guest will be given a customized mobile device (either iPod or Android based).

What is a realistic upper bound on Bluetooth device "density" before enumeration of all nearby devices becomes unreliable? For instance is having 25 active devices in a vicinity of a stationary Bluetooth-enabled PC too many in one place to detect reliably and entirely (all devices)? Is this too much congestion?

(To be clear: I do not need to establish connections. I only need to reliably detect the presence or absence of devices by name.)

• Did you found a number for your question? – Ramis Dec 16 '16 at 10:31

I cannot see that the Bluetooth Specification makes any reference to limits of devices in the same area. This is very difficult to practically determine as it is related to not only Bluetooth devices, but WiFi as well.

This paper takes a look at how the increase in device count, increases the time it takes for device discovery: http://www.shiratori.riec.tohoku.ac.jp/~deba/PAPER/Journal/WINET-onlineFinal.pdf

Also consider the following:

Bluetooth devices work with the 2.4 GHz radio band, which is the same unlicensed frequency used by many other wireless devices. If many devices in the same area are all using the same stretch of bandwidth, it can lead to overall network problems, as the signals collide and information has to be resent. The Bluetooth signal was designed to change it's frequency many times per second to reduce this interference, but if enough devices are trying to use the same small stretch of bandwidth, interference is inevitable. Bluetooth 3.0, being used in devices created in 2010, uses the 6-9 GHz spectrum, so it will have much fewer interference issues. Bluetooth 3.0 devices are also capable of transmitting at 2.4 GHz to communicate with earlier Bluetooth technologies. Bluetooth 3.0, running at 2.4 GHz, has the same issues with interference as earlier Bluetooth technologies.

To summarize: You need to carefully consider the possible interference an time constraints that you will have. I suspect that 25 devices can be done. But to be sure you will need to practically test this

There are no theoretical upper bounds on how many devices can be discovered, it is directly proportional to the time of discovery. Increasing the amount of time spent in discovery will increase the chances of detecting all the devices within range.

Basically discovery is performed by the scanning device scanning on one of 32 frequencies and the advertising device sending a beacon on all the 32 frequencies. The advertising devices keep repeating this sequence and the scanning device, once it receives a beacon, will respond and randomly back off for some time and latch on to a new frequency and repeat the same process. So even if there are multiple devices scanning at a certain frequency, first time their responses will collide , but after a back off they randomly end up in different frequencies and increase their chances of responses not colliding again.

In your use case of 25 active devices is not at all a problem, I have worked with devices and environments where there were 50-100 devices and a 10-15 second discovery can easily find most devices. Hope this helps.

Recently i studied the same question- My findings are that the limitations are either by the IC or the Software.

Best chip to use is TI based and on software on chip.

Android/Apple/Windows have their own limits in the kernel- so using software any software to enumerate BT will be limited by the BT-Stack/ Kernel. USing the SoC has no limits as the IC's Stack is simple.

Use a custom way to pipe info to your program.

At of the day i decided not used BT because its ab absolute pain in the arse.

Unless it the new V4 standard that handles advertising in a new better way.

I also needed to have unlimited BT's in a room.. decided to make my own propriety PCB and receiver - why? because it was easier and cheaper believe it or not.

(USing something like WP7/iPhone3,4/Android)

BTv2.1 BT3

Reliably not more than 10 in general. The most I have seen handled 32.

BT4

White paper says 128.. Only Apple 4S supports this Version so I have not tested.

A Bluetooth device can connect about 7 devices at a time.It is its maximum capacity.
But it maay varies as per the device configurations.
Question
Question1
check it out the above link this may be helpfull for you

• The question is not for how many devices can connect, it is about how many can be detected. No pairing will be done. – Kortuk Nov 14 '11 at 1:26

I do not think there is a limit. The way I have implemented nearby device detection was to use InTheHand.Net library (http://32feet.codeplex.com/), run the discovery for all nearby devices periodically and then shortly connect to each device to ensure it is still available. Without connecting I realised there is no guarantee you will accurately know when one device arrived or left.

An example below:

public static List<Device> DiscoverDevices() {
BluetoothClient bc = new BluetoothClient();
m_btc = bc;
List<Device> devices = new List<Device>();
DateTime startDisc;
Boolean canConnect;
BluetoothDeviceInfo[] array = bc.DiscoverDevices(15, true, true, true);
int count = array.Length;
startDisc = DateTime.Now;
for (int i = 0; i < count; i++) {
Device device = new Device(array[i]);
if (MZPState.Instance == null) {
MLog.Log(null, "BT discovery interrupted");
return devices;
}

canConnect = CanConnect(device);
if (canConnect) {
//MLog.Log(null, "Active BT device detected " + device.ToString());
}
//MLog.Log(null, "Discovery result="+canConnect+" on " + device.DeviceName + " " + device.Address+ " took "
//  + Utilities.DurationAsTimeSpan(DateTime.Now.Subtract(startDisc)));
}
Performance.Create("Bluetooth local discovery", false, "",
Performance.PerformanceFlags.Speed, DateTime.Now.Subtract(startDisc).TotalMilliseconds);
return devices;
}

public static Boolean CanConnect(Device device) {

bool inRange;
Guid fakeUuid = new Guid("{F13F471D-47CB-41d6-9609-BAD0690BF891}"); // A specially created value, so no matches.
try {
ServiceRecord[] records = device.DevInfo.GetServiceRecords(fakeUuid);
//Debug.Assert(records.Length == 0, "Why are we getting any records?? len: " + records.Length);
inRange = true;
}
catch (Exception) {
inRange = false;
}
return inRange;

}