Невозможно заставить работать последовательный порт
Я купил модуль, который должен общаться через последовательный RX/TX. Модуль и код описаны здесь: https://www.dfrobot.com/wiki/index.php/Weather_Station_with_Anemometer/Wind_vane/Rain_bucket_SKU:SEN0186.
Я подключил все, как описано (используя Arduino Nano вместо Uno, но остальное то же самое) и теперь пытаюсь заставить все работать. Я не смог получить никакого приличного вывода. Поэтому я решил переключиться на минимальную программу для чтения данных из последовательного порта, чтобы посмотреть, что происходит. Я нашел следующий пример: https://gist.github.com/Protoneer/96db95bfb87c3befe46e и реализовал этот код (только этот).
Теперь я вижу следующее:
- При подключении RX/TX неправильным образом, когда я сбрасываю nano, последовательный монитор показывает мне один экземпляр строки, которую я ищу (как описано в документации модуля). При правильном подключении текста там нет, но это ожидаемо, так как nano должен его получить (а не последовательный монитор). Однако это доказывает, что модуль действительно отправляет данные.
- Serial.available
, похоже, все время оценивается как 0, указывая на отсутствие данных для считывания с последовательной линии.
Так почему же Serial.available
возвращает 0, хотя, кажется, что данные отправляются на последовательный порт, поскольку монитор показывает строку, которую я ищу, с перекрещенными контактами. Я также пробовал отключать линию RX на модуле, чтобы предотвратить отправку операторов по последовательному порту, которые могли бы помешать работе модуля. В документации не говорится о необходимости отправлять что-либо на модуль для запуска ответа. Фактически, если вы посмотрите на пример кода, первое взаимодействие с последовательным портом (после Serial.begin(9600)
) — это Serial.available()
.
Есть ли что-то еще, что я могу сделать с точки зрения отладки? Как вы могли заметить, я не эксперт в этом деле.
@Jasper, 👍0
Обсуждение1 ответ
Лучший ответ:
Похоже, у вас модуль подключен к контактам Nano 0 и 1, а также вы пытаетесь связаться с ПК через объект Serial
и последовательный монитор?
На Nano есть чип USB/последовательного преобразователя, который, вероятно, конфликтует с вашим модулем. Вы можете попробовать SoftwareSerial, чтобы получить бит-банговый последовательный порт для связи с модулем на некоторых других пинах.
Вы имеете в виду контакты 0 и 1 - RX и TX?, @Juraj
Исправленный ответ относится к контактам RX/TX 0/1., @jose can u c
Как это конфликтует? Устройство отправляет данные только на RX Nano. TX не подключен к устройству, поэтому Nano не отправляет данные на устройство, только на USB. Ничего не отправляется с компьютера на Nano, и это не остановит устройство., @Juraj
@Juraj, ну, даже если с компьютера ничего не отправляется, tx микросхемы usb-serial подключен (через резистор) к rx микросхемы atmega. josecanuc, для скорости 9600 бод я предпочитаю AltSoftSerial., @Jot
Это действительно исправило проблему, SoftwareSerial на контактах 10 и 11 работает как и ожидалось., @Jasper
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Как Arduino может проверить, подключен ли он к ПК и включен ли компьютер?
- Как отправлять и получать беззнаковые целые (unsigned int) от одного arduino к другому arduino
- Использование последовательных контактов TX/ RX для связи по USB
- NRF24L01+ (библиотека TMRH20): Получатель получает пустые данные
Первая мысль, платы Nano бывают 3 и 5 вольт. На метеостанции четко написано, что это 5-вольтовое устройство. Может быть, у вас не тот Nano?, @st2000
Напряжение не соответствует норме, подключено к 5 В на нано., @Jasper
Если последовательный терминал отображает данные, это означает, что контакты TX и RX подключены неправильно., @Majenko
@Majenko, вы правы, я перепутал результаты тестов. При правильном подключении кабелей (RX-TX, TX-RX) я на самом деле не получаю содержимое на последовательном мониторе. Но конечный результат остается прежним: Serial.available возвращает false и входящие данные отсутствуют, хотя при обратном подключении проводов данные, похоже, отправляются., @Jasper
available()
возвращает количество доступных данных., @JurajДа, фактическая проверка — Serial.available() > 0 (что возвращает false)., @Jasper
Итак, вы копируете данные из последовательного порта в последовательный, передавая их на устройство в формате ASCII? Какова может быть реакция устройства?, @Juraj
Смотрите суть, пример кода берет то, что приходит, и печатает это, ничего больше. Но поскольку нет никакого входящего кода, нет и печати. Если я делаю
Serial.println
, это тоже отправляется на устройство? Понятия не имею, как оно на это отреагирует., @Jasperподключен ли RX устройства к TX Nano? тогда последовательный выход Nano отправляется на устройство, @Juraj
Да, он подключен, я пробовал отключать TX от nano (чтобы был подключен только модуль TX => RX nano), но это дало тот же результат, доступно возвращение 0., @Jasper
@Jasper, есть поговорка, что протокол RS232 (не говоря уже о физической части) — это стандарт, который не является стандартом. Я бы рекомендовал вам открыть это самостоятельно, отказавшись от встроенного мира и подключив свою погодную «штуку» к компьютеру с настраиваемым приложением, таким как RealTerm. Как только вы разберетесь с правильной конфигурацией, вы сможете вернуться к встроенному миру., @st2000
извините за 2400 бод. это в другом вопросе о метеостанции, @Juraj
Итак, у вас есть модуль, подключенный к контактам Nano 1 и 2, и вы также пытаетесь связаться с ПК через объект
Serial
и последовательный монитор? На Nano есть чип USB/последовательного преобразователя, который, вероятно, конфликтует с вашим модулем. Вы можете попробовать SoftwareSerial, чтобы получить бит-банговый последовательный порт для связи с модулем на некоторых других контактах., @jose can u c@josecanuc, если ты опубликуешь это в качестве ответа, я смогу дать тебе заслуженные баллы :), @Jasper
как SoftwareSerial помог, если вам нужен только RX для подключения к устройству и вы ничего не отправляете по USB на Uno, @Juraj
@Juraj, контакты 0 и 1 подключены к чипу usb-serial с резистором. Сигналы могут быть переопределены чем-то другим, но мы не знаем, насколько силен сигнал tx от модуля., @Jot
@Jot, если это работает в примере с производителями, то это должно быть достаточно прочно, @Juraj
Я тоже не уверен, в чем проблема. Может, это мой дешевый китайский nano вызывает проблемы. В любом случае, я точно знаю, что теперь, когда он подключен к другим контактам и использует SoftwareSerial, все работает так, как надо. У меня тоже есть "настоящий" uno, попробую и его., @Jasper