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)'
@Anthino Russo, 👍0
Обсуждение1 ответ
Лучший ответ:
На 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
- SoftwareSerial не будет читать всю напечатанную строку при вызове readString()
- Проблема со связью с ESP32 (WT32-S1) с моим USB FTDI (hw-417-v1.2)
- AT-команда не отвечает на последовательный монитор
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- SIM800L не регистрируется в сети
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Как читать и записывать на устройство rs232 с/на Arduino
Хм .... зачем вам использовать SoftwareSerial на ESP32 для доступа к вторичному * аппаратному * UART?, @Majenko