解压来自蓝牙的整数数组

2024-06-25 23:20:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在用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个字节而不减慢这个过程呢?你知道吗


Tags: self服务器datamove字节structstrengthandroid