Armadilloフォーラム

Armadillo-X1を別のArmadillo-X1とBluetoothで接続を行いたい

dshibata

2021年3月5日 14時00分

お世話になります。
1点教えていただきたいことがあります。

Armadillo-X1を2台用意し、組み込まれているBluetoothを使用し、
1台をCentral(以降AM1)、もう一台をPeriphel(以降AM2)とし、接続できるようにしたいと思っております。
しかし、なかなか接続することができずにいます。
現在試したこととしましては、
1)このURL通りBLEとしてAdvertiseするuart_peripheral.pyファイルを作成し、AM2へ導入します
https://scribles.net/creating-ble-gatt-server-uart-service-on-raspberry…
2)hcitoolコマンドでRandom mac address をAM2に設定します
(hcitool cmd 0x3f 0x001 0x59 0x23 0x9A 0xA3 0xCD 0xE5)
3)uart_peripheral.pyを実行して、AM2がBLEとしてAdvertiseします
4)AndroidのスマホでBLEScannerというアプリを使用し、
 先ほどAM2に設定したRandom Mac Addressが検索可能、接続することも可能
5)AM1にてGattoolを使用し、AM2に設定されたRandom Mac Address検索はできたが、接続することができず
 connect: Connection refused (111)というエラ-を表示
6)次にGattoolではなく、BluetoothctlでScanしましたが、検索できず
7)次にhcitool lescanコマンドを使用したが、検索できず
8)次にPythonのbluepyライブラリを使用し検索はできましたが、接続することができませんでした。
 Publicタイプ、Randomタイプどちらも試してみましたが、接続できませんでした。

二つのArmadilloのBlueZのバージョンは5.50です。

2台のArmadilloをBluetooth接続するためにはどのようなことをすれば良いのでしょうか?

ご連絡お待ちしております。

コメント

dshibata

2021年3月5日 16時01分

> お世話になります。
> 1点教えていただきたいことがあります。
>
> Armadillo-X1を2台用意し、組み込まれているBluetoothを使用し、
> 1台をCentral(以降AM1)、もう一台をPeriphel(以降AM2)とし、接続できるようにしたいと思っております。
> しかし、なかなか接続することができずにいます。
> 現在試したこととしましては、
> 1)このURL通りBLEとしてAdvertiseするuart_peripheral.pyファイルを作成し、AM2へ導入します
> (https://scribles.net/creating-ble-gatt-server-uart-service-on-raspberry…
> 2)hcitoolコマンドでRandom mac address をAM2に設定します
> (hcitool cmd 0x3f 0x001 0x59 0x23 0x9A 0xA3 0xCD 0xE5)
> 3)uart_peripheral.pyを実行して、AM2がBLEとしてAdvertiseします
> 4)AndroidのスマホでBLEScannerというアプリを使用し、
>  先ほどAM2に設定したRandom Mac Addressが検索可能、接続することも可能
> 5)AM1にてGattoolを使用し、AM2に設定されたRandom Mac Address検索はできたが、接続することができず
>  connect: Connection refused (111)というエラ-を表示
> 6)次にGattoolではなく、BluetoothctlでScanしましたが、検索できず
> 7)次にhcitool lescanコマンドを使用したが、検索できず
> 8)次にPythonのbluepyライブラリを使用し検索はできましたが、接続することができませんでした。
>  Publicタイプ、Randomタイプどちらも試してみましたが、接続できませんでした。
>
> 二つのArmadilloのBlueZのバージョンは5.50です。
>
> 2台のArmadilloをBluetooth接続するためにはどのようなことをすれば良いのでしょうか?
>
> ご連絡お待ちしております。
>
>

申し訳ございません。
2)ですがRandom mac addressを設定しているのではなく、Public mac addressを設定していました。
 Pythonのライブラリを使用し、public Addressのコマンドを使うことで接続することができました。お騒がせしました。

初歩的なご質問ですが、Random Addressを任意のアドレスに設定することは可能なのでしょうか?
お手数ですが、ご連絡お待ちしております。

at_akihito.irie

2021年3月9日 11時24分

入江です。

> 初歩的なご質問ですが、Random Addressを任意のアドレスに設定することは可能なのでしょうか?

Random Addressを任意のアドレスにする目的を教えていただけますでしょうか。

Random Addressは動的にアドレスをランダム生成して、さらに一定期間毎にア
ドレスを変更することでセキュリティを向上させる目的がありますので、任意
のアドレスに設定するものではありません。

固定のアドレスを使用する際には通常はPublic Addressを使用します。

dshibata

2021年3月10日 14時03分

> Random Addressを任意のアドレスにする目的を教えていただけますでしょうか。
>
> Random Addressは動的にアドレスをランダム生成して、さらに一定期間毎にア
> ドレスを変更することでセキュリティを向上させる目的がありますので、任意
> のアドレスに設定するものではありません。
>
> 固定のアドレスを使用する際には通常はPublic Addressを使用します。
>

ご連絡ありがとうございます。
> Random Addressを任意のアドレスにする目的を教えていただけますでしょうか。
こちらですが、ArmadilloとArmadilloを接続するにはPublic Addressを使用して接続することができました。
こちらとはまた別件で、BLEを使用し動作(Periphel)を行う製品があり、Random Addressを任意のアドレスに設定して使用しております。
この製品を擬似的にArmadilloで再現したく、Random Address固定の仕方を質問いたしました。

at_akihito.irie

2021年3月11日 15時20分

入江です。

BluetoothのRandom Addressには、

- Random Static Address
- Resolvable Random Private Address
- Non-Resolvable Random Private Address

の3種類があり、この内の「Random Static Address」であること前提でお話し
ます。

アドバタイズパケット内には、PeripheralのBDアドレスがPublicかRandomかを
示すビットがあり、Central側ではそれに合うようにPublicかRandomかを指定
してconnectしなければなりません。

下記手順では、コマンドでアドバタイズパケット内の該当ビットの設定を行っ
てからアドバタイズをしていますが、お客様がお使いのpythonスクリプトに、
同様のことを行えるインターフェースが用意されているかは把握しておりませ
んのでご了承ください。

Peripheral側のArmadilloで以下のコマンドを実行してください。

[armadillo]# hciconfig hci0 noleadv //アドバタイズを停止
[armadillo]# hciconfig hci0 lerandaddr 11:22:33:44:55:66 //任意のBD_Addrを入力

添付のrandom_address_advertise.shを実行してください。

[armadillo]# sh ./random_address_advertise.sh

これによって、PeripheralのArmadilloが指定したアドレスを用いてRandom
Addressでアドバタイズを行いますので、Central側からご確認ください。

ファイル ファイルの説明
random_address_advertise.sh

dshibata

2021年3月12日 10時54分

> 入江です。
>
> BluetoothのRandom Addressには、
>
> - Random Static Address
> - Resolvable Random Private Address
> - Non-Resolvable Random Private Address
>
> の3種類があり、この内の「Random Static Address」であること前提でお話し
> ます。
>
> アドバタイズパケット内には、PeripheralのBDアドレスがPublicかRandomかを
> 示すビットがあり、Central側ではそれに合うようにPublicかRandomかを指定
> してconnectしなければなりません。
>
> 下記手順では、コマンドでアドバタイズパケット内の該当ビットの設定を行っ
> てからアドバタイズをしていますが、お客様がお使いのpythonスクリプトに、
> 同様のことを行えるインターフェースが用意されているかは把握しておりませ
> んのでご了承ください。
>
> Peripheral側のArmadilloで以下のコマンドを実行してください。
>
>

> [armadillo]# hciconfig hci0 noleadv //アドバタイズを停止
> [armadillo]# hciconfig hci0 lerandaddr 11:22:33:44:55:66 //任意のBD_Addrを入力
> 

>
> 添付のrandom_address_advertise.shを実行してください。
>
>

> [armadillo]# sh ./random_address_advertise.sh
> 

>
> これによって、PeripheralのArmadilloが指定したアドレスを用いてRandom
> Addressでアドバタイズを行いますので、Central側からご確認ください。
>

お世話になります。
ご連絡ありがとうございます。
教えていただいた内容を実行しましたら、無事設定することができました。
ありがとうございました。