Communication serie (UART) entre Arduino MEGA et ESP 32

Bonsoir.

J'ai écrit un code code permettant de faire une communication serie (UART) entre une carte arduino MEGA 2560 et une carte ESP32 (ESP-WROOM-32).

En gros je souhaite envoyer un message ( Hello Arduino ) de ma carte ESP32 vers ma carte arduino MEGA.
Voici le code de la carte arduino MEGA :

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200);
}

void loop() {
  if (Serial1.available()) {
    String message = Serial1.readString(); // Lire le message envoyé par l'ESP32
    Serial.println(message); // Afficher le message ruçu sur le moniteur série
  }
}

Voici le code de la carte ESP32 :

void setup() {
  Serial.begin(115200);
  Serial2.begin(115200);
}

void loop() {
  Serial2.println("Hello Arduino!");  // Envoyer un message à l'Arduino MEGA
  Serial.println("Hello Arduino!"); // afficher le message envoyé sur le moniteur serie
  delay(1000);
}

lorsque je téléverse les différents codes dans chaque carte, le moniteur série de l'ESP32 m'affiche le message Hello Arduino.

Mais le moniteur de la carte arduino MEGA n'affiche rien au début et après environ 1 minute il affiche des carreaux.

J'ai réglé les vitesses des 2 moniteurs serie à 115200 baud.

Pour le câblage j'ai fait :

Rx1 MEGA ======> TX2 ESP32
Tx1 MEGA ======> RX2 ESP32
GND MEGA ======> GND ESP32

Svp quelqu'un peut-il m'aider ?

Bonsoir fullproject

L'ESP32 est en 3.3V et l'Arduino en 5V.
Il te faut un level converter.

Cordialement
jpbbricole

Bonsoir fullproject

Comme tu envoies ton message,

avec println,

tu peux lire le message avec readStringUntil('\n'), puis tu nettoies le messager reçu avec message.trim().

Cordialement
jpbbricole

Merci @jpbbricole .

En utilisant readStringUntil('\n') j'ai pu récupérer le message envoyé depuis l'autre carte.

Merci encore.

J'ai fait le montage sans utiliser de level converter et tout semble bien fonctionner. Cependant la carte ESP32 a commencé à chauffer au bout d'un momment ( lorsqu'elle était connecté à lA carte arduino MEGA)

Mais pour plus de sécurité je vais acheter un level converter.

Bonjour,

Il suffit d'un diviseur de tension à résistances sur le TX de la carte Mega.

Bonjour kamill

Dans le cas de la transmission du message, c'est l'autre sens qui est concerné, ESP32 > MEGA donc passage de 3.3V à 5V.
La présence d'un level converter permettra d'abaisser le sens MEGA > ESP32.

Cordialement
jpbbricole

Je n'ai rien compris à ta remarque.
Le problème est de ne pas envoyer du 5V sur une entrée 3.3V de l'esp32.
Dans l'autre sens on envoie du 3.3V sur une entrée 5V, ce qui est au dessus du niveau haut de la logique CMOS, donc pas de problème.

Bonjour kamill

Oui, bien sûre, mais du fait de la remarque de @fullproject

J'ai pensé que pour une raison ou pour une autre, on était "limite" d'où ma proposition de level converter.

Cordialement
jpbbricole