Bluetooth 6LoWPAN-Verbindung zwischen zwei Himbeer-Pis

3009
Jon H

Ich hatte diese Frage zu Stack Overflow, aber es wurde vorgeschlagen, hier zu migrieren. Es wurde für die Aufmerksamkeit des Moderators markiert, aber ich bin nicht sicher, wie dieser Prozess abläuft, und ich erhielt keine Rückmeldung. Ich dachte mir, ich würde die Frage hier stellen:

Ich versuche, eine Bluetooth-Smart-Verbindung zwischen zwei Himbeer-PIs herzustellen, wo ich IPSP (Internet Protocol Support Profile) verwenden kann, um mit dem IPv6-Protokoll unter Verwendung von 6LoWPAN zu kommunizieren.

Ich konnte diese Kommunikation zwischen dem Raspberry Pis und einem Nordic nRF51-Entwicklungskit erfolgreich herstellen. Als Beweis für das Konzept versuche ich nun, diese Verbindung zwischen den beiden Raspberry Pi-Boxen ohne das Nordic nRF51-Entwicklungskit herzustellen.

Also war mein erster Schritt, den Himbeer-Pis einzurichten. Ich habe dies mit den Schritten in Nordic's nRF5-IoT-SDK ( https://developer.nordicsemi.com ) getan . Ich weiß, dass die Himbeer-Pis korrekt eingerichtet sind, da beide mit der nRF51-Karte arbeiten. Ich kann eine Verbindung zwischen dem Raspberry Pi und den nRF51-Boards herstellen und das nRF51-Board vom Raspberry Pi aus ping6.

Um nun eine Bluetooth-Verbindung zwischen dem Raspberry Pis herzustellen, starte ich folgende Schritte: Auf dem Master-Gerät führe ich die folgenden Befehle aus:

#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 

Auf dem Slave-Gerät führe ich die folgenden Befehle aus:

#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 

Der Befehl hcitool lecc gibt immer "Connection Handle 64" zurück. An diesem Punkt habe ich eine stabile Verbindung zwischen den beiden Geräten, die ich mit dem Befehl hcitool con überprüfen kann .

Ich kann jetzt den folgenden Befehl entweder auf dem Master oder dem Slave ausführen, wobei die MAC-Adresse die Adresse für das Bluetooth-Gerät ist, das ich auch verbinde:

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

Unabhängig davon, auf welchem ​​Raspberry Pi der Befehl ausgeführt wird, wird eine 6lowpan-Verbindung hergestellt. Wenn Sie den Befehl ifconfig ausführen, sehe ich ein neues bt0-Gerät. Das andere Raspberry Pi erhält jedoch kein BT0-Gerät. Ich habe versucht, den Befehl ifconfig bt0 up auszuführen und denselben Echo-Befehl auszuführen (die MAC-Adresse zu ändern), aber keiner von ihnen gibt mir das bt0-Gerät.

Das bt0-Gerät, das auf dem Raspberry Pi angezeigt wird, auf dem ich den Befehl ausgeführt habe, wird nach 39 Sekunden immer ausgeblendet. In der Protokolldatei / var / log / syslog scheint es, als ob der ntpd-Daemon die bt0-Schnittstelle hört, wenn er erscheint, und genau 39 Sekunden später erkennt er, dass die Schnittstelle nicht mehr vorhanden ist, und gibt sie frei. Ich habe versucht, dem Gerät eine IPv6-Adresse zuzuweisen, wenn es mit dem folgenden Befehl ausgeführt wird:

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

Ich habe dann einen Ping6-Befehl ausgeführt, um fortwährend einen Ping-Befehl auszuführen, in der Hoffnung, dass die Schnittstelle noch eine Weile aktiv bleibt, aber nach 39 Sekunden ist die Schnittstelle immer noch ausgefallen.

Ich verwende zwei Raspberry Pi 2 Model B und beide Bluetooth-Adapter sind Broadcom Corp BCM20702A0 Bluetooth 4.0-Geräte (verwendet lsusb, um Informationen über den Adapter zu erhalten). Obwohl die Adapter als Bluetooth 4.0 aufgeführt sind, konnte ich sie erfolgreich mit dem Nordic nRF51-Entwicklungskit verwenden, um eine 6LoWPAN-Verbindung herzustellen.

Nach all meinen Experimenten hier die Fragen, die ich habe:

  • Kann ich tun, was ich versuche?
  • Hat jemand erfolgreich eine 6LoWPAN-Verbindung zwischen zwei Linux-Geräten hergestellt, die mir sagen könnte, was mir in meinen Schritten fehlt?
  • Benötige ich eines der Bluetooth-Geräte, um mit Bluetooth Smart 4.2 kompatibel zu sein, um diese Verbindung korrekt herzustellen?
  • Wer kennt sich mit bluez aus und kann weitere Schritte empfehlen?

Jede Hilfe wäre sehr dankbar.

Jon

EDIT 1:

Ich konnte diese Verbindung zwischen einer Ubuntu 14.04-Box und einem Raspberry Pi herstellen, indem ich den vorinstallierten 3.19-Kernel von hier installierte: http://kernel.ubuntu.com/~kernel-ppa/mainline/linux-3.19. yz-queue / 2016-01-07-lebendig /

Ich verstehe immer noch nicht, warum es nicht zwischen den beiden Himbeer-Pis funktioniert, aber wenn ich eine Lösung finde, werde ich sie hier posten.

EDIT 2:

Ubuntu 14.04 läuft auf Bluez 4, während der Raspberry Pis auf Bluez 5 läuft. Da ich die beiden Raspberry Pis (mit Bluez 5) nicht verbinden konnte, dachte ich, ich würde versuchen, zwei Fedora 23-Instanzen mit Bluez 5 zu verbinden, um zu sehen, ob etwas nicht stimmt Bluez oder der Himbeer-Pis. In meinen Experimenten erlebe ich dasselbe Verhalten mit den beiden Fedora 23-Instanzen, die ich mit den beiden Raspberry-Pis gemacht habe (wobei die Verbindung mit dem 6lowpan in weniger als 30 Sekunden nach dem Verbinden unterbrochen wird).

Die Bluez-Version, die auf den Fedora 23-Instanzen ausgeführt wird, ist 5.35 und die Bluez-Version, die auf dem Raspberry Pis ausgeführt wird, ist 5.23.

Hat jemand eine Idee, warum dies mit Bluez 5.x geschieht?

Vielen Dank,

3

2 Antworten auf die Frage

2
Jon H

Lösung

Ich habe das Problem gerade gelöst. Das Problem war mit dem Kernel. Ich habe Ubuntu 15 installiert, hatte aber das gleiche Problem wie der Raspberry Pis, also habe ich die Quelle für den 4.4-Kernel heruntergeladen, konfiguriert und einen neuen Kernel erstellt. Nachdem der neue Kern installiert war, funktionierte alles super. Nicht sicher, ob es sich um das Patch-Level des Kernels oder die Konfiguration handelt, aber es funktioniert jetzt.

1
anandan111

Vielen Dank für deinen Beitrag. Ich habe letztes Jahr an IPv6 über BTLE gearbeitet, und ich habe genau das gleiche Problem wie Sie. Nach ungefähr 39 Sekunden wird die IPv6-über-BLE-Verbindung zwischen meinem Master- und Slave-Gerät getrennt. Dies ist mir in Linux-Kernel v4.1.x passiert (sowohl für Master als auch für Slave). Sowohl der Master als auch der Slave verwenden die gleichen Plattformen (leider kann ich aufgrund der Vertraulichkeit keine Details der Plattformen preisgeben). Ich kann nur sagen, dass es sich um eine x86_64-Plattform handelt, auf der ein Linux-Betriebssystem ausgeführt wird, das mit der Yocto-Plattform erstellt wurde.

Interessanterweise habe ich dann mit Kernel 3.19 vielversprechendere Ergebnisse erzielt. Ich habe auf beiden Plattformen uBuntu 14.04 LTS verwendet. Ich konnte die BlueZ-Version manuell von BlueZ v4.101 auf BlueZ v5.x aktualisieren. Ich kann mich nicht genau erinnern, welche Version von BlueZ 5 ich verwendet habe. Dann folgte ich den gleichen Schritten wie Sie und konnte es über einen langen Zeitraum erfolgreich halten. Ich erinnere mich, dass ich danach zum Abendessen gegangen bin und es dauert immer noch nach 30 Minuten. Dann führte ich den Test die ganze Nacht durch und die Verbindung blieb bestehen!

Vielen Dank, dass Sie mir diese Informationen zur Verfügung gestellt haben, welche Linux-Kernel-Version verwendet werden soll. In Bezug auf den Patch, der angewendet wurde, könnte er mit einem dieser Patches zusammenhängen: https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/log/?id= refs / tags / v4.4.27 & qt = grep & q = 6lowpan

Ich kann leider keine Kommentare hinzufügen, da ich zurzeit keinen guten Ruf habe. Also wollte ich nur teilen, was ich weiß. anandan111 vor 7 Jahren 0