Wie eine Verbindung zu Raspberry pi mit einer android app über bluetooth
Ich habe Probleme beim Anschluss meines Smartphones auf meinem raspberry pi über bluetooth mit einer app.
Meine situation:
Entwickle ich ein bluetooth steuerbare Anwendung basierend auf einem raspberry pi. Ich bin in der Lage, die Verbindung zum raspberry pi über bluetooth und das senden und empfangen von Daten über RFCOMM socket mit der app "bluetooth terminal". Der raspberry pi ist ständig empfangsbereit für RFCOMM-Verbindung.
Mein Ziel:
Ich will eine app entwickeln, in dem der Benutzer eine Verbindung herstellen kann mit dem raspberry pi über bluetooth. Sollte die app öffnen Sie den RFCOMM socket, so kann es die Kommunikation mit dem pi.
Mein problem:
Meine app ist nicht in der Lage, eine Verbindung zu dem raspberry pi und da weiß ich nicht, die UUID des raspberry pi, ich denke, dass könnte das problem sein.
Mein code:
Ich bin ganz neu bei java-Programmierung, so korrigieren Sie mich, wenn Sie sehen, dass etwas seltsames vor. Dies ist die Methode, die ich bin versucht zu verbinden.
public void BTConnect() {
final UUID MY_UUID = UUID.fromString("0000110E-0000-1000-8000-00805F9B34FB");
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothSocket socket = null;
String RPi_MAC = "XX:XX:XX:XX:XX:XX";
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
//If there are paired devices
if (pairedDevices.size() > 0) {
//Loop through paired devices
for (BluetoothDevice device : pairedDevices) {
if (device.getAddress().equals(RPi_MAC)) {
try {
socket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e0) {
Log.d("BT_TEST", "Cannot create socket");
e0.printStackTrace();
}
try {
socket.connect();
} catch (IOException e1) {
try {
socket.close();
Log.d("BT_TEST", "Cannot connect");
e1.printStackTrace();
} catch (IOException e2) {
Log.d("BT_TEST", "Socket not closed");
e2.printStackTrace();
}
}
}
}
}
}
Wenn ich auf die Schaltfläche, um zu verbinden, das ist die Ausgabe von android studio:
W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback
D/BT_TEST: Cannot connect
W/System.err: java.io.IOException: read failed, socket might closed or timeout, read ret: -1
W/System.err: at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:599)
W/System.err: at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:610)
W/System.err: at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:333)
W/System.err: at com.example.gebruiker.soundslikepi.MainActivity.BTConnect(MainActivity.java:80)
W/System.err: at com.example.gebruiker.soundslikepi.MainActivity$1.onClick(MainActivity.java:39)
W/System.err: at android.view.View.performClick(View.java:4856)
W/System.err: at android.view.View$PerformClick.run(View.java:19956)
W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err: at android.os.Looper.loop(Looper.java:211)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5373)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
Zusammengefasst:
So, in der Lage sein, um eine Verbindung mit dem raspberry pi von einem android-app, kann ich:
- Müssen wissen, was die UUID des raspberry pi ist, wenn ja, wie finde ich das heraus?
- Müssen, verwenden Sie einen anderen Ansatz in meine android-app?
Ich würde wirklich gerne wissen, wie dieses problem zu lösen, so dass jede Hilfe wäre sehr geschätzt.
Nein habe ich noch nicht eine Lösung finden.. Wenn ich das Tue, werde ich auf dieses Thema
So heute habe ich beschlossen, weiterhin zu versuchen, eine Verbindung zu meinem raspberry pi amd mein android-Handy über bluetooth.. Mit Erfolg! Ich versuchte es noch einmal mit einer uuid und ich fand, dass die uuid, die ich von der raspberry pi war die Basis der uuid des bluetooth-Geräten (0000XXXX-0000-1000-8000-00805F9B34FB) mit dem RFCOMM-spezifische 16-bit-uuid auf das X. Ich war in der Lage, es zu finden, im internet und auf dem raspberry pi mit "sdptool browse local"
Ich bin auch auf der Suche nach einer ähnlichen Anwendung soll die Kommunikation zwischen RPi und Android via Bluetooth. Können Sie teilen Sie Ihre RPi-Seite Beispiel ich habe über den Befehl basierten Lösungen für die Kommunikation über RFCOMM aber nicht sicher, wie man Integration in der Anwendung. Auf der RPi-Seite haben Sie eine Bibliothek, um Daten zu behandeln-Kommunikation?
InformationsquelleAutor R_Zee | 2016-03-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schnelle Antwort
Ähnlich wie du angefangen auf dieser eine bluetooth-Verbindung erfordert, dass sowohl Geräte-Adresse und service UUID.
Den Geräte-Adresse (ex: 00:72:02:97:33:2C) erhalten Sie vom gekoppelten Geräte (oder indem Sie für eine Entdeckung), siehe Android Beispiel-app für mehr.
Die UUID (ex: 00001101-0000-1000-8000-00805F9B34FB) ist in der Regel definiert, die auf der server-Teil, wo ein Bluetooth-Dienst ausgeführt wird, mit einem bestimmten Bezeichner.
Nun, wenn Sie wollen, um zu vermeiden, dass der Letzte Teil nur kommunizieren will, einfach Daten Sie können sich auf einen Standard über den seriellen bluetooth-port. Von Android Bluetooth Dokumentation:
Mehr Informationen
Android-Dokumentation & Beispielcode
Android-sample BluetoothChat ist ein schönes Beispiel, wie man mit 2-Wege-Kommunikation zwischen 2 android-Geräten.
Android Bluetooth Dokumentation https://developer.android.com/guide/topics/connectivity/bluetooth.html
Der Bluetooth-Chat-sample - https://developer.android.com/samples/index.html. Beachten Sie, dass Sie überprüfen können dieses Projekt nur durch Auswahl von Datei > Neu - > Beispiel-Projekt und die Suche nach Bluetooth-Chat in Android Studio.
Bluetooth-Verbindung von Android auf Raspberry Pi (Python & Android-code)
Umgang mit ab wie ein Dienst auf einem raspberry pi finden Sie mit Hilfe dieses Python-Beispiel: http://blog.davidvassallo.me/2014/05/11/android-linux-raspberry-pi-bluetooth-communication/. Nur eine der vielen Proben online zur Verfügung. Dieses Beispiel enthält Android-code.
Mit Standard-UUID für die Serielle Schnittstelle (C++ code)
Wenn Sie wollen, so etwas umzusetzen auf dem raspberry Pi mit C++ - code kann ich empfohlen, die Dokumentation von http://people.csail.mit.edu/albert/bluez-intro/x502.html.
Link hat Beispiel code für server und client. Da dies mit den RFCOMM-Skillung und Standard-serial-port-UUID gibt es keine Notwendigkeit, geben Sie eine beliebige UUID.
BlueTerm Android-Open-source-App (Android-code)
Wenn Sie einen Blick in, wie die Verbindung aus android -, Sie werden wahrscheinlich am Ende der Suche die BlueTerm app von android. Dies ist ein open-source-app, so finden Sie alle Quellen an https://github.com/johnhowe/BlueTerm/tree/master/src/es/pymasde/blueterm. Dort finden Sie die UUID für das serial-port-Dienst:
Den kompletten BluetoothSerialService Klasse ist eine gute Möglichkeit, der Verwaltung eine bluetooth-Verbindung, einschließlich der Handhabung von Nachrichten, UI.
InformationsquelleAutor hcpl
Ich denke, linux-bluetooth verwenden, müssen angeben, mit dem port verbinden.
InformationsquelleAutor Charein
brauchen Sie nicht zu wissen, die uuid, müssen Sie die uuid, die Sie verwenden möchten, auf client und server
InformationsquelleAutor Josue Martinez