Arduino and Raspberry Pi 3

Использование Arduino/CraftDuino (Freeduino, Seeduino, ...).

Arduino and Raspberry Pi 3

Сообщение molosh » 14 ноя 2016, 19:03

Подключил Arduino Nano к Raspberry Pi 3.

Написал программу для ардуино(C++):

Код: Выделить всё
byte x = 0;

void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
}

void recieveDataUSB()
{
while(Serial.available()==1)
{
x = Serial.parseInt();
Serial.print(«Arduino[5] Recieved FromRaspberry(USB)=»);
Serial.println(x);
}
}

void loop() {
recieveDataUSB();
if (x==15){
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}


Написал программу для малины (Python):

Код: Выделить всё
import serial
ser = serial.Serial('/dev/ttyUSB0', 9600)
ser.write('15')
print('SENDING')
ser.close()

Работаю в Raspbian.
Проблема следующая.
Если запустить программу на Python, то число (в нашем случае 15) не считывается ардуиной.
Если в среде Arduino IDE открыть монитор COM-порта, затем(не закрывая окно монитора COM-порта) запустить программу, написанную на питоне, то число считывается, и лампочка мигает.

Вопрос. Как обеспечить передачу по USB так, чтобы не приходилось вручную открывать этот монитор COM и число нормально считывалось в arduino? Помогите, пожалуйста.
molosh
 
Сообщения: 4
Зарегистрирован: 14 ноя 2016, 19:01
programming: C++

Re: Arduino and Raspberry Pi 3

Сообщение admin » 15 ноя 2016, 17:34

Возможно, проблема в строчке
Код: Выделить всё
Serial.available()==1

available() - Возвращает количество байт, доступных для чтения.
Попробуйте заменить на
Код: Выделить всё
Serial.available() > 0
Аватара пользователя
admin
Администратор
 
Сообщения: 294
Зарегистрирован: 05 май 2011, 14:57
Откуда: Калининград

Re: Arduino and Raspberry Pi 3

Сообщение molosh » 15 ноя 2016, 19:11

Пробовал. Не помогло. =(
molosh
 
Сообщения: 4
Зарегистрирован: 14 ноя 2016, 19:01
programming: C++

Re: Arduino and Raspberry Pi 3

Сообщение admin » 16 ноя 2016, 13:47

Проверил. Всё дело в перезагрузке контроллера при открытии последовательного соединения.
Вот так всё работает:
Код: Выделить всё
import serial, time

ser = serial.Serial('COM4', 9600)

time.sleep(3) # give a time to settle connection

print('send...')
ser.write('15')

time.sleep(2)
print('read:')
data = ser.readline()
if data:
    print(data)
   
time.sleep(5)

print('Done')
ser.close()
Аватара пользователя
admin
Администратор
 
Сообщения: 294
Зарегистрирован: 05 май 2011, 14:57
Откуда: Калининград

Re: Arduino and Raspberry Pi 3

Сообщение molosh » 16 ноя 2016, 22:59

Спасибо.

Всё верно. Дело в том, что необходимо вставить задержку после строки:
ser = serial.Serial('/dev/ttyUSB0', 9600)
Мне хватило задержки в 2 секунды. time.sleep(2)
Это связано с тем, что COM-порт ещё не открылся, а RPi уже отправляет туда число. В итоге до Arduino ничего не доходит.

Такой вопрос, есть ли функция для Python, которая будет проверять, открылся ли COM-порт? Тогда я бы написал код так: если COM-порт открыт, то отправить число.

Как я понял, если плата будет сильно загружена, не всегда хватит задержки 2 сек, чтобы COM-порт открылся.
molosh
 
Сообщения: 4
Зарегистрирован: 14 ноя 2016, 19:01
programming: C++

Re: Arduino and Raspberry Pi 3

Сообщение admin » 17 ноя 2016, 12:17

molosh писал(а):Это связано с тем, что COM-порт ещё не открылся, а RPi уже отправляет туда число. В итоге до Arduino ничего не доходит.

Нет. Порт открывается, но при его открытии происходит перезагрузка контроллера и сначала запускается загрузчик (bootloader), который проверяет - не происходит ли попытка загрузить скетч в МК (при этом мигает светодиод L). И только потом, если загрузчик не видит попыток загрузки скетча - он передаёт управление ранее загруженной программе.

см. Disabling AutoReset On Serial Connection
Аватара пользователя
admin
Администратор
 
Сообщения: 294
Зарегистрирован: 05 май 2011, 14:57
Откуда: Калининград

Re: Arduino and Raspberry Pi 3

Сообщение molosh » 17 ноя 2016, 21:12

ага, понял спасибо.
molosh
 
Сообщения: 4
Зарегистрирован: 14 ноя 2016, 19:01
programming: C++


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

© 2009-2016 |  О проекте