Armadilloフォーラム

BLE セントラル(複数接続可能?)

ftokioka

2024年11月6日 21時27分

==========
製品型番:Iot A6E
カーネルバージョン:
Linux version 5.10.226-0-at (builder@0da795b5d4c2) (armv7-alpine-linux-musleabihf-gcc (Alpine 13.2.1_git20240309) 13.2.1 20240309, GNU ld (GNU Binutils) 2.42) #1-Alpine Fri Sep 20 05:06:02 UTC 2024
コンテナ:bullseye
bluezをインストール
==========
・現状、BLEをセントラルとして使用しておりますが、複数のペリフェラルと接続ができないように見えますが、
 これは、可能でしょうか?可能な場合、何台まで接続が可能でしょうか?

gatttool -i hci0 -b DC:A6:32:DA:52:F6 -I
[DC:A6:32:DA:52:F6][LE]> connect
Attempting to connect to DC:A6:32:DA:52:F6
Connection successful

下記は、別のサイト情報に記載がありましたので、可能かと思い、問い合わせしております。
1つのセントラルは複数のペリフェラルと接続することができます。Bluetooth Low Energyの仕様としては、
1つのセントラルは、無限の数のペリフェラルと接続が可能です。Classic Bluetoothでは、7台に制限されていましたが、
そのような制限はありません。また、ペリフェラルとしては、1つのセントラルにしか接続できません
(複数の相手では受信のタイミングが重なったら通信できなくなるため)。
実際には、Bluetooth Low Energyの半導体のメモリや処理速度の制限があり、1つのセントラルは、
ペリフェラル8台までなどの仕様になっています。

コメント

> ==========
> 製品型番:Iot A6E
> カーネルバージョン:
> Linux version 5.10.226-0-at (builder@0da795b5d4c2) (armv7-alpine-linux-musleabihf-gcc (Alpine 13.2.1_git20240309) 13.2.1 20240309, GNU ld (GNU Binutils) 2.42) #1-Alpine Fri Sep 20 05:06:02 UTC 2024
> コンテナ:bullseye
> bluezをインストール
> ==========
> ・現状、BLEをセントラルとして使用しておりますが、複数のペリフェラルと接続ができないように見えますが、
>  これは、可能でしょうか?可能な場合、何台まで接続が可能でしょうか?
>
> gatttool -i hci0 -b DC:A6:32:DA:52:F6 -I
> [DC:A6:32:DA:52:F6][LE]> connect
> Attempting to connect to DC:A6:32:DA:52:F6
> Connection successful
>
>
> 下記は、別のサイト情報に記載がありましたので、可能かと思い、問い合わせしております。
> 1つのセントラルは複数のペリフェラルと接続することができます。Bluetooth Low Energyの仕様としては、
> 1つのセントラルは、無限の数のペリフェラルと接続が可能です。Classic Bluetoothでは、7台に制限されていましたが、
> そのような制限はありません。また、ペリフェラルとしては、1つのセントラルにしか接続できません
> (複数の相手では受信のタイミングが重なったら通信できなくなるため)。
> 実際には、Bluetooth Low Energyの半導体のメモリや処理速度の制限があり、1つのセントラルは、
> ペリフェラル8台までなどの仕様になっています。
>

アットマークテクノの古賀です。

ftokiokaさん:
>・現状、BLEをセントラルとして使用しておりますが、複数のペリフェラルと接続ができないように見えますが、
> これは、可能でしょうか?可能な場合、何台まで接続が可能でしょうか?
>
>gatttool -i hci0 -b DC:A6:32:DA:52:F6 -I
>[DC:A6:32:DA:52:F6][LE]> connect
>Attempting to connect to DC:A6:32:DA:52:F6
>Connection successful

製品マニュアルの「仕様」にある表の、「無線LAN/BT」の欄にある脚注には、次のように記載しています:
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
---
[c] BTの最大接続台数はClassicが7台、BLEが16台です。
---

>下記は、別のサイト情報に記載がありましたので、可能かと思い、問い合わせしております。

gatttool を使って複数のペリフェラルに接続する場合は、gatttool を複数起動して、それぞれで接続してください。

ただし、gatttool をシェルで実行する場合、gatttool を複数起動するには、シェルとの接続が複数必要になりますよね。
そこで、gatttool を直接実行する代わりに、gatttool を Python で wrap した例が、こちらにあります:
 https://flowcloud.github.io/ci20-bluetooth-LE/2015/09/10/bluetooth-cont…

この例で実装している、 BTLEDevice という Python のクラスは、コンストラクタ引数でペリフェラルの MAC アドレスを受け取り、gatttool を対話実行するプロセスを起動するようになっています。

pygatt という、pip でインストールできるモジュールも、同様の実装になっているようです:
 https://pypi.org/project/pygatt/
 https://github.com/peplin/pygatt/blob/master/pygatt/backends/gatttool/g…

以上、参考になりましたら幸いです。