我目前正在用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个字节而不减慢这个过程呢?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐