Uno - ESP32 SoftwareSerial связь не работает

У меня есть две платы, Uno и ESP32, и моя цель — отправлять данные с Uno на ESP. Я сделал делитель напряжения, чтобы мой ESP не сгорел, и я использую связь только ОДНИМ способом, строго UNO -> ESP32. Я использую PIN 9 от моего UNO для отправки данных и RX2 (16) от моего ESP для получения данных. Однако я получаю ошибки и не могу заставить его работать.

Это мой код Uno:

#include <SoftwareSerial.h>

SoftwareSerial softPort(-1, 9);

void setup() {
Serial.begin(9600);
softPort.begin(9600);
}

void loop() {
softPort.print("100");
delay(2000);

}

и мой код ESP:

#include <SoftwareSerial.h>

#define RXD2 16
#define TXD2 -1

SoftwareSerial Serial2(RXD2, TXD2); // RX, TX

void setup() {
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);

}

void loop() {
Serial.println("Data received:");
Serial.println(Serial2.read());
delay(200);

}

Я получаю сообщение об ошибке

нет соответствующей функции для вызова 'SoftwareSerial::begin(int, int, int, int)'

, 👍0

Обсуждение

Хм .... зачем вам использовать SoftwareSerial на ESP32 для доступа к вторичному * аппаратному * UART?, @Majenko


1 ответ


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

0

На ESP32 вы никогда не используете SoftwareSerial, за исключением исключительных обстоятельств.

ESP32 имеет три аппаратных UART, которые можно сопоставить с любой комбинацией контактов на плате.

Общее использование:

HardwareSerial Serial2(1); // Использовать канал UART 1

void setup() {
    Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
}

UART пронумерованы от 0 до 2, где 0 предварительно назначен контактам TX/RX (подключение USB) и используется для отладки и программирования. UART 1 и 2 обычно нигде не назначаются, и вы можете использовать их по своему усмотрению.

,

Спасибо за ответ, сэр. Один вопрос: в Serial2(1) 1 означает RX1 и TX1? В моем случае, когда я использую RX2 и TX2, нужно ли использовать «Serial2(2)»? И нужно ли мне менять проводку, чтобы использовать HardwareSerial? Вот моя проводка прямо сейчас: https://i.imgur.com/KvIZQdx.png @Majenko, @Anthino Russo

№ 1 означает UART 1. Куда вы его подключаете, зависит от вас. У UART нет стандартных контактов (кроме UART 0 для загрузчика). Только когда вы вызываете begin(), вы указываете, какие контакты использовать. До тех пор у него нет шпилек. RX1 и TX1 — это просто метки, совпадающие с выводами загрузчика/отладки. Вы можете использовать 1 или 2 в конструкторе, и это не будет иметь никакого значения - он просто будет использовать другой модуль UART внутри чипа., @Majenko

Теперь я понял, еще раз спасибо и извините за мое невежество :) Наконец, не могли бы вы подтвердить правильность моей проводки и могу ли я использовать ее для HardwareSerial?, @Anthino Russo

GPIO3 используется по умолчанию для UART0 RX. Это соединение загрузчика/USB на большинстве плат. Вы должны выбрать что-то другое. Однако ни один из контактов RTC. Все, что между 13 и 33, является хорошим выбором., @Majenko