Зачем сопоставлять контакты ардуино 2 и 3 с Rx и Tx вместо того, чтобы использовать встроенные контакты Rx и Tx?

Во многих примерах я вижу следующее:

#include <SoftwareSerial.h>

const byte rxPin = 2;
const byte txPin = 3;

// настройка нового последовательного объекта
SoftwareSerial mySerial (rxPin, txPin);

в чем преимущество такого сопоставления контактов 2 и 3? Почему бы просто не использовать встроенные контакты RX (pin 0) и TX (pin 1)? Я использую стандартный Arduino Uno.

, 👍1

Обсуждение

он позволяет иметь два последовательных порта ... затем его можно использовать для отладки, @jsotola

@jsotola Пожалуйста, не отвечайте на вопросы в комментариях - используйте для этого поле ответа. Комментарии здесь предназначены для получения более подробной информации о вопросе., @Nick Gammon


2 ответа


Лучший ответ:

2

SoftwareSerial позволяет добавить дополнительный последовательный порт, используя "битный стук" для чтения/записи в порт. Это позволяет подключить другое последовательное устройство (например, GPS, RFID-считыватель, MIDI-устройство, ЖК-дисплей) к этому дополнительному порту и по-прежнему использовать аппаратный последовательный интерфейс (контакты 0 и 1) через USB-порт для отправки сообщений и/или отладки на подключенный ПК.


Есть ли какая-либо специальная проводка, необходимая для отправки сообщений на подключенный компьютер? Или достаточно того, что они просто не будут использоваться?

Контакты 0 и 1 подключены к микросхеме USB - интерфейса ATmega16U2. Если он получит что-то похожее на серийные данные, он перешлет их на компьютер.

,

Есть ли какая-либо специальная проводка, необходимая для отправки сообщений на подключенный компьютер? Или достаточно того, что они просто не будут использоваться? В настоящее время я использую аппаратные порты для связи с модулем Wi-Fi ESP8266, и я все еще могу видеть вывод Serial.print() на моем последовательном мониторе., @Adrian M

@AdrianM, но esp8266 тоже получает ваши отладочные отпечатки. если у вас есть прошивка AT в esp8266, прошивка пытается их обработать. это нарушает предыдущую и/или следующую команду, @Juraj

См.Мой исправленный ответ. Однако я согласен с Юраем, что то, что вы отправляете через порты 0 и 1, также будет отправлено на все, что вы подключили к этим контактам **и** USB-интерфейсу., @Nick Gammon


1

Ник Гаммон указал, что контакты 0 (RX) и 1 (TX) уже подключены к микросхеме USB-Serial 16U2. Правильно. Хотя вывод передачи, вывод 1, может управлять несколькими устройствами / последовательными портами, вывод приема, вывод 0, управляется чипом 16U2. См.: https://www.arduino.cc/en/uploads/Main/arduino-uno-schematic.pdf Попытка использовать это приведет к связыванию двух выходов вместе (никогда не бывает хорошо, если выходы не настроены на открытый коллектор/открытый сток). Я видел много щитов, которые пытаются использовать контакты 2 и 3 для последовательного порта. (Не очень хорошая идея для последовательного периферийного устройства...)

,

Re “ _ приведет к связыванию двух выходов вместе”: между TX 16U2 и RX 328P есть резистор 1 Ком, который делает это безопасным., @Edgar Bonet