Tuto transfert UDP entre WES et Arduino via Ethernet

Forums Serveur WES Installation & Configuration Tuto transfert UDP entre WES et Arduino via Ethernet

  • Post
    Mairot
    Participant

      Bonjour.

      Je cherche un tuto ou exemple pour transférer en UDP les valeurs des sondes de températures du WES vers un Arduino équipé d’un shield Ethernet W5100.

      Sur le forum j’ai bien trouver un exemple qui semble incomplet car cela ne fonctionne pas correctement.

      Salutations

      0
      0
    Vous lisez 14 fils de discussion
    • Replies
        Mairot
        Participant

          Bonjour.

          Après un débugage, j’ai réussi a faire fonctionner le transfert des valeurs de sondes de températures:

          Correction sur des erreurs de syntaxe et compléter l’exemple que j’avais trouvé sur le Forum.

          Je pense pouvoir faire la même chose avec les compteurs, pinces , etc.

          Salutations

          0
          0
          nicolas_cartelec
          Maître des clés

            Bonjour,

            Si vous avez un exemple cela peut aider d’autres utilisateurs.

            Merci

            0
            0
            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
              nicolas_cartelec
              Maître des clés

                Merci !

                0
                0
                Mairot
                Participant

                  Bonjour.

                  Mise ajour Programme Arduino :

                  Attachments:
                  You must be logged in to view attached files.
                  0
                  0
                  chris24130
                  Participant

                    Bonjour,

                    Désolé je déterre un peu le sujet mais je cherche à récupérer une information depuis un arduino et je vois que le sujet a déjà commencé a être un peu traité ici.

                    Je voudrai pouvoir récupérer la puissance apparente de mon compteur EDF et j’ai beau essayer impossible (je débute en arduino et malgré mes efforts je n’ai même pas réussi à faire fonctionner ce sketch, les valeurs indiquent « ??? »)

                    Pouvez-vous m’aider?

                    Merci d’avance

                    0
                    0
                    cdlog2
                    Modérateur

                      Bonjour,

                      Ce n’est pas vraiment compliqué, mais il faudrait nous dire ce que vous souhaitez faire de la valeur reçue ?

                      Beaucoup utilisent des Arduino et doivent ajouter un Shield en complément pour faire de la communication réseau (RJ45 ou WIFI) ce qui est assez coûteux.

                      Mais sachez que l’utilisation d’un ESP8266 sous la forme d’un NodeMCU V2  type  ESP8266 ESP-12E ou ESP8266 ESP-12F fait souvent et mieux l’affaire si vous n’utilisez pas plus de 8 GPIO en Input et Output (RX& TX compris) et 1 input Analogique et pour un prix 2 fois moins cher en comparaison à l’Arduino+Sheild.

                      Un Arduino fonctionne en 16mhz, un ESP8266 lui fonctionne en 80mhz et peut être Boosté en 160mhz sans problème. Mais c’est surtout dans sa capacité mémoire que vous allez très largement gagner (32k mémoire flash pour un Arduino, mais 4Mo mémoire flash pour un NodeMCU)  et aussi le fait que vous avez une transmission WIFI intégrée dans la Pûce, donc pas d’ajout de Shield !!!.

                      De la même famille, vous avez aussi le ESP32 qui vous apporte plus de GPIO utilisable et une communication Bluetooth en plus. Mais ce circuit coûte plus cher et est plus compliqué à programmer.

                      Néanmoins, que ce soit un Arduino, un ESP8266 ou un ESP32, tous ces Micros Contrôleurs peuvent être programmés très facilement via le IDE ARDUINO. Bon nombres de Sketch Basics sont transposable entre ces Contrôleurs.

                      Je peux vous fournir la base d’un Sketch à programmer sur un NodeMCU qui vous permet de transmettre des requêtes CGX vers le WES via le WIFI et traiter les Datas reçus, bien sûr le traitement dépend des Datas reçus et de votre Usage.

                      Cdt

                       

                       

                      0
                      0
                      chris24130
                      Participant

                        Merci pour la reponse rapide.
                        Mon idée est de récupérer la valeur de la puissance apparente de mon compteur EDF et celle de mon installation photovoltaïque pour l’afficher sur une matrice led.
                        L’idée du esp8266 est interressante, est ce qu’un wemos mini d1 pourrai faire l’affaire car je dois le recevoir d’ici peu. Par contre je suis pas sûre d’avoir assez d’entrée avec, car la matrice en occupe 9.Si j’ai bien suivi on envoi une requête UDP avec les codes appropriés (« gT100 » pour la puissance apparente du TIC 1)  et l’on récupére la réponse toujours en UDP.

                        Encore merci beaucoup pour l’aide.

                        • Cette réponse a été modifiée le il y a 5 années et 4 mois par chris24130.
                        0
                        0
                        cdlog2
                        Modérateur

                          Oui un Wemos mini d1 peut normalement faire l’affaire. Il est reconnu comme carte programmable par le IDE Arduino. Vous ne disposez toutefois que de 8 GPIO Digitaux (I/O) et un Input Analogique comme un NodeMCU. Par contre vous avez le WIFI, 4Mo de Mémoire Flash et vous pouvez aussi le Booster en 160Mhz.

                          Je préfère faire des requêtes HTTP au lieu de l’UDP car le protocole est plus sécurisé et plus simple en utilisation, d’autant que l’on peut gérer plus d’informations en réception en 1 seul envoie (au lieu de 2 en UDP) et traiter les réponses du WES sous forme CGX ou JSON.

                          Pour récupérer les informations d’un TIC du WES, vous pouvez soit personnaliser un fichier CGX avec vos critères demandés ou utiliser le CGX de base du WES et recevoir toutes les Infos des TIC.

                          La requête HTTP pour recevoir les infos TICs du WES en global est sous cette forme : http://loginWes:motPasseWes@Ip-WES/TICVAL.cgx

                          Exemple à personnaliser et à envoyer depuis votre navigateur : http://admin:123456@192.168.xx.xx/TICVAL.CGX. Vous recevrez en retour toutes les infos des TIC sous forme CGX

                          Si cela vous intéresse, je peux vous fournir une base, un Sketch à personnaliser de votre côté concernant la gestions des infos reçus.

                           

                          0
                          0
                          cdlog2
                          Modérateur

                            Désolé Correction ; l’URL des CGX dans la dernière version du WES est  /WEBPROG/CGX/

                            Donc votre requête doit être : http://admin:123456@192.168.xx.xx/WEBPROG/CGX/TICVAL.CGX, à personnaliser bien sur concernant votre login, mot de passe et IP du WES

                            0
                            0
                            chris24130
                            Participant

                              Si cela ne vous prends pas trop de temps je veux bien  voir à quoi ressemble le sketch. J’ai essayé en http mais je n’arrivais pas à récupérer l’info. J’avais créer un data2.cgx avec uniquement <PAP>450</PAP>.

                              Je me suis aide de ce site https://eskimon.fr/tuto-arduino-802-arduino-et-ethernet-client

                              Merci

                               

                              0
                              0
                              cdlog2
                              Modérateur

                                Bonjour,

                                Je vous joint une archive qui contient un sketch fonctionnel, programmable via le IDE ARDUINO et compatible uniquement avec des puces ESP8266.

                                Ce sketch est une base pour la gestion de requêtes HTTP type CGX en lien avec le WES.

                                J’ai implémenté deux exemples de récupération de données : On récupère la puissance apparente du TIC1 et le I Instantané du même TIC1. En vous basant sur ces deux exemples, vous pourrez facilement implémenter vos propres requêtes.

                                Un point concernant la récupération de la Puissance Apparente. Le WES gère ces valeurs P.A pour les 3 Compteurs TIC sur une même ligne, sous forme de Array, Chaque valeur spécifique aux TIC est séparé par des virgules. Donc la récupération de ces valeurs est un peu plus compliqué que la plus par des autres rubriques. La gestion de I Instantané est plus simple et vous montre comment gérer la plus par des champs d’un CGX composés d’un <ID> suivi d’une <VALUE>

                                Vous devrez personnaliser votre connexion WIFI et l’Adr HTTP de votre WES. Cela ce fait depuis ces globales :

                                // Personnaliser votre connexion WIFI
                                const char* ssid     = « SSID WIFI ICI« ;                   // SSID WIFI de la BOX ou Router Wifi
                                const char* password = « CLE WIFI ICI« ;               // Cle WIFI de la BOX ou Routeur WIfi

                                // Adresse http du WES, personnaliser votre login, mot passe et IP WES  format: http://<login&gt;:<motpasse>@<Ip Wes>
                                const char* cHost = « http://admin:1234@192.168.0.116« ;    // Adresse http du WES

                                Si vous rencontrez des problèmes, faite le moi savoir. Vous pouvez me joindre aussi par mail, lisible en haut du texte.

                                 

                                Attachments:
                                You must be logged in to view attached files.
                                0
                                0
                                cdlog2
                                Modérateur

                                  Je vous joint une nouvelle archive contenant un Sketch plus poussé que mon précédent.

                                  Comme le précédent Sketch, celui ci  donne en 1er exemple la récupération de Valeur du WES par l’envoie de requêtes WES via des fichiers spécifiques CGX et en complément je propose un 2eme exemple d »envoie et  traitement des valeurs du WES via le fichier DATA.CGX.

                                  La gestion de requête via DATA.CGX est plus simple car il n’y a pas de recherche de nom de <ID> pour récupérer une <Value> comme dans un CGX lambda, On récupère directement une valeur contenue entre deux TAG spécifiques.

                                  Si via le DATA.CGX il vous manque une info qui n’est pas traitée, alors peut être que via un fichier CGX spécifique vous pourrez la récupérer si traitée.

                                   

                                  Attachments:
                                  You must be logged in to view attached files.
                                  0
                                  0
                                  chris24130
                                  Participant

                                    Des réceptions de mon esp je test tout ca. Je vous tiendrai au courant. Il faut que j analyse un peu les deux programmes car ça a l’air peut être simple pour vous mais pour un débutant comme moi ça l est beaucoup moins.

                                    Encore Merci pour votre aide.

                                    0
                                    0
                                    cdlog2
                                    Modérateur

                                      Ok pas de problème. Si vous avez des questions, n’hésitez pas à me contacter par mail (visible en haut du ino ) , cela sera plus simple pour communiquer.

                                      De même si vous avez des difficultés avec le IDE Arduino, problème de librairie etc .. je peux vous guider, n’hésitez pas.

                                      Le 2eme sketch que j’ai envoyé, reprend une bonne part des fonctions du 1er. Donc travailler plus tôt sur le 2eme Sketch qui englobe les 2 méthodes d’envoi de requêtes, soit par des fichiers CGX spécifiques ou par le travers du Data.cgx qui regroupe la plus part des datas les plus usuels.  Vous pouvez donc effacer le 1er sketch.

                                      J’ai fait exprès de dissocier la récupération des divers valeurs des TIC par  des fonctions spécifiques, mais globalement on peut tout regrouper pour alléger le programme. La gestions et récupération des Datas via le fichier Data.cgx est plus rapide et plus simple à gérer.

                                      Avec une seule requête Data.cgx envoyé au WES, vous pouvez ensuite travailler localement sur le même tampon reçu du WES afin de lire et traiter l’ensemble des Datas présents. Un mise en boucle du process, soit environs toutes les secondes, permet une MAJ périodiques des valeurs.

                                      Cdt

                                      0
                                      0
                                  Vous lisez 14 fils de discussion
                                  • Vous devez être connecté pour répondre à ce sujet.