通过蓝牙从Raspberry Pi(使用python)发送字节到java android应用程序

时间:2015-04-20 20:55:50

标签: java android python raspberry-pi

我正在开发一个使用移动应用程序控制机器人的项目。到目前为止,我已设法发送蓝牙命令,使机器人按需要移动。但是我无法接收来自超声波传感器HC-SR04的输入,它每秒都会产生一个浮动谷。我已编写代码将float转换为字节然后将字节写入串行并读取并使用java为应用程序在textview上显示它们。 但我只在textview上得到一个问号我假设显示我能够在通道上接收数据,或者字节不完整或我的转换是错误的?

请帮忙。

##########这是我发送字节的python脚本
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)

**********这里是java代码,用于读取流上的数据并发送到我的主代码***************上的处理程序

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

*****然后在我的主代码中(在处理程序内)我有***

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

任何想法我可能做错了什么?

1 个答案:

答案 0 :(得分:0)

假设距离为d

d = 23.45454

其他编码信息是

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

所以当你在java中读取字符串时,你得到了...... 由于这些字符不是有效字符,因此对于任何无效字符都会获得?

你需要弄清楚如何decode回到java中的浮点数

解决这个问题最简单的方法就是将其发送为ascii

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

这将使你的消息传递速度略慢但除非它实际上是一个问题,它应该足够了

这篇文章中的所有代码都是python