使用蓝牙将数据从Arduino读取到Python

时间:2018-09-08 17:49:51

标签: python bluetooth arduino

我正在使用以下简单代码通过蓝牙(jy-mcu HC-06)与Arduino发送数据:

int a;

void setup() {
  Serial.begin(57600);
  a = 0;
  delay(2000);
}

void loop() {
  Serial.println(a);
  a++;
  delay(40);
}

我的问题是,当我尝试使用Python(在Linux上)读取数据时,前20秒(大约)会损坏某些数据。但是在此之后,我可以正确读取数据而没有任何其他错误。 Python代码:

import serial

ser = serial.Serial()
ser.port = "/dev/rfcomm0"
ser.baudrate = 57600
ser.open()

while True:
  print(ser.readline())

Arduino代码是一个循环,每40毫秒发送一个整数并将该整数加一。数据损坏的示例:

108
109
11161831191
192
193
194
195
1111
122222222222
2220
22266
267
268
269
270
133333533333633333373
33333333344444444444444444444444444444544444444444444444491
492
493
494

我使用外部电源为Arduino供电,该电源可提供5V和3A的稳定性。

我尝试使用Android蓝牙终端应用程序读取数据,并且一直都能正常工作。因此,我认为错误在于Python代码中。

我在Internet上阅读了很多信息,并且对代码进行了很多更改,但没有任何解决方案可以解决问题。这是我最新的代码之一,只是为了展示我的一些测试:

import serial, time
import sys

ser = serial.Serial()
ser.port = "/dev/rfcomm0"
ser.baudrate = 57600
ser.timeout = 1
ser.setDTR(False)
ser.setRTS(False)
ser.open()
old_data = 0
new_data = 0
ser.flushInput()
ser.flush()
ser.flushOutput()
time.sleep(1)

print("Start")
while True:
  raw_data = ser.readline()
  try:
    ser.flushInput()
    new_data = int(raw_data)
    ser.flush()
  except ValueError:
    pass
  print raw_data
  if (old_data != new_data -1 and old_data != 0):
print('ERROR#####################################################')
  old_data = new_data

  time.sleep(0.01)

感谢您的帮助,当然,我会在此处发布有关此问题的任何更新。

提前谢谢!

0 个答案:

没有答案