Нужен ли еще один последовательный порт для связи по UART
- Войдите на сайт для отправки комментариев
Втр, 15/05/2018 - 00:39
Пока идут компоненты, решил попробовать связать Arduino и Wemos по UART. И тут задумался, если RX-TX будут подключены к другой плате, то смогу ли я смотреть в монитор порта и отслеживать, что передается с Arduino в Wemos?
Смотря какой контроллер Ардуино Вы будете использовать.
Если у него 2-4 последовательных порта, то монитор подключается к одному, а Wemos - к другому.
Если только один, обычно используется SoftwareSerial.
Uno, что то забыл указать...)
Если только один, обычно используется SoftwareSerial.
Если еще захочу посмотреть, какие данные поступили на Wemos, то на нем тоже нужно использовать SoftwareSerial?
На одном - аппаратный, на другом - софтверный. Софтверный в один момент времени может работать только один.
Если нужно 3 порта или более - берите Мегу или DUE.
Если нужно 3 порта или более - берите Мегу или DUE.
Нет, мне достаточно два: один для просмотра монитора порта, а другой для связи по UART.
Я правильно понимаю, что для UART нужно использовать Софтверный?
Я правильно понимаю, что для UART нужно использовать Софтверный?
Не могли бы Вы как-то переформулировать вопрос?
Прошу прощения, слизал вашу фразу, видимо не в тему...) Насколько я понял, при помощи библиотеки SoftwareSerial, можно создать еще один программный последовательный порт, вы его назвали Софтверный(если я правильно вас понял..)), к примеру на 3-4 цифровых пинах. Получается для связи Arduino Uno и Wemos по UART, нужно использовать именно его, а не штатный на 0-1 цифровых пинах?
Использовать так, как Вам удобнее.
Собственно, аппаратный на Uno уже подключен к преобразователю USB-UART, поэтому логично именно его использовать для связи с компьютером по USB, а для связи с другим устройством, естественно, остается только программный. Но следует помнить, что программный имеет больше ограничений в использовании, в частности, не может работать на высоких частотах. Если это окажется критичным, то, возможно, окажется целесообразным пртивоположное решение: с компьютером связываться через SoftwareSerial при помощи внешнего USB-UART, а с другим устройством - через аппаратный, проигнорировав установленный на плате USB-UART.
Задачи бывают разные, и они требуют разных решений.
Понял, благодарю..) Не могу найти, какие можно использовать цифровые пины, для подключения с другими устройствами на Uno и Wemos D1 R2?
Если Вы про SoftwareSerial, то, насколько я помню, его можно повесить на любые пины Uno (разумеется, кроме А6 и А7, которых на оригинальном Uno нет).
Да, про него. У меня были не понятки с wemos, я думал что: d1 - это 1, d2 - это 2, для присвоения пина, сейчас вроде разобрался..)
Столкнулся с проблемой потери данных, я понимаю что косяк мой...), но не могу его решить... Ситуация следующая. С вемоса раз в две секунды передаются данные в ардуино:
В ардуино их принимаю только, если увижу вначале фразу: "<tempRegAndroidD>":
Далее по флагу sFlag1, передаю данные обратно в вемос:
В свою очередь в вемос их принимаю только, если увижу фразу:"<tempD>":
Но в мониторе порта вемоса не всегда корректные данные(то пропуски каких то переменных, то не правильные данные, то не находит несколько подряд идущих данных):
sana555, слишком много сущностей разом, так программы не отлаживают. Сделайте подробный вывод в сериал после первой передачи данных, убедитесь. что на этом этапе нет ошибок. Если все ОК - переходите к следующей, и отлаживайте каждую передачу в отдельности.
А как сделать подробный вывод?
А как сделать подробный вывод?
вот как вы на последнем этапе выводите - так в монитор порта и выводите значения АндроидП АндроидД и так далее. Только не просто выводите всю принятую строку целиком - а по отдельности значение каждого поля, чтобы видеть, что ваш разбор принимаемых данных работает правильно.
То есть так не достаточно:?
Нужно еще что то добавить, можете показать пример, а то я буксую...)
Так?
Софтверный в один момент времени может работать только один.
Оказывается тот код, который я выложил, у меня все принимает нормально, без ошибок..) Я просто случайно(пробовал по разному) закоментировал свой флаг:
if
(sFlag1 == 1){
Этот флаг я сделал методом проб и тыка..) Но, до сих пор не понял, почему без него, данные шлются как попало(указывал выше), какую он играет роль? Ведь данные, которые посылает ардуино в вемос, никак не связыны с тем, что ардуино принимает с вемоса. Единственное, принятое время, но ведь оно записывается в переменную, и ардуино шлет его уже из этой переменной, я в ступоре...)