Go Down

Topic: [RESOLU] Communication entre Arduino Uno et RPi 3 via serial Rx/Tx (Read 246 times) previous topic - next topic

abject

Bonjour,

Je tente de faire communiquer un Arduino Uno R3 et un RPi 3 entre eux en utilisant les GPIO Rx/Tx.

Tout d'abord et parce que j'ai un RPi, j'ai activé le port série sur /dev/serial0. J'ai vérifié via une loopback que les ports Rx/Tx (BCM 14 et BCM 15) fonctionnent correctement. Pour cela j'ai câblé les deux ports l'un sur l'autre et j'ai utilisé minicom pour tester que tout fonctionne (via la commande suivante) :
minicom -b 9600 -o -D /dev/serial0

Lorsque je tape des caractères dans minicom j'ai bien ceux-ci qui s'affichent => Donc pour moi le port Rx reçoit bien ce qui est envoyé par Tx sur le RPi via le port /dev/serial0.

J'ai fait le même le test avec le Arduino en câblant les ports Rx/Tx entre eux. J'ai fait un reset de l'Arduino en branchant le GND sur le port RESET. J'ai ensuite branché l'Arduino à mon PC via un câble USB. J'ai ensuite ouvert l'IDE Arduino (sur une page vide), et j'ai ouvert "Serial Monitor". Tout ce que j'envoie est bien affiché du coup le port Tx renvoie bien tout ce qui est reçu par Rx.

À partir de là je pense que l'Arduino et le RPi sont fonctionnels et devrait pouvoir communiquer entre eux.




Voici comment j'ai fait pour tenter d'envoyer des données via Rx/Tx entre le RPi et l'Arduino.

J'ai écris un programme pour l'Arduino qui lit un caractère sur le port série et écrit le caractère reçu et son byte code. Il fait aussi clignoter la LED de l'Arduino à chaque réception. Voilà le code en question :
Code: [Select]
byte number = 0;

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
}

void blinkOnboardLED() {
  digitalWrite(LED_BUILTIN, LOW);
  delay(100);
  digitalWrite(LED_BUILTIN, HIGH);
  delay(100);
  digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
  if (Serial.available()) {
    number = Serial.read();
    Serial.print("character received: '");
    Serial.print(char(number));
    Serial.print("' -> ");
    Serial.println(number, DEC);
    blinkOnboardLED();
  }
}


Ensuite j'ai fait dans l'ordre :
  • J'ai câblé les deux ports GND de l'Arduino et du RPi ensembles.
  • Ensuite j'ai câblé le Rx de l'Arduino sur le Tx du RPi.
  • Et pour finir j'ai connecté le Tx de l'Arduino via un pont diviseur de tension au RPi afin de passer de 5V à 3.3V. Un schéma et une photo du câblage sont attachés au post.


Maintenant j'allume le RPi via une alimentation externe et je me connecte au RPi en SSH via ethernet.
J'alimente l'Arduino via une alimentation externe.
L'Arduino démarre et éteint la LDE de la carte (normal jusque là).

Depuis le RPi, je lance minicom comme précédemment afin d'envoyer des caractères à l'Arduino depuis le RPi.

Et là la LED de l'Arduino se met à clignoter à chaque caractère envoyé mais je n'ai rien dans minicom et les LED Rx/Tx de l'Arduino ne clignotent jamais.

Je tourne en rond depuis un bon moment à ce sujet et j'avais par le passé réussit à faire ce genre de manipulation mais impossible de refaire fonctionner ça avec le même matériel et le même code !

Je passe peut-être à côté de quelque chose évident...



fdufnews

Rapidement, comme ça j'ai l'impression que tout est bon.
A vérifier quand même:
  • s'il n'y a as un mauvais contact entre les fils ou les résistances et la plaque d'essai.
  • la configuration de minicom, baudrate, controle de flux,...

abject

@fdufnews : Merci beaucoup j'ai repris ça à tête reposée et fait des tests sur tous les éléments et j'ai trouvé qu'une des deux résistances n'étaient pas la bonne (220 ohms au lieux de 2k omhs). Une fois remplacée la communication fonctionne parfaitement !

fdufnews


Go Up