Чтение данных из Arduino в Python с помощью Bluetooth - PullRequest
0 голосов
/ 08 сентября 2018

Я отправляю данные с Arduino через Bluetooth (jy-mcu HC-06), используя этот простой код:

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 от внешнего источника питания, который дает 5 В и 3 А с большой стабильностью.

Я пытался прочитать данные с помощью терминального приложения Android Bluetooth, и оно все время прекрасно работало. По этой причине я предполагаю, что ошибка в коде Python.

Я прочитал много информации в Интернете, и я сделал много изменений в коде, но ничто не решает проблему. Это один из моих последних кодов, просто чтобы показать некоторые из моих тестов:

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)

Я ценю любую помощь, и, конечно, я буду публиковать здесь любые обновления по этому вопросу.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...