2013-06-20 2 views
20

So habe ich in dem an einem Projekt gearbeitet, ein Gerät mit Android (API-Ebene = 14) ausgeführt wird, muss mit einem Server verbinden Linux läuft (um genau zu sein: a Raspberry Pi) über Bluetooth. Wenn eine Verbindung hergestellt wird, sendet die App eine verschlüsselte XML-Zeichenfolge an das RPi. Der RPi muss diese Zeichenfolge entschlüsseln, die XML analysieren und die entsprechende Aktion ausführen. Das Ergebnis der Aktion wird an das Android-Gerät gesendet.Bluetooth-Verbindung zwischen Android und Linux (RPI) verloren auf den ersten Schreibaktion

Bis jetzt habe ich es geschafft, eine Verbindung zwischen der App und dem RPi (der die neueste Version des Bluez package ausführt) zu erstellen. Das RPi hat einen Bluetooth 4.0 Dongle von Targus. Der Punkt, wo ich bin stecken, ist, wenn ich versuche, eine Zeichenfolge aus der App an RPI zu senden. Das Bluetooth-Socket scheint dann geschlossen zu sein. Logcat gibt die Nachricht Connection reset by peer.

Der verwendete Code ist, den Sockel zu schaffen, wie folgt: Logcat Ausgang

Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class}); 
tmp = (BluetoothSocket) m.invoke(device, 1); 

ist wie folgt:

06-20 14:29:42.224: DEBUG/RPiService(24273): ---------- [ CONNECTION ESTABLISHED ] ---------- 
06-20 14:29:42.224: DEBUG/RPiService(24273): connected, Socket Type:Secure 
06-20 14:29:42.229: DEBUG/RPiService(24273): create ConnectedThread: Secure 
06-20 14:29:43.734: DEBUG/RPiService(24273): setState() 2 -> 3 
06-20 14:29:43.739: DEBUG/RPiService(24273): Connection reset by peer 
06-20 14:29:43.744: WARN/System.err(24273): java.io.IOException: Connection reset by peer 
06-20 14:29:43.754: WARN/System.err(24273): at android.bluetooth.BluetoothSocket.writeNative(Native Method) 
06-20 14:29:43.759: WARN/System.err(24273): at android.bluetooth.BluetoothSocket.write(BluetoothSocket.java:398) 
06-20 14:29:43.764: WARN/System.err(24273): at android.bluetooth.BluetoothOutputStream.write(BluetoothOutputStream.java:85) 
06-20 14:29:43.769: WARN/System.err(24273): at com.example.BluetoothTest.RPiService$ConnectedThread.run(RPiService.java:344) 

Auf der Seite des RPI Ich verwende im wesentlichen das folgende Beispiel Server-Skript aus dem PyBluez Paket:

from bluetooth import * 

server_sock=BluetoothSocket(RFCOMM) 
server_sock.bind(("",PORT_ANY)) 
server_sock.listen(1) 

port = server_sock.getsockname()[1] 

uuid = "00001101-0000-1000-8000-00805F9B34FB" 

advertise_service(server_sock, "SampleServer", 
    service_id = uuid, 
    service_classes = [ uuid, SERIAL_PORT_CLASS ], 
    profiles = [ SERIAL_PORT_PROFILE ] 
) 

print "Waiting for connection on RFCOMM channel %d" % port 

client_sock, client_info = server_sock.accept() 
print "Accepted connection from ", client_info 

try: 
    while True: 
     data = client_sock.recv(1024) 
     if len(data) == 0: break 
     print "received [%s]" % data 
except IOError: 
    pass 

print "disconnected" 

client_sock.close() 
server_sock.close() 
print "all done" 

Ich habe durch Beiträge vorgeschlagen verschiedene UUIDs habe ich versucht, SO einschließlich las auf 00001101-0000-1000-8000-00805F9B34FB, 94f39d29-7d6d-437d-973b-fba39e49d4ee und 00000003-0000-1000-8000-00805F9B34FB (immer das gleiche an beiden Enden der Verbindung). Es scheint zu sein, dass die erste richtig ist, da ich nicht einmal eine Verbindung herstellen kann, wenn eine andere UUID verwenden.

Was ist die Ursache für die Verbindung sein kann durch RPI zurückgesetzt werden? Wenn mir jemand in die richtige Richtung zeigen könnte, wäre ich dankbar.

+0

Können Sie die Lösung als Antwort posten, damit diese Frage nicht nach oben zeigen, wenn die Leute für offene Fragen aussehen? Vielen Dank! – pmos

Antwort

1

Es stellte sich heraus, dass die Standard Bluez Konfiguration auf Debian die Ursache für die Verbindungsprobleme war (wie in this answer beschrieben. Das Deaktivieren der pnat Plugin in /etc/bluetooth/main.conf für die Kommunikation zwischen Android erlaubt und RPI.

DisablePlugins = pnat 

Für die Zukunft, die UUID von den Anwendungen verwendet wird, ist 00000003-0000-1000-8000-00805F9B34FB.

Verwandte Themen