2016-09-06 5 views
1

Я пытаюсь установить связь через последовательный порт между ПК с Ubuntu 14.04LTS и моей платой RoMeo Arduino (Atmega 328). Используемый последовательный интерфейс - это 2 модуля Xbee, один на ПК и другой на плате.Потеря информации с помощью XBee

Во-первых, я пытаюсь разработать простую программу для отправки сообщений на доску и получения их обратно. Код я использую для платы Arduino является следующее:

void loop(void) 
{ 
char msg; 
if (Serial.available()){ 

    msg = Serial.read(); 


    msg = Serial.print(msg); 
} 
} 

Когда я посылаю уникальный характер, компьютер получает его обратно правильно. Тем не менее, проблема я столкнулся в том, что для более длинных строк, следующие символы с ошибками, как я получить обратно странные числа шестигранных следующим образом:

>>> import serial 
>>> ser = serial.Serial(port='/dev/ttyUSB0', baudrate=57600, timeout=0.1) 
>>> ser.write('H') 
>>> ser.read(1) 
'H' 
>>> ser.write('Hello') 
>>> ser.read(5) 
'H\x8b\xbd' 

Спасибо заранее.

EDIT: Кажется, проблема с переполнением с XBee modules, но я не могу понять это полностью: проблема решена, если я жду 0,01 секунды или более между отправленными символами, что является огромным количеством времени. А именно, код, который я использую сейчас для отправки слово является:

for letter in word: 
    serial.write(letter) 
    time.sleep(0.01) 

Однако, это время ожидания необходимо только при передаче данных от компьютера к Arduino. Когда общение идет в другую сторону (Arduino отправляет данные на ПК), мне не нужно спать, а байты правильно отправляются вместе на скорости 57600 бод.

+0

Попробуйте объявить 'msg' как' int' и использовать 'Serial.write (msg)' для эхо-символа. – mhawke

+0

Сделано, как вы сказали, @mhawke, но проблема сохраняется. Если я пишу в Python >> ser.write ('Hello'), я получаю обратно 'H \ x8b' – Jalo

+0

@mhawke 'Serial.write()' принимает 'byte' не' int' @Jalo попытаться установить задержку между 'ser.write()' и 'ser.read()' – mactro

ответ

0

Причина, по которой ПК не мог отправить более 1 символа на плату Arduino, состоял в том, что был модуль XBee, настроенный с различными параметрами порта, чем другой модуль и экземпляр pyserial. В этом случае, связь была установлена ​​в Python со следующими основными параметрами:

  • Скорость передачи: 57600

  • Bytesize: 8

  • Parity: Нет

  • Стоп биты : 1

Если один этих параметров отличается в одном из модулей XBee, связь будет неисправной (как в этом случае) или даже невозможной.

Для проверки конфигурации XBee можно использовать приложение Digi XCTU: с подключенными к ПК радиочастотными модулями откройте программу и прочитайте их конфигурацию. После открытия необходимо убедиться, что параметры «Последовательный интерфейс» равны ранее перечисленным.

XCTU interface with the Serial options opened

На изображении показано меню, где эти параметры могут быть изменены. Обратите внимание, что биты Stop и Bytesize не могут быть настроены. Первый параметр не регулировался до версий XB24-ZB, а последний - seems to not be possible to change.

В случае этого вопроса, неправильный параметр был четности, как это было установлено в пространственной четности в одном из модулей, вместо без контроля четности.Таким образом, первый байт был отправлен правильно, но после него данные не были когерентными. После изменения этого параметра соединение выполняется нормально.

 Смежные вопросы

  • Нет связанных вопросов^_^