Ping cameras IP et Communication entre deux Arduino par Ethernet avec Shield w5500

bonjour
je cherche à faire communiquer 2 Arduino (uno R3) avec Shield Ethernet (w5500) relier par un câble Ethernet.
une des deux Arduino pinguera des cameras puis enverra les informations à l'autre Arduino.
Le problème rencontrer est un problème de bibliothèque je pense si vous pouvez m'envoyer un duo de bibliothèque se mariant pour le projet ca m'intéresserai pour la suite de mon projet.
Je cherche actuellement depuis plusieurs jour avec les bibliothèques :
-Ethernet2
-ICMPPing

Salut
La librairie Ethernet comporte un exemple :

L'adresse IP est fixée dans le sketch mais on peut travailler aussi en DHCP comme ici :

Les adresses des différents interlocuteurs pourront ainsi être fixées sur la box, ce qui simplifie la gestion.

je vais regarder ceci merci

je n'ai pas cette librairie ou peut-on se la procurer ?

Ce fichier fait partie de la librairie Ethernet, que l'on peut installer à l'aide de gestionnaire de librairies de l'IDE ou ici.

j'ai compris c'est due au fait que j'utilise Ethernet2 donc moi ca s'appelle Ethernet2Udp.h

et j'ai une question je renvoie les info par le port par lequel je reçoit des informations ou je dois changer de port et si je peux faire les deux lequel serait mieux.

En général on utilise le même port.

d'accord

malgré les recherches mené durant toute cette journée je n'obtient pas de résultats
si quelqu'un d'autre que moi peut m'expliquer les exemples ou m'en faire un plus simple ou je me replongerais dedans ensuite je sais qu'il faut deux programmes pour communiquer entre eux la avec l'exemple udp il n'y avait pas de maitres je ne sais pas s'il fallait en mettre un moi j'ai tester sans demain je reteste et cette fois ci avec.

Dans l'exemple UDPSendReceiveString :

  • lignes 71 + suivantes : l'exemple reçoit une requête. C'est donc un esclave (serveur)
  • ligne 91 à 94 : l'exemple envoie une réponse à la requête

Je ne vois pas ce qui manque.

A noter : la librairie Ethernet2 est obsolète :

This library is no longer going to be used, since the official Arduino library has been updated and works great GitHub - arduino-libraries/Ethernet: Ethernet Library for Arduino

plutôt que de parler de maître et d'esclave, je préfère parler de client et de serveur, avec cette convention:

  • le client est celui qui initie le dialogue (qui prononce la 1ère phrase)
  • le serveur, lui, attend les requêtes de ses clients. Quand il reçoit une requête, il répond (ou pas) à son client, et se remet en attente de requête.

d'accord merci pour les precisions

le mieux serait de retourner en Ethernet?
Mais pour le ping dans le code j'utilise ICMPPing et ca fonctionne en partie.
Je peux ping les pc et camera mais je ne peux pas ping un Arduino avec un Arduino.
est ce que c'est normal sachant que bien sur j'avais donner une adresse au deux Arduino et mon câble fonctionne dans les deux sens?
Pour utiliser ICMPPing il faut utiliser Ethernet2 ensuite si vous avez une autre librairie à conseiller pour ping qui fonctionne avec Ethernet je suis preneur.
j'ai galérer à trouver une librairie pour ping.

oui je les ai vue est employer mais ca n'a quand même pas fonctionner.
j'ai trouvé une doc qui expliquait toutes les fonctions qu'on pouvait utiliser avec une explication.
Je les lie actuellement.

pour faire un point j'ai :
-un Shield Ethernet w5500 avec une carte Arduino uno R3
-les bibliothèque :
Ethernet2
ICMPPing adapter à la librairie Ethernet2
je peux évidemment les remplacer et recommencer
Je cherche a ping des cameras...
Et communiquer par Ethernet entre les cartes.

pour ping j'ai trouver il suffit d'utiliser icmpping et ethernet2 et pour mon projet je n'ai plus besoin de communiquer entre deux Arduino.

#include <SPI.h>
#include <SD.h>
#include <Ethernet2.h>
#include <ICMPPing.h>

File myFile;
// nom du fichier
String filename = "texte";
byte mac[] = {0xA8, 0x61, 0x0A, 0xAE, 0xAB, 0x68}; // max address for ethernet shield
byte ip[] = {192,168,1,140}; // ip address for ethernet shield
// variable du programme pour boucle for
byte b=0, i;
// nombre d'adresses
byte nb;
// variable pour lire le fichier
String buffer;

// declaration pour ping
SOCKET pingSocket = 0;
ICMPPing ping(pingSocket, (uint16_t)random(0, 255));

void setup() 
{
  // start Ethernet
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  // declaration de serial pour les commentaires
  while (!Serial) {}
  Serial.print("Initializing SD card...");
  // carte sd detescter
  if (!SD.begin(4)) 
  {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
}

void loop()
{
  //ouverture du fichier
  myFile = SD.open(filename + ".txt");
  if (myFile) 
  {
    // preparation a la lecture
    Serial.println("Read " + filename + ".txt line by line:");
    // si on peut lire le fichier
    if (myFile.available()) 
    { 
      // recuperation du nom du site
      buffer = myFile.readStringUntil(';');
      String site = buffer;
      // recupération de l'adresse mail
      buffer = myFile.readStringUntil(';');
      String mail = buffer;
      // recuperation du nombre d'adresse
      buffer = myFile.readStringUntil(';');
      nb = buffer.toInt();
      // création d'un tableau pour toutes les adresses
      byte addr[nb] [4];
      Serial.println("remplissage du tableau");
      // cette boucle pour remplir les lignes du tableau
      for(i=0;b<nb;i++)
      {
        // cette boucle permet de passer d'une ligne à l'autre
        if(i==3)
        {
          String buffer = myFile.readStringUntil(';');
          addr[b][3]= buffer.toInt();
          i=0;
          b++;
        }
        String buffer = myFile.readStringUntil('.');
        addr[b][i]= buffer.toInt();
      }
      // variable d'erreur
      byte erreur[nb];
      // initialisation de toutes les erreurs à 0
      for (b=0;b<nb;b++)
      {
        erreur[b]=0;
      }
      // declaration de la variable du status
      byte antenne[nb];
      // boucle infini de ping
      while(1)
      {
        Serial.println("ping");
        // ping des adresses ip
        for(b=0;b<nb;b++)
        {
          ICMPEchoReply echoReply = ping(addr[b], 4);
          antenne[b]=echoReply.status;
        }
        // cette boucle permet de passer d'une réponse à l'autre
        for (b=0;b<nb;b++)
        {
          // le ping a reussit ou non
          if (antenne[b]==0)
          {
            Serial.println("test reussi");
            // etat de l'erreur
            erreur[b]=0;
          }
          else
          {
            Serial.println("test raté");
            // boucle permetant de savoir si l'envoie de mail a eu lieu
            if(erreur[b]==0)
            {
              Serial.println("envoie mail");
              erreur[b]=1;
            }
            else
            {
              Serial.println("n'envoie pas de mail");
            }
          }
        }
        // attente de 10 minutes
        delay (10000);
      }
    }
    // fermeture du fichier
    myFile.close();
  } 
  else 
  {
    Serial.println("error opening " + filename + ".txt");
    while(1){}
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.