android linux bluetooth raspberry-pi bluez

La conexión Bluetooth entre Android y Linux(RPi) se perdió en la primera acción de escritura



raspberry-pi bluez (1)

Resultó que la configuración por defecto de Bluez en Debian era la causa de los problemas de conexión (como se describe en esta respuesta . La desactivación del complemento /etc/bluetooth/main.conf en /etc/bluetooth/main.conf permitió la comunicación entre Android y el RPi).

DisablePlugins = pnat

Para futuras referencias, el UUID utilizado por las aplicaciones es 00000003-0000-1000-8000-00805F9B34FB .

Así que he estado trabajando en un proyecto en el que un dispositivo con Android (nivel de API = 14) debe conectarse a un servidor con Linux (para ser específico: una Raspberry Pi) a través de Bluetooth. Cuando se establece una conexión, la aplicación envía una cadena XML cifrada al RPi. El RPi debe descifrar esta cadena, analizar el XML y realizar la acción correspondiente. El resultado de la acción es enviar de vuelta al dispositivo Android.

Hasta ahora, he logrado crear una conexión entre la aplicación y el RPi (que ejecuta la última versión del paquete Bluez ). El RPi tiene un dongle Bluetooth 4.0 de Targus. El punto en el que estoy atascado es cuando intento enviar una cadena desde la aplicación al RPi. El conector Bluetooth parece estar cerrado para entonces. Logcat muestra el mensaje Connection reset by peer .

El código utilizado para crear el socket es el siguiente:

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

La salida Logcat es la siguiente:

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)

En el lado del RPi, básicamente ejecuto el siguiente script de servidor de ejemplo del paquete de PyBluez :

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"

He probado varios UUID sugeridos por publicaciones que leí en SO, incluyendo 00001101-0000-1000-8000-00805F9B34FB , 94f39d29-7d6d-437d-973b-fba39e49d4ee y 00000003-0000-1000-8000-00805F9B34FB (siempre lo mismo en los dos extremos) de la conexión). Parece ser que el primero es correcto ya que ni siquiera puedo hacer una conexión cuando uso otro UUID.

¿Cuál puede ser la causa de que la conexión sea restablecida por el RPi? Si alguien pudiera apuntarme en la dirección correcta, estaría agradecido.