我目前正在使用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();
}
}
这是我的控制台输出,来自服务器:
所以效果很好。一旦我取消注释行self.cHandler.move(angle, strength)
,它将数据提供给我的控件处理程序并使轮子转动,或者如果我用任何东西替换它,例如time.sleep(0.1)
,这就是我得到的:
看起来计划正在改变,我什么都听不懂......有人有线索吗?
非常感谢
- 编辑:
我找到了答案的一部分:我试图从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个字节而不会像这样减慢进程?