Go Down

Topic: Arduino ethernet (Read 460 times) previous topic - next topic

zerr0s

Bonjour,

Je viens de recevoir une arduino mega 2560 ethernet de freetronics. Je fais mes premiers tests avec. Pour le moment je teste la communication en udp. J'ai suivi le tuto qu'il y a sur le net, et ça fonctionne.

Je voudrai changer un peu l'exemple par défaut pour renvoyer une réponse dynamique au lieu d'une chaine par défaut. Voici on code qui fonctionne:
Code: [Select]
#include <SPI.h>         // needed for Arduino versions later than 0018
#include <Ethernet.h>
#include <EthernetUdp.h>         // UDP library from: bjoern@cs.stanford.edu 12/30/2008


// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);

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

// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

void setup() {
  // start the Ethernet and UDP:
  Ethernet.begin(mac,ip);
  Udp.begin(localPort);

  Serial.begin(9600);
  Serial.print("Server listening on : 192.168.1.177");
}

void loop() {
  char remIP[] = "test";
  // if there's data available, read a packet
  int packetSize = Udp.parsePacket();
  if(packetSize)
  {
    Serial.print("Received packet of size ");
    Serial.println(packetSize);
    Serial.print("From ");
    Serial.print(Udp.remoteIP());
    Serial.print(", port ");
    Serial.println(Udp.remotePort());

    // read the packet into packetBufffer
    Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
    Serial.println("Contents:");
    Serial.println(packetBuffer);

    // send a reply, to the IP address and port that sent us the packet we received
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
   
    Udp.write(ReplyBuffer);

    Udp.endPacket();
  }
  delay(10);
}


Je voudrai renvoyer une chaine du type:
"<Adresse IP>: ok"

J'ai essayé de faire:
Code: [Select]
Udp.write(Udp.remoteIP() + " :OK");

Mais ça ne fonctionne pas. J'ai également essayé:
Code: [Select]
char remoteIP = "";
IPAddress remote = Udp.remoteIP();
    for (int i =0; i < 4; i++)
    {
      Serial.print(remote[i], DEC);
      remoteIP[] = remote[i], DEC;
      if (i < 3)
      {
        Serial.print(".");
        remoteIP[] = ".";
      }
    }


Mais idem, ça ne fonctionne pas. J'apprends le C au fur et à mesure de mes projets, alors je galère un peu. Qu'elle est la bonne façon d'arriver à mes fins ?

J'espère que vous pourrez m'aider.

skywodd

Bonjour,

Essaye :
Code: [Select]
Udp.write(Udp.remoteIP());
Udp.write(" :OK");


(pas sur que ça marche, ya eu tellement de changement dans l'API udp que je sait plus ce qu'accepte write() en argument ...)
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

zerr0s

hello. Ca ne fonctionne pas non plus. Ce n'est pas grave, je vais repenser mon code pour limiter
les échanges, alors je ne devrai plus avoir besoin de transférer l'ip qui se connecte.

Pac2Kro

Et ça?
Code: [Select]
for (i=0;i<4;i++)
    {
      Udp.write(Udp.remoteIP[i]);
    }

zerr0s

euh ... j'essaie ca demain. je suis dans mon lit avec ma tablette lol

skywodd

Sinon essaye :
Code: [Select]
Udp.write(Udp.remoteIP(), 4);
Udp.write(" :OK");
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Go Up