从蓝牙插座解压缩整数数组

时间:2018-01-31 18:00:59

标签: android python sockets struct bluetooth

我目前正在使用Python的PiBot项目(带有4个轮子的机箱,现在通过蓝牙由Android应用程序控制)。 我用Python创建了一个原型,我可以创建一个BT服务器,订阅它并通过Android配对设备,并通过BT套接字发送信息:操纵杆给了我Android上的力量和角度,我成功地从它读取它们服务器。我使用Struct来从流字节解码整数数组。

这是我的BTServer类的一部分,我在服务器上显示值的循环:

def goToControls(self):
    while True:
        data = self.client_sock.recv(1024)
        size = len(data)
        print size, 'bits'

        try:
            angle, strength = struct.unpack('>ii', data)

            print angle, strength
            #self.cHandler.move(angle, strength)
        except struct.error:
            print 'bad scheme...'

在Android端,发送数据的功能:

if (btDevice.getMmSocket().isConnected()){
                int[] values = {angle, strength};

                ByteBuffer byteBuffer = ByteBuffer.allocate(values.length * 4);
                IntBuffer intBuffer = byteBuffer.asIntBuffer();
                intBuffer.put(values);

                byte[] array = byteBuffer.array();

                try {
                    btDevice.getMmSocket().getOutputStream().write(array);
                    btDevice.getMmSocket().getOutputStream().flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

这是我的控制台输出,来自服务器:

enter image description here

所以效果很好。一旦我取消注释行self.cHandler.move(angle, strength),它将数据提供给我的控件处理程序并使轮子转动,或者如果我用任何东西替换它,例如time.sleep(0.1),这就是我得到的:

enter image description here

看起来计划正在改变,我什么都听不懂......有人有线索吗?

非常感谢

- 编辑:

我找到了答案的一部分:我试图从android发送8个字节并从struct接收1024个。

所以我改变了它:

data = self.client_sock.recv(8)
angle, strength = struct.unpack('>ii', data)
print angle, strength
self.cHandler.move(angle, strength)

它有效,但它现在非常慢。如何解码这8个字节而不会像这样减慢进程?

0 个答案:

没有答案