Bonsoir,
Je remonte le sujet car ces derniers temps, je nai pas eu le temps de m'en occuper. Je viens de me replonger dessus et j'ai suivi les recommandation de fdufnews. J'ai simplifié les codes.
Eméteur:
#include <SPI.h>
#include <SD.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
//Ethernet
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE}; // L'adresse MAC du shield
IPAddress ip(192, 168, 1, 177); // L'adresse IP que prendra le shield
IPAddress my_dns( 192, 168, 1, 254 );
IPAddress gateway( 192, 168, 1, 254 );
IPAddress subnet( 255, 255, 255, 0 );
EthernetServer serverEthernet(80); // Initialise notre serveur il écoutera sur le port 80
byte sd; // Retour d'erreur SD 0= pas de carte 1=carte ok 9=carte pleine
// Instance EthernetUDP pour nous envoyer et recevoir des paquets
EthernetUDP Udp; // Nom du serveur UDP
unsigned int localPort = 8888; // local port to listen on
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // buffer to hold incoming packet,
char ReplyBuffer[] = "01020304\tABC\t"; // a string to send back
char c [40];
char d [40];
int compteur = 0;
boolean attente = false;
//-----------------------------------------------------------------
void setup() {
Serial.begin(9600);
SD.begin(4);
Serial.println("...");
// start the Ethernet and UDP:
//Ethernet.begin(mac, ip);
Ethernet.begin(mac, ip, my_dns, gateway, subnet);
Udp.begin(localPort);
Serial.println("Pret!");
}
//-----------------------------------------------------------------
void loop() {
// envoie une réponse au port et adresse qui l'a envoyé
byte adr[] = {0xC0, 0xA8, 0x1, 0xB2}; //192.168.1.177
unsigned int port = 8888;
Udp.beginPacket(adr , port);
Udp.write(ReplyBuffer);
Udp.endPacket();
Serial.println(ReplyBuffer);
delay(1000);
}
//-----------------------------------------------------------------
Récepteur:
#include <SPI.h>
#include <SD.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
//Ethernet
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEB}; // L'adresse MAC du shield
IPAddress ip(192, 168, 1, 178); // L'adresse IP que prendra le shield
IPAddress my_dns( 192, 168, 1, 254 );
IPAddress gateway( 192, 168, 1, 254 );
IPAddress subnet( 255, 255, 255, 0 );
EthernetServer serverEthernet(80); // Initialise notre serveur il écoutera sur le port 80
byte sd; // Retour d'erreur SD 0= pas de carte 1=carte ok 9=carte pleine
// Instance EthernetUDP pour nous envoyer et recevoir des paquets
EthernetUDP Udp; // Nom du serveur UDP
unsigned int localPort = 8888; // local port to listen on
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // buffer to hold incoming packet,
char ReplyBuffer[] = "acknowledged"; // a string to send back
//-----------------------------------------------------------------
void setup()
{
Serial.begin(9600);
SD.begin(4);
Serial.println("...");
// start the Ethernet and UDP:
//Ethernet.begin(mac, ip);
Ethernet.begin(mac, ip, my_dns, gateway, subnet);
Udp.begin(localPort);
Serial.println("Pret!");
}
//-----------------------------------------------------------------
void loop()
{
//si des données sont disponibles, lire le paquet
int packetSize = Udp.parsePacket();
if (packetSize)
{
Serial.print("Received packet of size ");
Serial.println(packetSize);
Serial.print("From ");
IPAddress remote = Udp.remoteIP();
for (int i = 0; i < 4; i++)
{
Serial.print(remote[i], DEC);
if (i < 3)
{
Serial.print(".");
}
}
Serial.print(", port ");
Serial.println(Udp.remotePort());
//lit les données dans le tableau de réception
Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
Serial.println("Contents:");
Serial.println(packetBuffer);
}
delay(10);
}
//-----------------------------------------------------------------
Maintenant, il semble y avoir un dialogue, mais c'est aléatoire. Il peu démarrer après 2, 5, x tentative, puis une fois établi, les messages passent bien. Parfois la connexion ne démarre pas.