Répondre à : Tuto transfert UDP entre WES et Arduino via Ethernet

Forums Serveur WES Installation & Configuration Tuto transfert UDP entre WES et Arduino via Ethernet Répondre à : Tuto transfert UDP entre WES et Arduino via Ethernet

    Mairot
    Participant

      Bonjour.

      Cela sera fait , dés que mon projet seras plus avancé : en cours d’optimisations :

      Je fournit un exemple qui envois sur le moniteur Série de l’ IDE Arduino Les valeurs des sondes de température, pour ceux qui ne peuvent attendre :
      // **** uino ETH Atelioer ****
      // Carte NANO V3.0 : Afficheur 4*20 I2C Shield ETH W5100

      // Températures transmises par WES : Reseau Ethernet
      //
      // **** Bernard Mairot 3018 ****

      #include <Ethernet.h>

      #include <EthernetUdp.h>
      #include <SPI.h>

      // Declarations Variables et constantes :

      bool RW = false; // Drapeau FlipFlop Envoie/Lecture requête UDP
      int numTemp = 0; // Numéro de la sonde courante à lire (init à zero pour démarrer la Lect)
      IPAddress WesServer(192, 168, xxx, xxx); // Adresse IP du WES
      uint16_t UDPPort = 1000; // ex : numéro de Port UDP déclaré dans le M2M du WES
      const int PACKET_SIZE = 20; // Taille buffer de réponse UDP
      char packetBuffer[ PACKET_SIZE]; // buffer reception réquete UDP
      EthernetUDP Udp; // Instance UDP

      void setup()
      {
      byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
      IPAddress ip(192, 168, 1, 42); // ip du shield Ethernet
      Ethernet.begin(mac,ip); // initialisation du Shield Ethernet
      Serial.begin(9600);
      // On suppose le Arduino est déjà connecté au LAN via le shield ethernet à partir d’ici

      Serial.println( » \nStarting connection to UDP server… « );
      Udp.begin(UDPPort); // Init de la connection UDP
      delay(1000);

      }

      //////////////

      // Boucle Principale :

      void loop()
      {
      if (!RW)
      { // RW FALSE = envoie une requete UDP au WES
      numTemp += 1; // n° sonde incrémental à lire
      if (numTemp > 31) numTemp = 1; // On lit toutes les sondes entre 1 <> 31
      sendPacket(WesServer, UDPPort, numTemp); // envoie une requete lect sonde (n) UDP au WES
      RW=true;
      delay(100); // tempo envoie
      }
      else if (Udp.parsePacket())
      { // RW TRUE = Verif réeponse requete UDP WES
      Serial.println( » packet UDP reçu « );
      int len = Udp.read(packetBuffer, PACKET_SIZE); // lecture de la réponse UDP
      if (len > 0)
      {
      packetBuffer[len] = 0; // Prepare et affiche la valeur Temp réceptionnée
      String sval = String(packetBuffer);
      Serial.print( » Valeur sonde Temp num  » );
      Serial.print(numTemp);
      Serial.print(  » =  » );
      Serial.println(sval);
      }

      RW=false; // On prépare une nouvelle requête d’envoie UDP
      delay(500);

      }
      }

      // Fin Boucle principale :

      // Routines Fonctions et Sous programes :

      // Demande par envoie d’une requete UDP la valeur d’une sonde (n) au WES
      // arguments : Adresse IP Wes, num UDP port, num Sonde Temp
      void sendPacket(IPAddress& address, uint16_t port, int ntemp)
      {
      // Creation de la requete UDP lecture Sonde Temp = gW0xx (xx = num de la sonde 01 < > 31
      String sTemp = (ntemp < 10) ? String(« gW00 »)+String(ntemp,10) : String(« gW0 »)+String(ntemp,10);

      Udp.beginPacket(address, port); // UDP WES requests IP + Port
      Udp.write(sTemp.c_str(), sTemp.length()); // Envoie la requete UDP ex : gW001 = dme val sonde Temp 1
      Udp.endPacket();
      }

      0
      0