我正在使用以下简单代码通过蓝牙(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)
感谢您的帮助,当然,我会在此处发布有关此问题的任何更新。
提前谢谢!