Enviar bytes de Raspberry Pi (usando python) a una aplicación java android sobre bluetooth

Estoy trabajando en un proyecto para controlar un robot usando una aplicación móvil. Hasta ahora he conseguido enviar comandos de Bluetooth para hacer que el robot se mueva como se desee. Pero tengo problemas para recibir la entrada del Sensor Ultrasónico HC-SR04 que da un valor de flotación cada segundo. he escrito el código para convertir el flotador en bytes, a continuación, escribir los bytes de serie y leer y mostrarlos en textview con java para la aplicación. Pero sólo obtengo un signo de interrogación en la vista de texto que estoy suponiendo muestra que soy capaz de recibir datos en el canal, o bien los bytes no están completos o mis conversiones están mal?

Por favor ayuda.

########## Aquí está mi script python para enviar bytes

while True: a = ser.read() #read from the serial port ser.close() dist = initio.getDistance() #distance obtained from ultra sensor d = int(a.encode('hex'), 16) bytSend = struct.pack('f', dist) #convert the int distance to bytes ser.open() ser.write(bytSend) 

********** aquí es el código java para leer datos en el flujo y enviar a un manejador en mi código principal ***************

 public void run() { byte[] buffer = new byte[1024]; int bytes; // Keep listening to the InputStream while connected while (true) { try { // Read from the InputStream bytes = mmInStream.read(buffer); // Send the obtained bytes to the UI Activity mHandler.obtainMessage(initioActivity.MESSAGE_READ, bytes, -1, buffer) .sendToTarget(); } catch (IOException e) { // connectionLost(); break; } } } 

***** entonces en mi código principal (dentro de un manejador) tengo ***

 case MESSAGE_READ: //byte[] readBuf = (byte[]) msg.obj; byte[] readBuf = (byte[]) msg.obj; //construct a string from valid bytes in buffer String distance = new String(readBuf, 0, msg.arg1); myLabel.setText(distance); 

Cualquier idea de lo que puede estar haciendo mal?

One Solution collect form web for “Enviar bytes de Raspberry Pi (usando python) a una aplicación java android sobre bluetooth”

asumir cierta distancia d

 d = 23.45454 

por lo tanto, el mensaje codificado es

 encoded_d = struct.pack("f",d) print repr(encoded_d) # '\xe6\xa2\xbbA' 

así que cuando se lee en la cadena en java se obtiene que … ya que esos no son caracteres válidos que obtiene ? para cualquier carácter no válido

usted necesita para averiguar cómo decode nuevo a un flotador en java

para resolver esto la manera más fácil es probablemente para enviarlo simplemente como ascii

 d = 23.45454 ser.write(str(d)) 

esto hará que su mensaje pasa fraccionalmente más lento, pero a menos que sea realmente un problema, debería bastar

todo el código en esta entrada es python

  • Python + Django en Android
  • ¿Cuáles son las limitaciones de Python en Android?
  • Llame a Python google cloud endpoint api desde android
  • ¿Cómo autenticar la solicitud de POST de usuario de Android con Django REST API?
  • Desafíos al realizar el desarrollo de aplicaciones móviles con Python
  • Python para IOS o Android
  • Acción de zoom en android utilizando appium-python-client
  • Copie los archivos MTP de Android usando linux terminal o python; Error Operación no soportada
  • Cómo llamar a Python script desde Android
  • La lectura de cadena gzip en sqlite3 base de datos (python escribir, Java Android leer)
  • No hay entorno de Android SDK configurado para Kivy en Ubuntu 12.04
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.