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.
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