› 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
-
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