Обмен данными (Arduino Uno и TP LINK TL MR3020)

Anril13
Offline
Зарегистрирован: 19.08.2013

Строю робота телеприсутствия по этой теме: http://habrahabr.ru/post/153017/
Возникла проблема в передаче данных по UART (От веб-интерфейса роутера к ардуинке)
Через "монитор порта" скетч работает, но данные не передаются через UART роутера (подключен правильно)

Помогите настроить передачу данных, где то читал что это можно осуществить и через USB, но нужно морочиться с библиотеками.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Скорость правильную выставляете???

Anril13
Offline
Зарегистрирован: 19.08.2013

Скорость в скетче была 9600, залил скетч со скоростью 115200 (стандартная скорость uart роутера, так указано тут:
http://roboforum.ru/wiki/OR-WRT#.D0.92.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BD.D0.BD.D1.8B.D0.B9_UART

Веб-интерфейс и передача данных по-прежнему не работает.
С подключенным роутером к ардуино запускаю монитор порта, отправляю туда любые данные и порт не отображает ничего

carduino.ru
Offline
Зарегистрирован: 06.12.2011

а через консоль прорверяли связь с ардуино?

отправить в ардуино echo 1 > /dev/ttyATH0
Прочитать от ардуино cat /dev/ttyATH0

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

консоль у роутера есть? попробуйте из нее(echo "test">>/dev/ttyS0) , поменяйте  Tx Rx, и посмотрите осцилографом(подключите USB-RS232) - вобщем разберитесь. Может вы чтонибудь коротнули и у вас порт тупо сдох.

Anril13
Offline
Зарегистрирован: 19.08.2013

Через консоль пишет нот фаунд

Anril13
Offline
Зарегистрирован: 19.08.2013

Порт сдох? На роутере или на ардуине? Как это проверить?

dmw
Offline
Зарегистрирован: 24.03.2013

На uno один порт uart и он используется когда подключена дуина к ПК через usb. Как вы проверяете что ничего не передается между роутером и дуиной?

Питание uart роутера 3.3В, если vcc не используете, по крайней мере земля должна быть общая.

И вобще сложно чегото советовать не видя ни схемы, ни скетча.

Anril13
Offline
Зарегистрирован: 19.08.2013


Вот так подлючил ардуину к роутеру, делал так как в статье.
Скетч проверял через монитор порта, все ок

#include <AFMotor.h> // Подключаем библиотеку для управления двигателями 

AF_DCMotor motor1(1); //создаем мотор №1 (Вперед/Назад)
AF_DCMotor motor2(2); //создаем мотор №2 (Лево/Право)
int led = 13; //встроенный светодиод (Будет мигать как только Ардуино получит данные с роутера)
boolean laight = 0; //освещение пути для машинки (Включать будем кнопкой "L")
int incomingByte = 0; //в этой переменной храним поступившие данные
int speedgo = 0; //переменная для хранения скорости движения

void setup() 
{
  Serial.begin(115200); //включаем передачу данных на скорости 9600 бит/c
  pinMode(13, OUTPUT); //указываем выход на пин 13 (Светодиод, индикатор данных)
  pinMode(2, OUTPUT); //указываем выход на пин 2 (Освещение для машинки)
  pinMode(11, OUTPUT); //Выход для двигателя №1 (Скорость и направление)
  pinMode(3, OUTPUT); //Выход для двигателя №2 (Скорость и направление)
  pinMode(0, INPUT); //RX   
  pinMode(1, INPUT);//TX
  motor1.setSpeed(255); //Скорость движка №1
  motor2.setSpeed(150); //Скорость движка №2
  
}

void loop() 
{ 
  if(Serial.available() > 0) //Если есть доступные данные, то считываем их
  {  
     incomingByte = Serial.read(); //Присваиваем переменной incomingByte наши считанные данные 
     digitalWrite(13, HIGH); //Зажигаем встроенный светодиод, так как пошло считывание данных
     //--- Делаем соответствующее действие ---
     if(incomingByte == 119) //Нажали кнопку W
     {
       motor1.run(FORWARD); //движемся вперед
       delay(250); //Включаем на 250 милисек 
       Serial.println("Vpered"); //Печатает данные в порт 
     }
     if(incomingByte == 115) //Нажали кнопку S
     {
       motor1.run(BACKWARD); //движемся назад
       delay(250); //Включаем на 250 милисек  
       Serial.println("Nazad"); //Печатает данные в порт
     }
     if(incomingByte == 97) //Нажали кнопку A
     {
       motor2.run(FORWARD); //Повернем влево
       Serial.println("Vlevo"); //Печатает данные в порт
     }
     if(incomingByte == 100) //Нажали кнопку D
     {
       motor2.run(BACKWARD); //Повернем вправо
       Serial.println("Vpravo"); //Печатает данные в порт
     }
     if(incomingByte == 108) //Нажали кнопку L
     {
       laight=!laight;  //Инвертируем переменную
     }                             
     digitalWrite(2, laight); //Включаем или выключаем свет  
     digitalWrite(13, LOW); //Тушим светодиод, так как чтение данных закончилось
     
     //--- Мониторим присланные данные ---  
     Serial.print("Dannie: ");
     Serial.println(incomingByte, DEC); //Пишем данные которые приняли в порт
  }             
}

 

alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012

Вы на один порт посадили два устройства, причём с разными напряжениями питания и разными логическими уровнями.

И на роутер вместо 3.3 вольт подали 5.

Anril13
Offline
Зарегистрирован: 19.08.2013

Можно популярнее? Что мне делать, кроме того что поменять питание uart

dmw
Offline
Зарегистрирован: 24.03.2013

Отключить от компьютера.
Подключиться к роутеру телнетом по WiFi и пробовать посылать как сказано в 3 сообщении.

Anril13
Offline
Зарегистрирован: 19.08.2013

Подключиться через PuTTY по телнету не могу, закрывает консоль и все. Могу только через SSH

dmw
Offline
Зарегистрирован: 24.03.2013

Ну по ssh какая разница.

Кстати внешнее питание ардуине нужно естественно (не через usb).

Anril13
Offline
Зарегистрирован: 19.08.2013

На echo 1 > /dev/ttyATH0 реагирует, мигает светодиод на 13 ноге при отправлении.
На cat/dev/ttyATH0 пишет нот фаунд. Веб-интерфейс все еще не работает. Буду думать дальше

dmw
Offline
Зарегистрирован: 24.03.2013

cat[пробел]/dev/ttyATH0

Anril13
Offline
Зарегистрирован: 19.08.2013

Блин, все заработало. Данные после cat /dev/ttyATH0 передаются в консоль и отображаются циклично.
Выходит одна проблема, в веб-интерфейсе.

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Anril13 пишет:

Вот так подлючил ардуину к роутеру, делал так как в статье.
Скетч проверял через монитор порта, все ок

я дико извиняюсь, а будут камни, ежели дуинку не прямо подключать, а через Bluetooth линк?

berserk
Offline
Зарегистрирован: 04.12.2013

Аналогичная проблема, ардуино уно к3 такойже роутер, из веб морды тоже не але, как решили проблему то?

Anril13
Offline
Зарегистрирован: 19.08.2013

Так и не решил, испортил два роутера, но в итоге ничего...

berserk
Offline
Зарегистрирован: 04.12.2013

Что то всетаки автор с хабра утаил, на форум писали что вроде нужен преобразователь уровней на 2 или 3 тразисторах, получаеться что на роутере напряжение  на UART 3,3в, а на ардуино 5в.

(как то не хочеться спалить роутер)

А роутеры что сгорели? или UART порт запален?

Anril13
Offline
Зарегистрирован: 19.08.2013

Роутеры не сгорели, UART цел, на первом слетел бутлоадер (а из-за ровности рук я не смог прошить флеш)
На втором роутере просто стоит or wrt с нерабочим веб-сервером

berserk
Offline
Зарегистрирован: 04.12.2013

http://robocraft.ru/forum/viewtopic.php?f=13&t=569

а вот как раз о конверторе, нужно будет его ссобрать и попробовать.https://www.sparkfun.com/products/8745

 

berserk
Offline
Зарегистрирован: 04.12.2013

У меня проблема почти разрешилась, ток есть  дикие задержики в исполнении команд моторами, задержки до 15-30секнуд

скеч  от ардуины другой.

berserk
Offline
Зарегистрирован: 04.12.2013

Собственно оно живет, катаеться почти как у автора, НО, у меня задержки так и остались в управлении.

нужно что то другое найти.

domrustika
Offline
Зарегистрирован: 23.02.2015

помогите! сделал по статье 

все подключил. заменил файлы на роутере. веб интерфейс не работает. нажимаю кнопки , машинка молчит. как проверить есть ли вообще связь  роутер -ардуино по юарт?

выше пишут

отправить в ардуино echo 1 > /dev/ttyATH0
Прочитать от ардуино cat /dev/ttyATH0

как и где это надо писать? в командной строке пишет нет такого пути!

berserk
Offline
Зарегистрирован: 04.12.2013

в консоли роутера, теость открываем путти цепляемся по SSH протоколу (естевенно роутер должен быть в сети и пинговаться)к роутеру и там вводим)

можно через RS232, тем же Putty подключиться.

за одно раскажите будут ли у вас задержик в отправке данных.

domrustika
Offline
Зарегистрирован: 23.02.2015

отправить в ардуино echo 1 > /dev/ttyATH0

ничего не происходит

однако на команду
ls /dev/tty*

выходит
/dev/tty      /dev/ttyATH0  /dev/ttyS0
тоесть подключено через юарт?

так почему тогда не работают кнопки??
 

berserk
Offline
Зарегистрирован: 04.12.2013

странно, а как было подключение? через SSH или RS232?

отправить в ардуино echo 1 > /dev/ttyATH0
Прочитать от ардуино cat /dev/ttyATH0

пробовали прочитаь?