단일 공간에서 몇 개의 활성 Bluetooth 장치를 안정적으로 감지 할 수 있습니까?


9

저비용 매력을 설계하고 있으며 근접 감지를 위해 Bluetooth 장치 식별을 사용하고자합니다. 즉, 고정 위치 X 범위 내의 게스트 A입니다. 각 게스트에게는 사용자 지정된 모바일 장치 (iPod 또는 Android 기반)가 제공됩니다.

주변의 모든 장치를 열거하기 전에 Bluetooth 장치 "밀도"의 실제 상한은 무엇입니까? 예를 들어, 고정 된 Bluetooth 지원 PC 근처에 25 개의 활성 장치가 한 곳에서 너무 많아서 모든 장치를 안정적으로 감지 할 수 있습니까? 혼잡이 너무 많습니까?

(명확하게하기 위해 : 연결을 설정할 필요가 없습니다. 이름으로 장치의 유무를 확실하게 감지하기 만하면됩니다.)


질문에 대한 번호를 찾았습니까?
Ramis

답변:


9

Bluetooth 사양이 같은 영역에있는 장치의 제한을 참조한다는 것을 알 수 없습니다. Bluetooth 장치뿐만 아니라 WiFi와 관련되어 있기 때문에 실제로 결정하기가 매우 어렵습니다.

이 백서는 장치 수의 증가와 장치 검색에 걸리는 시간을 증가시키는 방법을 살펴 봅니다. http://www.shiratori.riec.tohoku.ac.jp/~deba/PAPER/Journal/WINET-onlineFinal.pdf

또한 다음을 고려하십시오.

Bluetooth 장치는 다른 많은 무선 장치에서 사용하는 것과 동일한 무허가 주파수 인 2.4GHz 라디오 대역과 작동합니다. 같은 영역에있는 많은 장치가 모두 같은 대역폭을 사용하는 경우 신호가 충돌하고 정보를 다시 보내야하므로 전체 네트워크 문제가 발생할 수 있습니다. Bluetooth 신호는이 간섭을 줄이기 위해 초당 주파수를 여러 번 변경하도록 설계되었지만 충분한 장치가 동일한 작은 대역폭을 사용하려고하면 간섭이 불가피합니다. 2010 년에 만들어진 장치에 사용되는 Bluetooth 3.0은 6-9GHz 스펙트럼을 사용하므로 간섭 문제가 훨씬 줄어 듭니다. Bluetooth 3.0 장치는 2.4GHz로 전송하여 이전 Bluetooth 기술과 통신 할 수 있습니다. 2.4GHz에서 실행되는 Bluetooth 3.0

요약 : 가능한 간섭을 시간 제약 조건으로 신중하게 고려해야합니다. 나는 25 개의 장치를 할 수 있다고 생각합니다. 그러나 실제로 이것을 테스트해야합니다.


5

발견 할 수있는 장치 수에 대한 이론적 인 상한은 없으며, 발견 시간에 정비례합니다. 검색에 소요되는 시간을 늘리면 범위 내의 모든 장치를 검색 할 가능성이 높아집니다.

기본적으로 발견은 32 개의 주파수 중 하나에서 스캐닝하는 스캐닝 장치 및 32 개의 모든 주파수에서 비콘을 보내는 광고 장치에 의해 수행된다. 광고 장치는이 순서를 계속 반복하며, 일단 비콘을 수신 한 스캐닝 장치는 일정 시간 동안 응답하고 무작위로 백 오프하고 새로운 주파수에 걸고 동일한 프로세스를 반복합니다. 따라서 특정 주파수에서 여러 장치가 스캔 되더라도 응답이 처음 충돌 할 때마다 백 오프 후에 임의로 다른 주파수로 끝나고 응답이 다시 충돌하지 않을 가능성이 높아집니다.

25 개의 활성 장치 사용 사례에서 전혀 문제가되지는 않지만 50-100 개의 장치가있는 장치 및 환경에서 작업했으며 10-15 초 발견으로 대부분의 장치를 쉽게 찾을 수 있습니다. 도움이 되었기를 바랍니다.


1

최근에 나는 같은 질문을 연구했다. 나의 발견은 IC 나 소프트웨어에 의해 한계가 있다는 것이다.

사용하기에 가장 좋은 칩은 TI 기반이며 소프트웨어 온 칩입니다.

Android / Apple / Windows에는 커널에 고유 한 제한이 있으므로 소프트웨어를 사용하여 BT를 열거하는 모든 소프트웨어는 BT-Stack / kernel에 의해 제한됩니다. IC 스택은 단순하므로 SoC 사용에는 제한이 없습니다.

사용자 정의 방법을 사용하여 정보를 프로그램에 파이프하십시오.

그 날에 나는 BT를 사용하지 않기로 결정했다.

새로운 V4 표준이 아니라면 새로운 방식으로 광고를 처리합니다.

또한 방에 무제한 BT가 필요했습니다. 내 자신의 고유 한 PCB와 수신기를 만들기로 결정했습니다. 왜 그렇습니까? 더 쉽고 저렴하게 믿기 때문입니다.

질문으로 돌아 가기

(WP7 / iPhone3,4 / Android와 같은 것을 사용)

BTv2.1 BT3

일반적으로 10을 넘지 않아야합니다. 내가 본 것 중 가장 큰 것은 32입니다.

BT4

백서는 128입니다. Apple 4S 만이 버전을 지원하므로 테스트하지 않았습니다.


0

Bluetooth 장치는 한 번에 약 7 개의 장치를 연결할 수 있으며 최대 용량입니다.
그러나 장치 구성에 따라 다를 수 있습니다.
질문
질문 1
위의 링크를 확인하십시오. 이것이 도움이 될 수 있습니다.


3
문제는 연결할 수있는 장치 수에 대한 것이 아니라 탐지 할 수있는 장치에 대한 것입니다. 페어링이 수행되지 않습니다.
Kortuk

0

나는 한계가 없다고 생각합니다. 주변 장치 감지를 구현 한 방법은 InTheHand.Net 라이브러리 ( http://32feet.codeplex.com/ ) 를 사용 하고 근처의 모든 장치에 대해 검색을 정기적으로 실행 한 다음 각 장치에 잠시 연결하여 계속 사용할 수 있도록하는 것입니다. 연결하지 않으면 한 장치가 도착하거나 떠난 시점을 정확히 알 수 있다는 보장이 없습니다.

아래 예 :

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());
                devices.Add(device);
            }
            //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;

    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.