Bonjour,
Voila,
Le montage:
1 Uno avec shield w5100
1 mega avec shield w5100
2 bretelle droite
1 micro switch 5 entrée
je voudrai faire communiquer les 2 cartes en udp. Pour cela, j'ai cherché des exemples (dont celui de la library), mais je ne parviens pas à les faire fonctionner. J'ai donc essayé de faire quelque chose mais sans succès non plus.
#include <SPI.h> // needed for Arduino versions later than 0018
#include <SD.h>
#include <Ethernet.h>
#include <EthernetUdp.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008
//Ethernet
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xDD}; // 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 4200
byte sd; // Retour d'erreur SD 0= pas de carte 1=carte ok 9=carte pleine
// An EthernetUDP instance to let us send and receive packets over UDP
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);
Udp.begin(localPort);
sd = 1;
char erreur = 0;
erreur = Ethernet.begin(mac); // On démarre le shield Ethernet SANS adresse ip (donc donnée via DHCP)
if (erreur == 0) // si une erreur a eu lieu cela signifie que l'attribution DHCP n'est pas active
{
Serial.println("Parametrage avec ip fixe...");
Serial.print("adresse server: ");
Serial.println(ip);
Ethernet.begin(mac, ip, my_dns, gateway, subnet);
}
else
{
Serial.println("Parametrage avec ip dynamique...");
Serial.print("adresse server: ");
Serial.println(Ethernet.localIP());
}
serverEthernet.begin();
delay (2000);
Serial.println("Pret!");
}
//-----------------------------------------------------------------
void loop() {
//si des données sont disponibles, lire le paquet
int packetSize = Udp.parsePacket();
//Serial.print ("packetSize= "); Serial.println(packetSize);
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);
// envoie une réponse au port et adresse qui l'a envoyé
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ReplyBuffer);
Udp.endPacket();
}
delay(10);
}
#include <SPI.h> // needed for Arduino versions later than 0018
#include <SD.h>
#include <Ethernet.h>
#include <EthernetUdp.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008
//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 4200
byte sd; // Retour d'erreur SD 0= pas de carte 1=carte ok 9=carte pleine
// An EthernetUDP instance to let us send and receive packets over UDP
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
char IP [40];
char MESSAGE [40];
int i;
boolean attente = false;
boolean ipFl = false;
boolean messageFl = false;
//-----------------------------------------------------------------
void setup() {
Serial.begin(9600);
SD.begin(4);
Serial.println("...");
// start the Ethernet and UDP:
Ethernet.begin(mac, ip);
Udp.begin(localPort);
sd = 1;
char erreur = 0;
erreur = Ethernet.begin(mac); // On démarre le shield Ethernet SANS adresse ip (donc donnée via DHCP)
if (erreur == 0) // si une erreur a eu lieu cela signifie que l'attribution DHCP n'est pas active
{
Serial.println("Parametrage avec ip fixe...");
Serial.print("adresse server: ");
Serial.println(ip);
Ethernet.begin(mac, ip, my_dns, gateway, subnet);
}
else
{
Serial.println("Parametrage avec ip dynamique...");
Serial.print("adresse server: ");
Serial.println(Ethernet.localIP());
}
serverEthernet.begin();
delay (2000);
Serial.println("Pret!");
}
//-----------------------------------------------------------------
void loop() {
Send();
if (ipFl && messageFl)
{
Serial.print("Transfert message à ");
Serial.println( IP);
// envoie une réponse au port et adresse qui l'a envoyé
Udp.beginPacket(IP, localPort);
Udp.write(MESSAGE, i);
Udp.endPacket();
ipFl = false;
messageFl = false;
}
}
void Send()
{
i = 0;
if (!attente)
{
Serial.println("Entrer IP");
attente = true;
}
while (attente)
{
if (Serial.available())
{
delay(50);
while (Serial.available())
{
IP[i] = Serial.read();
i++;
IP[i] = '\0';
attente = false;
}
Serial.println(IP);
ipFl = true;
}
}
//-----------------------------
i = 0;
if (!attente)
{
Serial.println("Entrer Message");
attente = true;
}
while (attente)
{
if (Serial.available())
{
delay(50);
while (Serial.available())
{
MESSAGE[i] = Serial.read();
i++;
MESSAGE[i] = '\0';
attente = false;
}
Serial.println(MESSAGE);
messageFl = true;
}
}
}
Merci pour votre aide!