Проблема с последовательной связью между Arduino Mega2560 и ESP32

Доброе утро всем. Я пытаюсь установить последовательную связь между 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 мс, так как если данные получены, но неправильно интерпретированы.

Как я мог решить это, по-вашему? Заранее спасибо за ответы!

readStrings ждет секунду для следующего символа (включая первый и тот, что за последним). добавить if (Serial2.available()) {
Juraj 14.01.2023 12:13

Проверка работоспособности здесь: вы подключили землю от arduino к земле ESP32, верно?

Flavius Condurache 14.01.2023 12:15

Да GND в порядке ахах

Cb95 14.01.2023 12:18

@Juraj Хорошо, на самом деле вход в элемент управления if больше ничего не печатает

Cb95 14.01.2023 12:19

проверьте проводку. это RX для TX? для короткого теста вы можете попробовать без смещения уровня для более простой проводки.

Juraj 14.01.2023 15:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Обновлено: Можете ли вы попытаться снизить скорость? Проверьте, правильно ли начнет декодирование с более низким значением.

Ваша проблема не в коде, а в железе. Arduino Mega2560 использует логический уровень 5 В, а ESP32 использует 3,3 В. Вам нужно сделать некоторый сдвиг уровня, чтобы иметь возможность общаться.

Вы можете прочитать эту статью, чтобы узнать больше об этом.

Надеюсь, поможет.

Привет, спасибо за ответ, но, как я уже писал в вопросе, я адаптировал сигнал arduino TX к 3,3 В esp RX с помощью переключателя уровня.

Cb95 14.01.2023 11:58

Омг, я должен быть слепым. Ты прав. Какую плату ESP32 вы используете? Некоторые платы используют последовательные интерфейсы U1UXD (serial2) для доступа к флэш-памяти SPI.

Flavius Condurache 14.01.2023 12:08

Нет проблем, спасибо за ваш ответ. В любом случае, мой esp32 — это плата для разработки ESP32 devkit v1. Подробности по этой ссылке: lastminuteengineers.com/esp32-pinout-reference

Cb95 14.01.2023 12:16

РЕШЕНО, рычаг переключения слишком сильно мешал сигналу, видно на осциллографе, я использовал резистивный делитель и все работает отлично, все равно спасибо!

Другие вопросы по теме