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:
- Raspberry Pi Model 2B (Raspbian Wheezy)
- USB Bluetooth Adapter (CSL/LogiLink)
- Bluetooth fähiges Handy (Android, iOS, etc.)
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:
Nun überprüfen wir, ob der Bluetooth Service bereits gestartet wurde (er wird automatisch bei jedem Neustart geladen).
sudo service bluetooth status
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.
24 Kommentare
Beim Verbinden mit meinem Smartphone (Nokia Lumia 630) erhalte ich folgende Meldung:
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.
Du scheinst nicht der einzige mit diesem Problem sein: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=41254
Ich habe es nur mit Android testen können, nicht jedoch mit WindowsPhone oder iOs 🙁
Ich hatte das gleiche Problem, bei mir hat das geholfen:
sudo nano /usr/bin/bluez-simple-agent
‚KeyboardDisplay‘ mit ‚DisplayYesNo‘ ersetzen und anschließend (vgl.: http://www.correlatedcontent.com/blog/bluetooth-keyboard-on-the-raspberry-pi/):
sudo bluez-simple-agent hci0 D0:92:9E:63:12:E7
OHNE das yes am Ende! Das Handy sollte daraufhin einen Pin anzeigen und bluez-simple-agent frägt
Confirm passkey (yes/no)
Was man mit yes bestätigt. Dann sollte es gekoppelt sein.
Wo hast du eigentlich so programmieren gelernt? Oder generell mit den Raspberry umzugehen?
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
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
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.Hallo Felix,
bei meiner Suche nach einem Rasberry Experten bin ich auf Dich gestossen. Anhand Deiner Kommentare glaube ich bei Dir ab der richtigen Adresse zu sein.
Ich möchte ein spannendes Projekt Rasbery Projekt realisieren und suche dafür jemand der Deine Kentnisse hat.
Bitte ruf mich an unter 0043 664 3021557 (Österreich/Salzburg)
oder kontaktiere mich via E-Mail
egger@gmx.com.
Betreff: Score Display
Erstmal Danke für Deine Antwort.
Ich habe es mit apt-get install python-bluetooth hinbekommen.
Jetzt wird import bluetooth erkannt bzw. angenommen.
Ja, das ist die Python-Bibliothek 🙂
Hallo Felix,
Ich bin am planen mein Rasp in mein Auto zu verbauen und möchte die Musik über Spotify spielen, was aber wie ich gelesen habe nur mit Spotify und einer bestehenden Internetverbindung funktioniert. Da kam ich auf die Idee das ganze über Spotify Connect zu machen aber habe dort auch gelesen das dafür eine Internetverbindung bestehen muss. Ich würde das ganze aber gerne ohne Internetverbindung laufen lassen.
Hast du damit Erfahrungen oder Ideen?
Und da das ganze am besten Kabellos passieren soll, fällt mir nur noch Bluetooth ein.
Könntest du mir sagen wie ich nun die Wiedergabe von Spotify über mein Handy dann über das Rasp regeln kann?
Und wie das Rasp das dann verarbeitet und auf den Klinken Ausgang bringen kann?
Schönen Gruß und danke im voraus!
Hallo Felix!
Wie genau funktioniert das mit dem FTP server? Ist es egal was für einen ich da nstalliere? Wird er immer automatisch auf eine Datei warten? Ich verstehe das nicht ganz, das wurde so schnell und selbstverständlich abgehandelt.
Würde nämlich sehr gerne eine Text Datei per Bluetooth an den Raspi senden, welche dort dann sobald sie angekommen ist, automatisch weiter verarbeitet wird. Hast du für den FTP Server ein genaueres Tutorial oder allgemein für mein Vorhaben eine Idee? Danke!
Ein FTP (File Transfer Protocol) Server ist nur dazu da, damit eine Verbindung aufgebaut werden und Dateien übertragen werden können. Von sich aus macht der nichts. Du kannst ein Skript schreiben, das dieses Protokoll nutzt und darüber die Daten weitersendet.
Raspberry Pi Webserver Installation Teil 5 – FTP Server
Hallo
Ich hätte eine Frage. Und zwar würde ich gerne eine bluetooth Fernbedienung nutzen, um in einem Programm bestimme Variablen zu ändern. Ich weiß nur nicht, wie ich das Signal der Bluetooth Fernbedienung in einem Programm integrieren und die schon im vorn hinein zugeordneten Befehle überschreiben kann, z.B. Cursorbewegung, durch Nutzung des Joysticks. Hast du oder irgendjemand sonst eine Idee?
Danke
Hallo Arne,
ich habe mich vor kurzem mit derselben Frage beschäftigt, mich dann aber für mein Python Programm für eine Steuerung via Infrarot Fernbedienung entschieden.
Schau‘ Dir mal das Video „Raspberry Pi Robotics #3: Keyboard Control“ an:
explainingcomputers.com/rasp_pi_robotics.html
Da wird gezeigt, wie man ein Python Programm mittels einzelner Tasten einer Bluetooth bzw. Wireless Tastatur steuern kann. Könnte mir vorstellen, dass Dir dieses Konzept weiterhilft.
Eine Frage:
Möchte mit Raspi Pi 3 und Raspi Kamera über Raspi Bluetooth ein Stream (Video) auf das Android Handy senden.
Geht das überhaupt?
Wenn ja , wie?
Hast du hierzu etwas gefunden?
Ich würde mir gern eine Rückfahrkamera für das Auto bauen. Gibt es eine Möglichkeit das Video über Bluetooth auf das Handy zu übertragen?
Hallo,
Ich kann aus irgend einen Grund
bluez-utils nicht installieren.
Kann mir jemand sagen wo dran das Ligen könnte?
Felix, im Vorab: Du bist echt ein Großer! Ich habe großen Respekt!
Herzlichen Dank!
Jetzt zu meinem Problemchen 😉
Konnte Rechner und Handy paaren. Aber keine Datei übertragen. „obexpushd: Befehl nicht gefunden“
Ich operiere mit einem funkelneuen System. (Set von renkforce) LXPanel 0.9.3 Welche Raspbian Version habe ich nicht rausfinden können…
Aber ich habe auch das Problem beim Wifi. Ich glaube fast, das die Übertragung blockiert wird und ich noch irgendwas anmelden muss. Die Hardware funktioniert augenscheinlich.
Was denkst du, wo liegt mein Fehler?
Danke
Danke 🙂
Versuch mal
sudo apt-get install obexpushd
ich habe das selbe Problem.
Ich bekomme den btclient unter pydroid nicht ans laufen. Das Bluetooth bzw pybluez Modul lässt sich mit pip nicht installieren…
Könnte man auch per Bluetooth die Systemzeit des Raspberry Pi auf die Systemzeit eines verbundenen Smartphones setzen? Im Portabelbetrieb verbinde ich meinen Raspberry Pi 4 mit meinem Smartphone per WIFI Hotspot, damit er die korrekte Uhrzeit vom ntp-server holt. Klappt natürlich nur, wenn das Smartphone selbst online ist (Netzverbindung hat). Wenn es offline ist, muss ich die Zeit -so gut ich kann- manuell einstellen. Kann man nicht irgendwie die Systemzeit vom Smartphone per Bluetooth auf den Raspberry Pi übertragen und so die Systemzeit des Pi setzen?
Hallo Felix,
gibt es eigentlich auch die Möglichkeit, eine SSH-Verbindung zum RPi aufzubauen?
Gruß Ingo