Raspberry Pi Bluetooth Datentransfer

GPIO, Projekte

Raspberry Pi Bluetooth Datentransfer zum Smartphone

Neben einigen kabellosen Verbindungen wie 433Mhz, Infrarot und NFC ist Bluetooth die wohl verbreitetste und beliebteste Übertragungsart zwischen Smartphones, weshalb auch der Raspberry Pi Bluetooth Datentransfer interessant ist. Inzwischen unterstützen so ziemlich alle Geräte Bluetooth und lassen sich nicht nur darüber koppeln, sondern es lassen sich natürlich auch Daten übertragen, was in Projekten wie einem CarPC interessant ist.

In diesem Tutorial wird gezeigt, wie man Dateien zwischen Raspberry Pi und einem bluetooth-fähigen Handy / Smartphone austauschen kann.



 

Zubehör

In diesem Tutorial habe ich folgendes Zubehör verwendet:

Der Bluetooth Adapter kann erheblichen Einfluss auf die Reichweite haben. Billige Geräte erkennen die Verbindung oftmals nach einigen Metern oder Hindernissen nicht, wogegen hochwertigere Dongles auch bis zu einer Entfernung von 30 Metern (im Freien) funktionieren.

 

 

Einrichten der Software

Als erstes müssen einige Pakete installiert werden:

sudo apt-get install bluez-utils libopenobex1 obexftp obexpushd --yes

 

Nachdem der USB Bluetooth Dongle angeschlossen ist, überprüfen wir ob er auch richtig erkannt wurde:

lsusb | grep Bluetooth

Wurde ein Gerät erkannt, sieht es folgendermaßen aus:

raspberry pi bluetooth console

 

Nun überprüfen wir, ob der Bluetooth Service bereits gestartet wurde (er wird automatisch bei jedem Neustart geladen).

sudo service bluetooth status
Falls der Service nicht läuft, kann man ihn auch folgendermaßen neustarten: sudo service bluetooth restart

 

Anschließend muss das zu verbindende Gerät (Smartphone) gesucht werden. Dabei startet man einen Scan, der alle Geräte in naher Umgebung finden sollte.

hcitool scan

Dabei sollte das Handy direkt gefunden werden. Falls nicht, warte ein paar Sekunden, da das letzte Ergebnis zwischengespeichert wird. Falls es erkannt wurde, sieht es ungefähr so aus:

pi@raspberrypi ~ $ hcitool scan
Scanning ...
        C4:42:02:41:B2:06       SM-G901F

Diese Adresse des Geräts ist wichtig und wird weiter benötigt. Im folgenden muss sie entsprechend deiner Geräte-Adresse geändert werden.

Um nun den Pi und dein Handy zu verbinden muss diese Adresse angegeben werden (anpassen!):

sudo bluez-simple-agent hci0 C4:42:02:41:B2:06 yes

Anschließend wirst du nach einem Code gefragt, welchen du auch auf dem Handy eingeben musst (z.B. 1234).
Danach sollten die Geräte verbunden sein.

 

 

Dateien senden mit dem Raspberry Pi Bluetooth Modul

Dateien können auf verschiedenen Kanälen gesendet werden. Um herauszufinden welchem OBEX Kanal dein Smartphone nutzt, kannst du folgenden Befehl nutzen:

browse C4:42:02:41:B2:06 | egrep "Service Name:|Channel:"

Nun musst du schauen, welcher Kanal sich unter „OBEX Object Push“ befindet. Bei mir ist dies Channel 12.

Um eine Datei (hier ~/TEST.txt) zu übertragen, musst du folgendes Befehl angeben (anpassen nicht vergessen):

obexftp --nopath --noconn --uuid none --bluetooth C4:42:02:41:B2:06 --channel 12 -p ~/TEST.txt

Anschließend poppt auf dem Smartphone eine Anfrage auf, welche bestätigt werden muss.

Eine Reihe weiterer Beispiele von obexftp kann hier gefunden werden.

 

 

Dateien empfangen per Raspberry Pi Bluetooth

Um Dateien empfangen zu können, starten wir einen FTP Server auf dem Raspberry Pi, welcher auf Dateien wartet. Mit screen kann der Server auch im Hintergrund laufen gelassen werden.

sudo obexpushd -B -n

Nun kannst du auf dem Smartphone die zu sendende Datei auswählen und an den verbundenen Pi schicken. Je nach Größe dauert es natürlich etwas. Dabei wird die Datei in dem Verzeichnis erstellt, von welchem aus der Server gestartet wurde.

 

Abschließend sei noch gesagt, dass die verbundenen Geräte gespeichert bleiben und kein erneutes Verbinden nötig ist, solange beide Geräte (Raspberry Pi Bluetooth Modul sowie Endgerät wie das Smartphone) in Reichweite sind.



, , , , , ,


9 Kommentare

  1. Georg Dart sagt:

    Beim Verbinden mit meinem Smartphone (Nokia Lumia 630) erhalte ich folgende Meldung:

    pi@raspi3 ~ $ sudo bluez-simple-agent hci0 D0:92:9E:63:12:E7 yes
    Traceback (most recent call last):
      File "/usr/bin/bluez-simple-agent", line 116, in 
        device = adapter.FindDevice(args[1])
      File "/usr/lib/python2.7/dist-packages/dbus/proxies.py", line 70, in __call__
        return self._proxy_method(*args, **keywords)
      File "/usr/lib/python2.7/dist-packages/dbus/proxies.py", line 145, in __call__
        **keywords)
      File "/usr/lib/python2.7/dist-packages/dbus/connection.py", line 651, in call_blocking
        message, timeout)
    dbus.exceptions.DBusException: org.bluez.Error.DoesNotExist: Does Not Exist
    pi@raspi3 ~ $

    Was muss ich tun, um Verbindung zum Smartphone zu bekommen? Der Bluetooth Service laeuft, ich habe mein Debian-Wheezy auf dem aktuellen Stand, der Scan erkennt das Smartphone ohne Probleme.

  2. Lennard sagt:

    Wo hast du eigentlich so programmieren gelernt? Oder generell mit den Raspberry umzugehen?

    • Felix sagt:

      Hallo Lennard,
      habe es studiert und das Raspberry Pi hat mich seit es raus kam (2012) ziemlich fasziniert, worauf ich alles mögliche damit ausprobiert habe bzw. es für verschiedenes im Haus benutze. Irgendwann dachte ich, dass auch andere Interesse daran haben könnten und setzte den Blog auf, da es damals kaum gute Tutorials auf Deutsch gab.
      LG Felix

  3. Mike sagt:

    Mike
    Hallo Felix super beitrag von Dir.
    Ich habe da ein Problem und zwar findet mein Raspi das Handy mit bash kann ich auch
    Ports schalten. Gebe ich im Programm folgendes vor
    #!/usr/bin/python

    import time
    import bluetooth
    import RPi.GPIO as GPIO
    erhalte ich beim start des Prg. Traceback (most recent call last)
    als Fehler ImportError: No module named bluetooth
    kannst Du mir helfen? wäre echt toll

    • Felix sagt:

      Hallo Mike,
      du verwendest Python, aber die installierte Bluetooth Library ist für die Bash. Was du machen kannst ist mit os.system o.ä. ein Shell Skript aufrufen, welches den Bluetooth Befehl enthält.

  4. Mike sagt:

    Erstmal Danke für Deine Antwort.
    Ich habe es mit apt-get install python-bluetooth hinbekommen.
    Jetzt wird import bluetooth erkannt bzw. angenommen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!