Hallo Leute, Ich bin grade an einem Projekt dran. Ich möchte an einen rasp pi 4 2 Geräte über Bluetooth gemeinsam kommunizieren lassen. Anschließend wäre der zweite Schritt, dass diese zwei Geräte über ein Bluetooth Access Point aufs Internet zugreifen können. Aber erstmal zum ersten Schritt. Wie schaffe ich es, dass ich an einen rasp pi 4 zwei Geräte via Bluetooth verbinde und diese gemeinsam kommunizieren? Beispielsweise ein Smartphone und ein Lautsprecher, der ein Audi Signal von Smartphone abspielt. Ich habe was von einem Bluetooth Netzwerk gelesen, welches ich aufbauen muss. Stimmt das oder geht es auch leichter? Vor allem, weil ich ja im nächsten Schritt feste ip Adressen für diese zwei Bluetooth Geräte benötige, damit ich über den Raps ins Internet kann. Könnt ihr mir bitte helfen?
Grundlegend: über BT gibt es keine IP Adressen. Zum Googln und Nachschlagen: PAN (Personal Areas Network over Bluetooth)
Saskia schrieb: > Wie schaffe ich es, dass ich an einen rasp pi 4 zwei Geräte via > Bluetooth verbinde und diese gemeinsam kommunizieren? Beispielsweise ein > Smartphone und ein Lautsprecher, der ein Audi Signal von Smartphone > abspielt. Das ist eine unglückliche Konfiguration, weil dann das Audio-Signal nicht direkt vom Smartphone auf den Lautsprecher geht, sondern einmal durch den Raspi geschleift wird. Geht aber im Prinzip, z.b. mit pulseaudio & bluez. apt install pulseaudio-module-bluetooth dann entsprechende Sources und Sinks anlegen und verknüpfen. Geht Klicki-Bunti wenn auf dem Raspi ein volles graphisches DE läuft, ansonsten per script und pactl.
Hi, Vielen Dank für die Antworten. hmm kann mir da jemand einen Beitrag empfehlen, in dem ich nachschauen kann? Also ich meine den Teil mit der Schleife.. Aber bezogen auf meinen zweiten geplanten Schritt, brauche ich doch IP Adressen oder ? Also wenn ich Beispielsweise mit meinem Smartphone eine Bluetooth Verbindung zum Rasp schaffe und dann auf der anderen Schnittstelle den Rasp mit Wifi ans Internet anbinde. Wie soll dann der Rasp aus einer Bluetooth Verbindung sonst die jeweilige Wifi Verbindung zuordnen?
Saskia schrieb: > Also ich meine den Teil mit der Schleife.. Welche Schleife? Saskia schrieb: > Aber bezogen auf meinen zweiten geplanten Schritt, brauche ich doch IP > Adressen oder? Bluetooth ist kein WLan und will auch kein WLan sein... Dein Plan hört sich irgendwie an, als möchtest du eigentlich Wlan verwenden. Warum tust du das dann nicht? Ansonsten: PAN wurde schon genannt. Saskia schrieb: > Also wenn ich Beispielsweise mit meinem Smartphone eine Bluetooth > Verbindung zum Rasp schaffe und dann auf der anderen Schnittstelle den > Rasp mit Wifi ans Internet anbinde. Stichwort "Bluetooth-Tethering"... macht man zwar üblicherweise andersherum, um die LTE/5G-Internet-Verbindung vom Smartphone weiterzureichen, aber das ist ja egal. Auch hier: Hat einen Grund, warum sich das nicht wirklich durchgesetzt hat, und eigentlich jedes Händi erstmal Tethering per Wlan machen will... Aber wenn du den Weg weiterverfolgen willst: am raspi bridge einrichten, "bt-network" im Server-Mode starten, und das alle Bluetooth-Verbindungen an die Bridge weiterreichen lassen. Für diese bridge kannst du dann einen DHCP laufen lassen (da kommen dann deine IP-Adressen her) und mit dem üblichen iptables NAT/Masquerade das Internet weiterreichen.
:
Bearbeitet durch User
Erstmal vielen Dank. Die Antworten sind sehr hilfreich! Und vielen Dank für das PAN Dokument. Ich möchte unbedingt Bluetooth verwenden, da es auch mit Sensoren, die nur Bluetooth haben, Funktionieren soll. Aber erstmal will ich es mit dem Smartphone testen. Wenn ich das richtig verstanden habe, brauche ich für den ersten Schritt keine Bridge einzustellen, weil ja nichts ins Netzwerk geroutet werden soll? Hier verwende ich am Besten das PAN? Beim zweiten Schritt: Wenn ich also eine Bridge am raspberry pi einstelle, damit die Bluetooth Verbindungen ans wifi Netzwerk weitergereicht werden, kann mir da jemand vllt auch ein ähnliches Projekt oder eine Beschreibung empfehlen? Vielen Dank.
Saskia schrieb: > da es auch mit Sensoren, die > nur Bluetooth haben, Funktionieren soll. Diese sprechen aber sicher kein PAN, sondern haben ihre eigenen Profile. Vielleicht erstmal zum Verständnis: Bluetooth umfasst einen großen Satz an verschiedenen Profilen / "Sprachen", die für unterschiedliche Anwendungszwecke gedacht sind. Jedes Gerät spricht nur die "Sprachen", die für es relevant sind. "PAN" wäre so eine "Sprache", für Netzwerk-Verbindungen, wird von manchen Handies und Tablets gesprochen. "A2DP" wäre eine andere Sprache, für Audio-Übertragungen, wird von Headsets, Lautsprechern und Handies gesprochen. Hinzu kommt, dass die Dinger auch noch Richtungs-Abhängig sind. Nur weil ein Handy A2DP kann, kann man es noch lange nicht als "Lautsprecher" für ein zweites Handy einsetzen. Deine Idee, "alles in ein Netzwerk und dann kann das schon irgendwie kommunizieren" passt einfach nicht zu Bluetooth. Das ist WLan.
Ich möchte gerne ein Gateway schaffen, dass es ermöglicht eine Schnittstelle für Bluetooth Geräte zu schaffen, mit dem Internet zu kommunizieren. Deswegen taste ich mich erstmal langsam ran. Wenn ich also beispielsweise auf der einen Seite den Sensor habe, der mit dem rasp über Bluetooth verbunden ist, und auf der anderen Seite irgendein ftp Server im Netz, dann sollen diese über den rasp als Gateway miteinander kommunizieren können. Das war so meine Idee. Dass es mit wlan geht, weiß ich, nur will ich halt ein Gateway schaffen, welches auch Bluetooth Geräten dies ermöglicht.
Saskia schrieb: > Wenn ich also beispielsweise auf der einen Seite den Sensor habe, der > mit dem rasp über Bluetooth verbunden ist, und auf der anderen Seite > irgendein ftp Server im Dazu muss der Sensor "PAN" sprechen und darüber eine Internet-Verbindung aufbauen. Wenn er das kann, alles fein. Der Weg über eine Bridge, DHCP, nat und "bt-network" passt. Handelsübliche Bluetooth-Sensoren (egal ob Temperatur/Luftfeuchte/Herzfrequenz/Blumentopf-Wasserstand/Licht-Intensi tät ...) sprechen kein PAN, sondern geben ihre Messwerte z.B. per GATT weiter. Der übliche Weg hier wäre: Der RasPi sammelt die Messwerte per Bluetooth ein, und schiebt sie dann in eine Datenbank oder meinetwegen auf einen FTP-Server. Dafür gibt es haufenweise fast schlüsselfertige Lösungen, Node-Red, Openhab, fhem, iobroker, ….
Du koenntest einen Bluetooth Terminalserver bauen. Gegenueber Bluetoothgeraeten benutzt der ein serielles Profil. Dabei gibt es die zwei Faelle, dass dein Client/Sensor dann selbst aktiv zum besagtem Server connectet oder auch anders herum dein Server die Clients connecten muss. Der eigentliche Server mappt dann diese Bluetoothverbindungen auf TCP oder UDP-Ports die ueber eine IP-Adresse erreichbar sind. Meines Wissens werden aber nur maximal 16(?) solcher Verbindungen per BT-Adapter unterstuetzt. Fuer mehr Verbindungen muesstest einen zweiten BT-Adapter benutzen. BT-Geraete die tatsaechlich BT-PAN koennen, koennte er einfach ueber IP-Routing erreichen. Man kann einem BT-PAN-Adapter sehr wohl eine IP-Adresse konfigurieren.
P.S.: Wenn diese an den Terminalserver per BT angeschlossenen Geraete erreicht werden sollen, kannst du entweder Programme wie telnet oder netcat mit der Angabe der IP-Adresse und der Portnummer benutzen. Eine andere Moeglichkeit waeren virtuelle serielle Schnittstellen auf dem Host fuer die es auch Treiber gibt. Dann wuerde das remote BT-Device als eine lokal angeschlossene serielle Schnittstelle erscheinen und koennte auch so benutzt werden.
P.P.S.: Ob jemand einen solchen (BT-)Terminalserver bereits realisiert hat, kann ich dir nicht sagen. Es gibt aber keinen Grund, der einer Realisierung im Wege stehen wuerde. Wenn du die Erste waerst, sind dir Ruhm und Ehre ziemlich sicher :).
Also erstmal danke für alle Antworten. Ich habe berufsbedingt erst jetzt mit meinem Projekt anfangen können. Ich habe für den zweiten Versuch geschafft, wo es um die Anbindung eines Smartphones und Headsets mittels Bluetooth an einen raspberry pi 4, dass ich das Smartphone über ein mit dem Bluetooth Manager erstelltes pan Netzwerk verbinde. Es erscheint auch mit ip a ein pan0 Interface und eine ip Adresse. Wenn ich den Befehl arp -a eingebe, sehe ich auch, dass das Smartphone eine ip Adresse erhalten hat. Ich kann diese auch anpingen und vom Smartphone auch die Schnittstelle anpingen. Wenn ich das Headset aber verbinde, kann ich es nur als „Headset“ verbinden und es erscheint mit dem Befehl arp -a keine weitere ip Adresse. Wenn ich Musik Abspiele, wird diese auf dem Headset auch wiedergegeben, nur frag ich mich jetzt, wie ich diesen Traffic kontrollieren kann. Und meine weitere Frage bezüglich Versuch 3, wo es um die Anbindung beider Geräte an zwei verschiedene raspberry’s geht, würde ich gerne wissen, wie ich denn dann mit abspielen auf dem Handy die Wiedergabe auf dem Headset an dem zweiten raspberry erzielen kann? Dafür braucht es doch eine ip Adresse oder ? Danke für eure Hilfe
Saskia schrieb: > Wenn ich > das Headset aber verbinde, kann ich es nur als „Headset“ verbinden und > es erscheint mit dem Befehl arp -a keine weitere ip Adresse. Das versuchen wir dir seit Anfang des Threads zu erklären. Wenn das Headset kein "PAN" unterstützt, und es hat normalerweise keinerlei Grund das zu tun, dann wird es keine IP-Adresse kriegen können. Da kannst du genauso versuchen, IPs an Steine aus dem Garten zu verteilen.
Genau. Aber wie kriege ich es dann hin, die Musik vom Smartphone auf dem ersten raspberry pi auf dem Headset am zweiten raspberry mittels wifi und Bluetooth wiederzugeben? (Die raspberry sollen über wifi am heimrouter angebunden sein. Also: Smartphone -(Bluetooth)> raspberry 1 -(wifi)> Router -(wifi)> raspberry 2 -(Bluetooth)> Headset Ps: kann mir vllt noch jemand erklären, wieso zusätzlich eine bnep0 Schnittstelle erscheint, wenn ich das pan Netzwerk aufsetzte und das Smartphone damit verbinde ?
Saskia schrieb: > Smartphone -(Bluetooth)> raspberry 1 -(wifi)> Router -(wifi)> raspberry > 2 -(Bluetooth)> Headset Am Raspi1: Bluetooth-Audio-Sink und "module-rtp-send" über pulseaudio verknüpfen. Am Raspi2: Bluetooth-Audio-Source und "module-rtp-recv" über pulseaudio verknüpfen. wie die RTP/UDP-Daten dann den Weg vom Raspi1 zum Raspi2 finden, ist unerheblich. Das kannst du über Wifi machen, über Ethernet, oder meinetwegen über ein Bluetooth-PAN-Netzwerk. Saskia schrieb: > wieso zusätzlich eine bnep0 > Schnittstelle erscheint mach mal ein "brctl show", vielleicht geht dir dann ein Licht auf.
:
Bearbeitet durch User
Danke für die tolle Antwort! Wenn ich das aber so konfiguriere, wie Teile ich denn dann dem raspberry 1 meinetwegen mit, dass die Pakete auf der Schnittstelle wlan0 rausgehen sollen? Bzw. Auf dem raspberry 2 von der ankommenden wlan0 Schnittstelle auf das Headset als Audio sink weitergeleitet werden sollen? Mit nem Ping ist es ja einfach, da Ping ich die ip Adresse und der Router erledigt den Rest. Aber wenn ich keine ip Adresse habe, woher weiß der Router dann, dass die Pakete an den raspberry 2 auf die wlan0 Schaltstelle gehen sollen? Brtcl Show werde ich unverzüglich machen, sobald ich am Projekt sitze.
Saskia schrieb: > Wenn ich das aber so konfiguriere, wie Teile ich denn dann dem raspberry > 1 meinetwegen mit, dass die Pakete auf der Schnittstelle wlan0 rausgehen > sollen? Bzw. Auf dem raspberry 2 von der ankommenden wlan0 Schnittstelle > auf das Headset als Audio sink weitergeleitet werden sollen? Die Kombination der Pulseaudio-Module entfernt alles "bluetooth-hafte" von dem Audiostream, es ist nachher einfach "bluetoothfreier sound". Und der wird dann in RTP verpackt und als UDP verschickt. Die zwei Raspis finden sich am einfachsten über ihre IP-Adressen. Über welches Netzwerk-Interface die Daten dann laufen, ergibt sich aus den Adressen und den routing-tables. Wenn sie sich pingen können, passt das schon.
1 | # Raspi-1 |
2 | pactl load-module module-null-sink sink_name=stream sink_properties="device.description='StreamOverRTP'" |
3 | pactl load-module module-rtp-send source=stream.monitor destination_ip=192.168.99.99 |
4 | pactl set-default-sink stream |
5 | |
6 | # Raspi-2 (Mit IP 192.168.99.99) |
7 | pactl load-module module-rtp-recv latency_msec=10 sap_address=0.0.0.0 |
8 | # usw.... ein bischen pulseaudio-Doku darfst du schon selber lesen. |
Saskia schrieb: > wie Teile ich denn dann dem raspberry > 1 meinetwegen mit, dass die Pakete auf der Schnittstelle wlan0 rausgehen > sollen? Bzw. Auf dem raspberry 2 von der ankommenden wlan0 Schnittstelle > auf das Headset als Audio sink weitergeleitet werden sollen? Siehe Beitrag von Ernst. Musst du in der Konfiguration der Dienste auf den beiden Raspis konfigurieren. Letzenendes läuft auf beiden Raspis ein Serverdienst. Auf Raspi 1: RTP-Sender für beliebige Audio-Quelle (hier dein Handy) > Netzwerk (RTP) Auf Raspi 2: RTP-Receiver für RTP-Daten an beliebige Audio-Senke (hier dein Bluetooth-Lautsprecher) Wenn die Geräte nicht explizit dafür gedacht sind direkt miteinander zu kommunizieren geht es auch nicht (wobei Handy und Headset ja funktionieren sollten). Insbsondere gilt das für die direkte Verbindung ins und aus dem Internet.
So vielen Dank für die antworten. Das Klingt gut. Ich versuche das am Freitag mal so und gebe Feedback.
Also, Ich habe den Versuch 2 mit Audio source und sink hinbekommen. Habe dafür ganz normal beide Geräte verbunden und jeweils als source und sink bestimmt. Mitschnitte habe ich über wireshark gemacht. Zu Versuch 3 weiß ich leider nicht weiter. Der Befehl brctl Show gibt eine Brücke namens pan1 aus, aber ich habe doch ein pan1 Netzwerk erstellt. Heißt das soviel, wie dass bnep0 zu pan1 gebrückt ist?
Saskia schrieb: > Ich habe den Versuch 2 mit Audio source und sink hinbekommen. Dann bist du ja schon fast am Ziel. Nur noch die rtp-Endpunkte mit den jeweiligen Bluethooth-Audio-Endpunkten verbinden. Saskia schrieb: > Heißt das soviel, wie dass bnep0 zu > pan1 gebrückt ist? pan1 ist das Netzwerk, bnep0, bnep1, ... sind die Netzwerk-Teilnehmer. Dazu wird die "bridge"-Funktionalität von Linux verwendet, mit brctl siehst du dann dass die Netzwerk-Links der einzelnen bluetooth-Geräte an die Bridge verbunden sind.
Wenn ich das pan1 Netzwerk mit einer 10.0.0.1 Adresse versehe und anschließend die Geräte mit Internet Nutzung über das pan1 Netzwerk anbinde, dann erscheint nach der Eingabe des Befehls arp -a jeweils eine 10er ip Adresse. Also 10.0.0.107 und 10.0.0.134. Ich gehe davon aus, dass dies die ip Adressen der Clients sind oder? Wenn ich vom Smartphone die Schnittstelle 10.0.0.1 Pinge, funktioniert auch soweit alles. Ich kann aber komischerweise nicht die ip Adresse des anderen Endgerätes pingen. Weshalb ist das so? Ich kann lediglich die bnep Adresse des anderen Endgerätes pingen. Habt ihr da ne Quelle wo ich mir das mit bnep und pan nochmal durchlesen kann? Bzw. Wenn nicht zu umständlich ist, dass einer mir das nochmal erklärt ?
Alen schrieb: > Ich > kann aber komischerweise nicht die ip Adresse des anderen Endgerätes > pingen. Weshalb ist das so? Firewall-Einstellung am PC der die PAN-Bridge erstellt. Hat an der Stelle schon nichts mehr direkt mit Bluetooth zu tun, die IP-Pakete sind im Kernel da schon "einen Schritt weiter", in der Bridge. Und da hat sich vor einiger Zeit (mit Einführung von netfilter statt ebtables, denke ich) das default-Verhalten geändert, insofern finden sich vmtl. noch diverse unnvollständige HowTos im Netz. Versuch mal entweder, der Bridge gleich alles Firewalling für durchlaufende Pakete abzuschalten: (Gilt aber für alle Bridges im System) >> echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables >> bzw >> sysctl net.bridge.bridge-nf-call-iptables=0 oder du schreibst passende Regeln für die Firewall, z.B. >> iptables -A FORWARD -i pan1 -o pan1 -j ACCEPT Evtl. fehlt auch noch ein 1 > /proc/sys/net/ipv4/ip_forward
:
Bearbeitet durch User
Wo bleiben eigentlich die versprochenen
> Sensoren, die nur Bluetooth haben, Funktionieren soll
?
@motopick ich habe doch mehrmals erwähnt, dass ich es mit nem Headset erstmal versuche. Wo ist das Problem ? @ernst ich versuche es mal mit iptables. Forward hatte ich schon aktiviert. Aber wichtiger ist mir die Verbindung von Smartphone zu Headset über die zwei raspberry’s. Ich versuche es im nächsten Schritt erstmal mit Puleazdio und gebe Feedback. Funktioniert pulseaudio denn auch über den Router?
Alen schrieb: > Funktioniert pulseaudio denn auch über den > Router? Pulseaudio verschickt im vorgeschlagenen Setup einfach UDP-Pakete. Wie die zum Ziel kommen, ist völlig egal, geht mit direktem Kabel, über Wlan, über einen Switch, über einen Router (wenn der das nicht aktiv verhindert), über ein VPN, über das Internet, ...
Okay danke. Also nimmt pulseaudio lediglich die Bluetooth Daten und packt sie in ip ein, richtig? Also mit der vorgeschlagenen Konfiguration. Diese Daten können ja dann wegen ip von Router an den zweiten raspberry pi weitergeleitet werden, oder ? Ich habe außerdem gelesen, dass rfcomm ebenfalls so ein Protokoll bzw. Eine Art ist, serielle Verknüpfungen zu schaffen, stimmt das ?
Alen schrieb: > Also nimmt pulseaudio lediglich die Bluetooth Daten und packt sie in ip > ein, richtig? Nein. das bluetooth-modul von Puseaudio macht aus dem Bluetooth einen Audio-Daten-Stream. Mit dem kann man alles Mögliche machen, es unterscheidet sich an der Stelle nicht mehr von anderen Audio-Datenstreams, wie z.B. einer Mikrophonaufnahme oder einem Musik-Datei-Abspieler oder sonstwas. das rtp-sende-modul von Pulseaudio nimmt einen Audio-Stream, egal was dessen Quelle ist, und schickt ihn ins Netzwerk. das rtp-empfangs-Modul nimmt die Daten aus dem Netzwerk und macht wieder einen Audio-Stream daraus. Du scheinst zu erwarten, dass für all das irgendwelche Spezial-Sonderfall-Sachen nötig sind. So funktioniert Unix/Linux aber nicht, da wird alles, "Teile und Herrsche", auf kleine Teilbereiche heruntergebrochen, die für sich alleine dann relativ einfach sind, die sich aber dank klarer Schnittstellen zu komplexen Systemen zusammenstecken lassen. die Netzwerk-Bridge macht immer dasselbe, egal ob du da Bluetooth-PAN-Links oder Wlan-Interfaces oder Modem-Verbindungen oder sonstwas reinsteckst. Dein Netzwerk transportiert Daten von A nach B, egal ob die Daten jetzt aus einem "ping"-Programm, deinem Webbrowser oder pulseaudio kommen. Pulseaudio verknüpft Audio-Quellen und Ziele miteinander, egal ob das Ziel jetzt ein Lautsprecher oder ein Netzwerk-Datenstrom ist, und egal ob die Quelle ein Lokales Programm ist, was Sound abspielt, oder eben ein Bluetooth-Gerät.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.