Задать вопрос
@MisterSmith

Как на Raspberry pi настроить UART?

Добрый день.
Соединил Rasberry PI и ардуино через UART по USB кабелю.
Но почему то работает не так как следует. При отправке данных с raspberry видно, что данные на ардуино приходят (моргают встроенные светодиоды RX и TX), но программа на ардуино не обрабатывает корректно входные данные.
На ардуино простая программа (суть):
...
if ((String)buffer_in == "777"){
digitalWrite(7, HIGH); 
    delay(1000);       
    digitalWrite(7, LOW); 
    delay(1000);
}
...

Т.е. светодиод не загорается.

Но когда на распберри выполняешь команду "minicom -b 9600 -o -D /dev/ttyACM0", после этого вызвав еще 2-3 раза скрипт передающий данные на ардуино, становится все нормально. И данные теперь передаются и на стороне ардуино все принимается и корректно обрабатывается.
В чем может быть дело?
  • Вопрос задан
  • 3841 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@evgeniy_lm
У тебя Arduino пытается принимать на скорости 9600, это минимальная скорость и UART должен работать без проблем вот ее и тыкают во все скетчи и ты ее нарисовал. Raspberry штука более крутая и настройки UART по умолчанию там более крутые. Передача данных синхронная, т.е. скорости должны совпадать, когда ты на малине меняешь скорость под Arduino то все становится нормально.
Можешь попробовать поменять скорость UART на Arduino под Raspberry
Ответ написан
rvbglas
@rvbglas
Программист, фотограф, турист
Установить скорость и режим работы порта со стороны RPi тот же, что ожидается ардуиной, например, позвав stty с нужными параметрами.
Ответ написан
@MisterSmith Автор вопроса
Интересный момент обнаружился
Если вызвать два консольных окна и в одном написать
код1:
>>> python
>>> import serial
>>> ser = serial.Serial("/dev/ttyACM0", 9600)

То при вызове в другом окне скрипта который отправляет на ардуину данные скриптом python sendtoarduino.py, все срабатывает нормально
sendtoarduino.py:
import serial

ser = serial.Serial("/dev/ttyACM0", 9600)
ser.open()
ser.write("777,led,add")
ser.close()


Причем видно что stty -F /dev/ttyACM0 выдает до вызова код1 и после одинаковые настройки порта.

Вся суть тут:
https://yadi.sk/i/LevrXMU3xevo4
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы