Передать текстовую информацию из Raspberry в Arduino по USB
-
Здравствуйте.
Никогда не сталкивался ранее с передачей данных по com порту, возникли вопросы.
Задача — передать строку данных с Raspberry Pi3 на Arduino UNO, с нее на 16x2 LCD экран.- Для начала пытаюсь передать просто цифру.
Прога на Raspberry Pi3
import serial
usbCom = serial.Serial('/dev/ttyUSB0', 9600)
usbCom.open
usbCom.write('5')
Прога в Arduino UNO
/* Подключаем библиотеку для работы с LCD */
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int usbRead;void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
}void loop()
{
lcd.setCursor(0, 0);
if(Serial.available()) {
usbRead = Serial.read() - '0';
lcd.print(usbRead);
}
}Почему не работает?)
- Как вместо цифры передать текстовую строку?
- Для начала пытаюсь передать просто цифру.
-
Попробуйте для начала соединить между собой выводы RX и TX малины (loop back test) и отправить самому себе любые данные, так можно убедится, что малина отправляет что либо.
P.S. raspberrypi.ru/blog/627.html -
Спасибо.
Raspberry точно отправляет, сужу по тому, что, когда запускаю на нем скрипт, текст на экране, подключенном к Arduino мигает. -
/* Подключаем библиотеку для работы с LCD */ #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int usbRead; void setup() { Serial.begin(9600); lcd.begin(16, 2); } void loop() { lcd.setCursor(0, 0); if(Serial.available()) { usbRead = Serial.read() — '0'; lcd.print(usbRead); while (1) {}; } }
попробуйте так
-
vestlopagrak (2016-11-16 11:37:06):/* Подключаем библиотеку для работы с LCD */
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int usbRead;void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
}void loop()
{
lcd.setCursor(0, 0);
if(Serial.available()) {
usbRead = Serial.read() — '0';
lcd.print(usbRead);
while (1) {};
}
}попробуйте так
Так тоже не работает.
Я попробовал вставить вывод статичной строки на жк экран в условиеif(Serial.available()) {
}Текст не выводится. Вне этого блока (в loop) — выводится. Видимо не срабатывает Serial.available? В чем может быть причина?
если сделать
if(Serial.available() == 0) {...}
, то, соответственно, на жк экран выводится -1. т.е. доступных данных нет.
При подключении
minicom -b 9600 -o -D /dev/ttyUSB0
при нажатии на клавиши клавиатуры на жк экран ардуины выводятся цифры. -
Разобрался. На Raspberry надо было так:
import serial
import time
usbCom = serial.Serial('/dev/ttyUSB0', 9600)
time.sleep(2) // <<=======================================
usbCom.open
usbCom.write("7")
usbCom.closeПосле подключения к ком порту ардуино перезагружается и не успевает принять данные.
-
Теперь вопрос — в каком виде с Raspberry передавать строку и как ее собирать в Arduino?) А то приходят цифры вместо символов.
А вот так!)
void loop()
{
lcd.setCursor(0, 0);
if(Serial.available() > 0) {
String read = Serial.readString();
lcd.print(read);
}