Senden von Bytes von Raspberry Pi (mit Python) zu einer Java-Android-Anwendung über Bluetooth



Answers

Question

Ich arbeite an einem Projekt, um einen Roboter mit einer mobilen App zu steuern. Bis jetzt habe ich es geschafft, Bluetooth-Befehle zu senden, um den Roboter wie gewünscht bewegen zu lassen. Aber ich habe Probleme, Eingang von dem Ultraschallsensor HC-SR04 zu erhalten, der jede Sekunde ein Schwimmerventil gibt. Ich habe Code geschrieben, um den Float in Bytes umzuwandeln, dann schreibe ich die Bytes in serial und lese sie und zeige sie in textview an, wobei Java für die Anwendung verwendet wird. Aber ich bekomme nur ein Fragezeichen in der Textansicht, die unterstellt, dass ich Daten auf dem Kanal empfangen kann, entweder die Bytes sind nicht vollständig oder meine Conversions sind falsch?

Bitte helfen Sie.

########## hier ist mein Python-Skript zum Senden von 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)

********** hier ist der Java-Code, um Daten im Stream zu lesen und an einen Handler auf meinem Hauptcode zu senden ***************

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;
                }
            }
        }

***** dann in meinem Hauptcode (in einem Handler) habe ich ***

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);

Irgendwelche Ideen was ich falsch machen könnte?




Links