web-dev-qa-db-ja.com

2つのRaspberryPi間のBluetooth6LoWPAN接続

Stack Overflowでこの質問がありましたが、ここに移行することをお勧めしました。モデレーターの注意を引くためにフラグが立てられましたが、そのプロセスがどのように機能するかわからず、フィードバックも受け取らなかったので、ここで質問すると思いました。

6LoWPANを使用してIPv6プロトコルと通信できるように、IPSP(インターネットプロトコルサポートプロファイル)を使用できる2つのRaspberryPI間にBluetoothSmart接続を確立しようとしています。

RaspberryPiとNordicnRF51開発キットの間でこの通信を確立することに成功しましたが、概念実証として、NordicnRF51開発キットなしで2つのRaspberryPiボックス間でこの接続を確立しようとしています。

だから私の最初のステップはラズベリーパイをセットアップすることでした。これは、NordicのnRF5 IoT SDK( https://developer.nordicsemi.com )の手順で行いました。 Raspberry PiはどちらもnRF51ボードで動作するため、正しくセットアップされていることを私は知っています。 Raspberry PiとnRF51ボードの間の接続を確立し、RaspberryPiからnRF51ボードをping6することができます。

ここで、Raspberry Pi間のBluetooth接続を確立するために、次の手順を実行します。マスターデバイスで次のコマンドを実行します。

#need root access
Sudo su

#enable 6lowpan over Bluetooth le
echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable

#start advertising Bluetooth LE service
hciconfig hci0 leadv

スレーブデバイスで、次のコマンドを実行します。

#need root access
Sudo su

#enable 6lowpan over Bluetooth le
echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable

#establish le connection to master
hcitool lecc 5C:F3:70:XX:XX:XX

hcitool leccコマンドは、常に「接続ハンドル64」を返します。この時点で、hcitool conコマンドを使用して確認できる2つのデバイス間の安定した接続があります。

これで、マスターまたはスレーブのいずれかで次のコマンドを実行できます。ここで、MACアドレスは接続しているBluetoothデバイスのアドレスでもあります。

echo “connect 5C:F3:70:XX:XX:XX 1” > /sys/kernel/debug/bluetooth/6lowpan_control

コマンドを実行したRaspberryPiのどちらでも、6lowpan接続が確立され、ifconfigコマンドを実行すると、新しいbt0デバイスが表示されます。ただし、他のRaspberryPiはbt0デバイスを取得しません。 ifconfig bt0 upコマンドを実行し、同じechoコマンド(MACアドレスを変更)を実行しようとしましたが、どちらもbt0デバイスを提供しません。

コマンドを実行したRaspberryPiに表示されるbt0デバイスは、常に39秒後に消えます。/var/log/syslogログファイルでは、ntpdデーモンが起動時にbt0インターフェイスのリッスンを開始し、ちょうど39秒後にインターフェイスがなくなったことを検出して解放しているように見えます。次のコマンドを使用して、デバイスが起動しているときにIPv6アドレスをデバイスに割り当てようとしました。

ifconfig bt0 inet6 add 2001:db8::5cf3:70ff:feXX:XXXX/64 

次に、ping6を実行して、インターフェイスをしばらく維持するために継続的にpingを実行しましたが、39秒後もインターフェイスがダウンしました。

2つのRaspberryPi 2モデルBを使用しており、両方のBluetoothアダプターはBroadcom Corp BCM20702A0 Bluetooth 4.0デバイスです(アダプターに関する情報を取得するためにlsusbを使用)。アダプターはBluetooth4.0としてリストされていますが、NordicnRF51開発キットでアダプターを正常に使用して6LoWPAN接続を確立することができました。

私のすべての実験の後、ここに私が持っている質問があります:

  • 私がやろうとしていることをすることは可能ですか?
  • 誰かが2つのLinuxデバイス間で6LoWPAN接続を正常に確立して、自分の手順で何が欠けているかを教えてくれる人はいますか?
  • この接続を正しく確立するには、Bluetoothデバイスの1つをBluetooth Smart 4.2と互換性がある必要がありますか?
  • 追加の手順を試すことをお勧めできるbluezに精通している人はいますか?

どんな助けでも大歓迎です。

ジョン

編集1:

ここからダウンロードした3.19ビルド済みカーネルをインストールすることで、Ubuntu14.04ボックスとRaspberryPiの間でこの接続を機能させることができました: http://kernel.ubuntu.com/~kernel-ppa/mainline/ linux-3.19.yz-queue/2016-01-07-vivid /

2つのRaspberryPi間で機能しない理由はまだわかりませんが、解決策が見つかった場合は、ここに投稿します。

編集2:

Ubuntu14.04はBluez4を実行し、RaspberryPisはBluez5を実行します。2つのRaspberryPi(Bluez 5を実行)を接続できなかったため、Bluez5を実行している2つのFedora23インスタンスを接続して、問題がないかどうかを確認しました。 BluezまたはRaspberryPis。私の実験では、2つのFedora 23インスタンスで、2つのRaspberry pisで行ったのと同じ動作を経験しています(6lowpan接続は接続後30秒以内にダウンします)。

Fedora 23インスタンスで実行されているbluezバージョンは5.35であり、RaspberryPisで実行されているbluezバージョンは5.23です。

Bluez 5.xでこれが起こっている理由を誰かが知っていますか?

ありがとう、

3
Jon H

解決

問題を解決しました。問題はカーネルにありました。 Ubuntu 15をインストールしましたが、Raspberry Pisと同じ問題が発生したため、4.4カーネルのソースをダウンロードして構成し、新しいカーネルを構築しました。新しいカーネルが配置されると、すべてがうまく機能しました。カーネルのパッチレベルなのか構成なのかはわかりませんが、現在は機能しています。

2
Jon H

投稿ありがとうございます。私は昨年、IPv6 over BTLEに取り組んでいましたが、あなたとまったく同じ問題に直面しました。約39秒後、マスターデバイスとスレーブデバイス間のIPv6 overBLEリンクが切断されます。これは、Linuxカーネルv4.1.x(マスターとスレーブの両方)で発生しました。マスターとスレーブの両方が同じプラットフォームを使用しています(機密性のため、プラットフォームの詳細を明らかにすることはできません)。私が言えるのは、Yoctoプラットフォームを使用して構築されたLinuxOSを実行するx86_64プラットフォームであるということだけです。

その後、興味深いことに、カーネル3.19でより有望な結果を得ることができました。私は実際に両方のプラットフォームでuBuntu14.04LTSを使用しました。 BlueZバージョンをBlueZv4.101からBlueZv5.xに手動でアップグレードすることができました。使用していたBlueZ5のバージョンを正確に思い出せません。それから、あなたと同じような手順を踏んで、長期間持ちこたえることができました。その後夕食に行ったのを覚えていますが、30分経ってもまだまだです。それから私は一晩中テストを実行し続けました、そして接続は維持されました!

使用するLinuxカーネルのバージョンに関するこの情報を提供していただきありがとうございます。適用されたパッチに関しては、おそらく、適用された次のパッチの1つに関連している可能性があります。 https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/log /?id=refs/tags/v4.4.27&qt=grep&q=6lowpan

1
anandan111