1つのスペースでいくつのアクティブなBluetoothデバイスを確実に検出できますか?


9

私は低コストのアトラクションを設計しており、近接検出にBluetoothデバイス識別を使用したいと考えています。つまり、静的ロケーションXの範囲内にゲストAがあります。各ゲストには、カスタマイズされたモバイルデバイス(iPodまたはAndroidベース)が与えられます。

近くのすべてのデバイスの列挙が信頼できなくなる前に、Bluetoothデバイスの「密度」の現実的な上限は何ですか?たとえば、据え置き型のBluetooth対応PCの近くに25のアクティブデバイスが1か所に多すぎて、確実かつ完全に(すべてのデバイス)を検出できないのでしょうか。混雑しすぎですか?

(明確にするために、接続を確立する必要はありません。名前でデバイスの有無を確実に検出する必要があるだけです。)


質問の番号を見つけましたか?
Ramis

回答:


9

Bluetooth仕様が同じエリア内のデバイスの制限に言及していることはわかりません。これは、BluetoothデバイスだけでなくWiFiにも関連しているため、実際に判断するのは非常に困難です。

このペーパーでは、デバイス数の増加がデバイスの発見にかかる時間をどのように増加させるかについて説明します。http//www.shiratori.riec.tohoku.ac.jp/~deba/PAPER/Journal/WINET-onlineFinal.pdf

次のことも考慮してください。

Bluetoothデバイスは2.4 GHz無線帯域で動作します。これは、他の多くのワイヤレスデバイスで使用されているライセンスされていない周波数と同じです。同じエリア内の多くのデバイスがすべて同じ帯域幅を使用している場合、信号が衝突して情報を再送信する必要があるため、ネットワーク全体の問題が発生する可能性があります。Bluetooth信号は、この干渉を減らすために1秒あたりの周波数を何度も変更するように設計されていますが、十分なデバイスが同じ小さな帯域幅を使用しようとする場合、干渉は避けられません。2010年に作成されたデバイスで使用されているBluetooth 3.0は6〜9 GHzのスペクトルを使用しているため、干渉の問題ははるかに少なくなります。Bluetooth 3.0デバイスは、2.4 GHzで送信して、以前のBluetoothテクノロジと通信することもできます。2.4 GHzで動作するBluetooth 3.0、

要約すると:考えられる干渉と時間的制約を慎重に検討する必要があります。25台のデバイスを実行できると思います。しかし、実際にこれをテストする必要があることを確認するために


5

検出できるデバイスの数に理論上の上限はなく、検出時間に正比例します。検出に費やす時間を長くすると、範囲内のすべてのデバイスを検出する可能性が高くなります。

基本的に、検出は32の周波数のいずれかでスキャンするスキャンデバイスと、32のすべての周波数でビーコンを送信する広告デバイスによって実行されます。広告デバイスはこのシーケンスを繰り返し続け、ビーコンを受信すると、スキャンデバイスが応答してしばらくの間ランダムにバックオフし、新しい周波数にラッチして同じプロセスを繰り返します。そのため、特定の頻度でスキャンするデバイスが複数ある場合でも、最初はそれらの応答が衝突しますが、バックオフ後はランダムに異なる頻度になり、応答が再び衝突しない可能性が高くなります。

25個のアクティブデバイスの使用例ではまったく問題ありません。50〜100個のデバイスがあり、10〜15秒の検出でほとんどのデバイスを簡単に見つけることができるデバイスと環境を使用しました。お役に立てれば。


1

最近、私は同じ質問を研究しました-私の発見は、制限はICまたはソフトウェアのどちらかにあるということです。

使用するのに最適なチップはTIベースで、ソフトウェアオンチップです。

Android / Apple / Windowsにはカーネルに独自の制限があるため、BTを列挙するソフトウェアを使用するソフトウェアは、BT-Stack /カーネルによって制限されます。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/)を使用して定期的にすべての近くのデバイスの検出を実行し、その後すぐに各デバイスに接続して、それがまだ利用可能であることを確認することでした。接続しないと、1つのデバイスがいつ到着または去ったかを正確に把握できる保証がないことに気付きました。

以下の例:

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.