[Conseil] Faire communiquer deux cartes Arduino Ethernet à travers un réseau UDP

Bonjour à tous ,

J'ai créé ce thread parce que je n'ai rien trouvé à ce sujet sur google en 8h de recherche s. Je fais un projet en terminale STI2D SIN qui consiste à configurer un bras Dagu afin qu'il reproduise en temps réel les mouvements d'un gant munis d'un gyroscope et d'un capteur de flexion.

Mon travail dans ce projet consiste à faire communiquer deux cartes Ethernet Arduino à travers un réseau.

La première carte devra recevoir les données des capteurs du gant et les renvoyées , à travers un switch , à l'autre carte qui devra envoyée ces données au bras robotisé.

J'ai déjà réussi à faire communiquer un PC et une carte Ethernet sur un réseau mais je ne vois pas comment faire communiquer les deux cartes ( seulement elles ) à travers le réseau. Un peu d'aide de votre part serait vraiment merveilleux.

Merci d'avance ! :cold_sweat:

Kindabad

8 secondes de recherche : Ethernet

1 serveur pour écouter et donc recevoir et répondre 1 client pour émettre et recevoir une réponse

Justement j'ai déjà essayer dans les exemples. ^^ Seulement je n'ai pas trouver ce qu'il fallait réellement. Le programme est-il : UDPSendReceiveString ?

Première question, pourquoi UDP spécifiquement ? Pourquoi pas du TCP qui me semble également convenir pour faire communiquer tes 2 périphériques et qui sera plus simple à mettre en œuvre ?

C'est mon professeur qui m'a conseillé de fonctionner en UDP , il m'a justement dis , contrairement à toi , que ce serait plus simple... x)

Mais bon , si tu me dis qu'en TCP cela serait plus simple à mettre en oeuvre je suis preneur.

A mon avis, tu vas plus galérer en UDP... Regardes plutôt du coté TCP. Donc 1 server pour celui qui reçoit et un client pour celui qui émet.

Regarde les exemples et la description des méthodes de chaque classe. Ensuite écris ton algo et viens poster ton code si ça ne fonctionne pas.

Le problème est que je ne sais par où commencé.

En gros : J'ai deux PC en local accessible au lycée où je fais mes essais ainsi qu'une carte raccordée sur chacun de ces PC ainsi qu'à un switch central.

Dois-je faire un algorithme pour chacune des cartes sur chacun des PC ?

Une que je dois mettre en mode serveur et l'autre en mode client ?

J'attends ta réponse avant de faire quoi que ce soit pour être sûr que je ne fasse rien dans le vide. ;)

Je ne vais plus avoir accès à la salle avant vendredi à cause du bac blanc cette semaine.

Etant donné que je ne peux tester chez moi je vais analyser chaque fonction durant ce temps et te donner l'algorithme vendredi en fin de matinée.

En tout cas merci beaucoup pour ton aide. :)

Chacune des cartes va remplir une fonction différente donc oui, il te faut un code pour chaque carte.

Comme déjà dit plus haut, une en serveur (coté bras dagu) et une en client (coté gant)

N'attends pas que nous te donnions le code tout fait, expérimente, tu apprendras beaucoup plus de tes erreurs que de n'importe quel bout de code que l'on pourrait te donner.

Je suis tombé sur ça pour m’aider à comprendre : Référence Arduino français Main/Librairie Ethernet

J’ai essayer l’exemple de ChatServer mais il ne fonctionne pas…

Pourtant il devrait...

Et bien non ça ne fonctionne pas... La carte Arduino ne renvoie aucune réponse au logiciel. Par contre elle reçoit bien les données que j'envoie via le logiciel ( A chaque entrée de texte dans le moniteur série , une des led orange s'éclaire plus ou moins longtemps selon la longueur du texte ) ... je suis perdu.

  1. Une fois le sketch téléversé sur la carte, qu'as-tu dans le terminal de l'IDE arduino ?

  2. Comment te connectes-tu à ton serveur de chat ? via telnet ?

Voilà mon code sur Arduino ( J’ai pris l’exemple de chat en remplaçant l’adresse MAC et IP ainsi qu’enlevé le gateway et le masque , ce qui est inutile sur un réseau local je pense ) :

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {
 0x90, 0xA2, 0xDA, 0x0E, 0xD4, 0x03 };
IPAddress ip(192,168,0, 50);
EthernetServer server(23);
boolean alreadyConnected = false;
void setup() {
 Ethernet.begin(mac, ip);
 server.begin();
 Serial.begin(9600);
  while (!Serial) {
   ;
 }
 Serial.print("Chat server address:");
 Serial.println(Ethernet.localIP());
}
void loop() {
 EthernetClient client = server.available();
 if (client) {
   if (!alreadyConnected) {
     client.flush();    
     Serial.println("We have a new client");
     client.println("Hello, client!");
     alreadyConnected = true;
   }
   if (client.available() > 0) {
   
     char thisChar = client.read();
     
     server.write(thisChar);
     Serial.write(thisChar);
   }
 }
}

Dans le terminal est affiché : Chat server adress: 192.168.0.50

Merci de faire un effort pour respecter la charte du forum (et d’aller la lire d’ailleurs).

Lorsque tu veux poster du code, il faut le mettre entre les balises (remplacer <> par )

Le code du serveur de chat que tu utilises correspond à l’exemple de la librairie Ethernet officielle. Tu crois vraiment que ce code n’a pas été vérifié et utilisé des milliers de fois ?

Donc j’insiste, le code du serveur de chat devrait fonctionner, si ce n’est pas le cas, ce n’est pas du coté du code qu’il faut chercher, mais de ce que tu ne fais pas bien.

A mon avis :

  1. Tu ne comprends pas ce que fait le code
  2. Tu n’as pas lu/compris les explications fournies avec le code

Fait. :)

Merci d'éviter si possible ... de me prendre pour un demeuré. ^^

Si j'en suis arrivé à cette étape c'est que je comprends un minimum le code lié à l'exemple.

Kindabad: Merci d'éviter si possible ... de me prendre pour un demeuré. ^^

Si j'en suis arrivé à cette étape c'est que je comprends un minimum le code lié à l'exemple.

Tu mets toutes les chances de ton coté pour que l'on t'aide avec ce genre de réponse...

Donc merci de répondre à ma question sur la façon dont tu te connectes à ton serveur de chat.

C'est de ma faute autant pour moi le code est fonctionnel , c'est sur que marquer "tenet 192.168.0.50" ne m'aidait pas beaucoup... -_-

Bref désolé. ^^'

Dois-je me diriger maintenant sur l'exemple de UDPSendReceivingString ?

Il n’est pas non plus utile de passer tout les exemples en revue. Si tu as compris comment fonctionne le serveur de chat, il faut que tu essaies de l’adapter à ton besoin.

Comme proposé plus haut, considère ton serveur de chat comme le serveur qui doit piloter ton bras.

Donc tu sais maintenant te connecter à un serveur et lui envoyer de l’information. Essaies maintenant de piloter ton bras via telnet.

telnet <–> [serveur de chat + bras]

Une fois que ton serveur sera opérationnel (cad que tu arriveras à piloter ton bras par telnet) on s’occupera de la partie client (gant)

Wow , tu veux déjà que je commence à piloter le bras par telnet ? x)

Je t'explique , nous sommes 3 dans le groupes. Je m'occupe de faire communiquer les deux cartes.

Un de mes collègues est chargé de recevoir les données des capteurs sur le gant et me les envoyées sur ma première carte Arduino ( la carte qui servira de client ). Donc il devra faire son code sur ma carte couplé au miens.

Mon autre collègue s'occupe d'envoyer des données aux servomoteurs du bras Dagu , il devra aussi mettre son code couplé au miens sur l'autre carte Arduino ( la carte serveur ).

Le gant n'a pas été encore confectionné , je dois pour le moment essayer de faire communiquer les deux cartes en protocole UDP ou TCP.