› Forums › Serveur WES › Installation & Configuration › Tuto transfert UDP entre WES et Arduino via Ethernet
- Ce sujet contient 15 réponses, 4 participants et a été mis à jour pour la dernière fois par
cdlog2, le il y a 5 années et 4 mois.
- Post
-
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
00
- Replies
-
-
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
00 -
Bonjour,
Si vous avez un exemple cela peut aider d’autres utilisateurs.
Merci
00 -
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 UDPvoid 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’iciSerial.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();
}00 -
Merci !
00 -
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
00 -
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
00 -
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.
00 -
Cette réponse a été modifiée le il y a 5 années et 4 mois par
-
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.
00 -
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
00 -
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
00 -
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>:<motpasse>@<Ip Wes>
const char* cHost = « http://admin:1234@192.168.0.116« ; // Adresse http du WESSi 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.00 -
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.00 -
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.
00 -
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
00
-
- Vous devez être connecté pour répondre à ce sujet.