Перехват UART между двумя устройствами

frundik
Offline
Зарегистрирован: 02.08.2016

Добрый день!

Столкнулся с задачей, дано:

Контроллер электромотора для велосипеда у которого есть UART к которому можно присоединить Bluetooth адаптер.

Есть BT адаптер

Есть китайский софт (приложение под Ios/Android), который коннектится через BT к контроллеру и снимает показания (скорость, заряд батареи и тп и тд), а так же при необходимости изменяет настройки контроллера.

Я не хочу пользоваться BT адаптером, а хочу подсоединить  контроллер мотора к Ардуино. Подсоединить UART не сложно и тут вопросов не возникает проблема, которую китайские  производители по какой-то причине не хотят/ не могут помочь мне решить - это как "приложение" общается с контроллером, какие  пакеты передает/принимает, какие команды использует ((((

В связи с чем возникла у меня идея, может быть можно взять DUE или MEGA (с несколькими UART), на один посадить контроллер, на другой BT адаптер. Ардуино будет просто транслировать все  данные с одного UART на другой попутно логируя все что происходит.

Как вы думаете, сработает? И если да, то как лучше всего организовать ретрансляцию с одного UART на другой, хватит ли банального:

if(Serial1.available())

Serial2.print((char)Serial1.read());

else  if(Serial2.available())
  Serial1.print((char)Serial2.read());

Заранее всем благодарен за  помощь.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Так попробуй и нам расскажешь.

Upper
Offline
Зарегистрирован: 23.06.2020

В вашем примере надо, как минимум, использовать не print а write.

Не понятно зачем транслировать, если можно просто читать - что передается по RX и TX не влияя на передаваемые данные?

frundik
Offline
Зарегистрирован: 02.08.2016

Upper пишет:

В вашем примере надо, как минимум, использовать не print а write.

Не понятно зачем транслировать, если можно просто читать - что передается по RX и TX не влияя на передаваемые данные?

Не подскажите как ?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

frundik пишет:

хватит ли банального:

if(Serial1.available())

Serial2.print((char)Serial1.read());

else  if(Serial2.available())
  Serial1.print((char)Serial2.read());

Заранее всем благодарен за  помощь.

А какой в этом смысл? Где логирование?

Ну, опять же, не print, а write.

И читать можно прямо в параллель - без всякой трансляции.

В общем, непонятно, зачем все эти сложности.

frundik
Offline
Зарегистрирован: 02.08.2016

andriano пишет:

frundik пишет:

хватит ли банального:

if(Serial1.available())

Serial2.print((char)Serial1.read());

else  if(Serial2.available())
  Serial1.print((char)Serial2.read());

Заранее всем благодарен за  помощь.

А какой в этом смысл? Где логирование?

Ну, опять же, не print, а write.

И читать можно прямо в параллель - без всякой трансляции.

В общем, непонятно, зачем все эти сложности.

 

Ну, в коде я не описывал логирование - так как этот процесс для меня более менее ясен.

И я не большой профессионал в ардуино, поэтому если вам будет не сложно, могли бы вы более подробно описать как читать прямо в параллель ?

спасибо

Upper
Offline
Зарегистрирован: 23.06.2020

Некоторые размышления.

Первым делом надо будет определить скорость передачи 9600 или .....

В случае трансляции - тут более понятно. Если "велосипед" правильно реагирует на команды и дает адекватные ответы, значит скорость угадали. Но теоретически возможно и что нибудь испортить работая на не правильной скорости.

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

frundik пишет:

И я не большой профессионал в ардуино, поэтому если вам будет не сложно, могли бы вы более подробно описать как читать прямо в параллель ?

А какое именно из двух слов непонятно: "читать" или "в параллель"?

Upper
Offline
Зарегистрирован: 23.06.2020

Соединяете контроллер велосипеда с Bluetooth по UART и подсоединяете дополнительно один контакт разъема UART к RX1 (например) а второй к RX2 вашей ардуино. (и не забыть соединить GND). Т.е на вашей ардуино должно быть три COM порта, два для слушанья, и один для связи с компом.

frundik
Offline
Зарегистрирован: 02.08.2016

Upper пишет:

Соединяете контроллер велосипеда с Bluetooth по UART и подсоединяете дополнительно один контакт разъема UART к RX1 (например) а второй к RX2 вашей ардуино. (и не забыть соединить GND). Т.е на вашей ардуино должно быть три COM порта, два для слушанья, и один для связи с компом.

О! Теперь пазлики сошлись у меня в голове.

Спасибо огромное. Буду пробовать