带Python和Arduino的蓝牙(HC-06)

时间:2018-04-12 16:13:18

标签: python c bluetooth arduino

我试图将信息从我的Arduino发送到Python。我发送的信息是一个16个字符的字符串,问题是我没有一次收到所有数据。

Arduino代码:

void setup(){
  BTserial.begin(9600);
}

void loop() {
  BTserial.print("0123456789012345");
  delay(500);
}

Python代码:

import bluetooth

sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect(("00:13:04:83:EC:45", 1))

while(True):
   print(sock.recv(10))

出来的输出是:

b'0'
b'123456789'
b'012345'

我想要的输出是:

b'0123456789012345'

0123456789012345

感谢您的回答。

2 个答案:

答案 0 :(得分:0)

我有临时的非常方便的方法来修复它,但如果可以通过任何其他方式让我知道

string = ""
final = ""
num = 0

while(True):
   string = sock.recv(4096)
   if str(string) == "b'$'":
      num=1
   elif num == 1:
      final+=str(string)
      num = 2
   elif num == 2:
      final += str(string)
      final = final.replace(("b"), "")
      final = final.replace(("'"), "")
      print(final)
      final = ""
      num == 0

答案 1 :(得分:0)

在arduino输出序列中附加消息分隔符;你的选择,但'\ n'会很好。创建一个python生成器函数,从蓝牙流中读取输入字符,将它们组装到缓冲区中。收到消息分隔符后,产生整个缓冲区,因此调用生成器的函数将阻塞,直到整个消息可用。