Доброе утро всем. Я пытаюсь установить последовательную связь между arduino mega и esp32, в обоих случаях я использую аппаратные серийные номера. В ардуино uart3, в esp uart2. Я несколько раз проверял контактные соединения. Я также адаптировал сигнал tx Arduino к esp32 с помощью переключателя уровня.
По сути, мне нужно отправить строку в esp32. Код ардуино выглядит следующим образом:
String InvioDatiESP() {
String da_passare = ("hello!!!");
return(da_passare);
}
void setup() {
Serial.begin(9600);
Serial3.begin(115200);
}
void loop() {
Serial3.println(InvioDatiESP());
Serial.println(InvioDatiESP());
delay(1000);
}
Я создаю строку в функции, так как это сокращенная версия фактического кода, в котором должна быть составлена строка.
Код Esp32 выглядит следующим образом:
#define RXp2 16
#define TXp2 17
void setup() {
Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, RXp2, TXp2);
}
void loop() {
Serial.println(Serial2.readString());
}
Я правильно установил скорость передачи данных для обоих последовательных портов в среде IDE, чтобы проверить связь.
То, что я заметил, заставляет меня сомневаться в том, что проблема связана только с ESP32, читающим строку, заключается в том, что в последовательном порту ESP32 в IDE во время работы программы пустые строки печатаются на экране ровно каждые 1000 мс, так как если данные получены, но неправильно интерпретированы.
Как я мог решить это, по-вашему? Заранее спасибо за ответы!
Проверка работоспособности здесь: вы подключили землю от arduino к земле ESP32, верно?
Да GND в порядке ахах
@Juraj Хорошо, на самом деле вход в элемент управления if больше ничего не печатает
проверьте проводку. это RX для TX? для короткого теста вы можете попробовать без смещения уровня для более простой проводки.
Обновлено: Можете ли вы попытаться снизить скорость? Проверьте, правильно ли начнет декодирование с более низким значением.
Ваша проблема не в коде, а в железе. Arduino Mega2560 использует логический уровень 5 В, а ESP32 использует 3,3 В. Вам нужно сделать некоторый сдвиг уровня, чтобы иметь возможность общаться.
Вы можете прочитать эту статью, чтобы узнать больше об этом.
Надеюсь, поможет.
Привет, спасибо за ответ, но, как я уже писал в вопросе, я адаптировал сигнал arduino TX к 3,3 В esp RX с помощью переключателя уровня.
Омг, я должен быть слепым. Ты прав. Какую плату ESP32 вы используете? Некоторые платы используют последовательные интерфейсы U1UXD (serial2) для доступа к флэш-памяти SPI.
Нет проблем, спасибо за ваш ответ. В любом случае, мой esp32 — это плата для разработки ESP32 devkit v1. Подробности по этой ссылке: lastminuteengineers.com/esp32-pinout-reference
РЕШЕНО, рычаг переключения слишком сильно мешал сигналу, видно на осциллографе, я использовал резистивный делитель и все работает отлично, все равно спасибо!
readStrings
ждет секунду для следующего символа (включая первый и тот, что за последним). добавитьif (Serial2.available()) {