2017-05-17 2 views
0

J'ai écrit un croquis pour envoyer des données de capteur via UDP. Je reçois un simple transfert de 1 octet par paquet. Comment puis-je define mon packagelenght, ai-je besoin d'un buffer?Définition de la taille de paquets UDP (Arduino)

Merci!

code ci-dessous:

//Version 1.05 

//necessary libraries 
#include <SPI.h> 
#include <Ethernet2.h> 
#include <EthernetUdp2.h> 

//Pin settings 
#define CTD 19 

//Network Settings 
byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0xEC, 0xAB }; //set MAC Address Ethernet Shield (Backside) 
byte ip[] = { XXX, XXX, X, X };      //set IP-Address 
byte gateway[] = { XXX, XXX, X, X };     //set Gateway 
byte subnet[] = { 255, 255, 255, 0 };    //set Subnetmask 


//local UDP port to listen on 
unsigned int localPort = 5568; 

//Recipient IP 
IPAddress RecipientIP(XXX, XXX, X, X); 

//Recipient UDP port 
unsigned int RecipientPort = 8888; 

//Buffer for sending data 
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; 

//EthernetUDP instance 
EthernetUDP Udp; 

//CTD data 
int incomingData = 0; 


void setup() 
{ 
    //Start Ethernet 
    Ethernet.begin(mac, ip); 

    //Start UDP 
    Udp.begin(localPort); 

    //for debug only 
    Serial.begin(9600); 

    //Serial baud rate for CTD 
    Serial1.begin(1200); 

    //Version 1.05 
Serial.print("Version 1.05"); 

    //CTD 
    pinMode(CTD, INPUT); 
} 

void loop() 
{ 

//If CTD is sending 
if (Serial1.available()) 
{ 
    //read incoming data 
    incomingData = Serial1.read(); 

    //for debug only 
    Serial.print("Data: "); 
    Serial.println(incomingData, BIN); 
} 
//Send UDP packets 

    //Debug only 
    Serial.print("Packet"); 

    // send to the IP address and port 
    Udp.beginPacket(RecipientIP, RecipientPort); 
    Udp.write(incomingData); 
    Udp.endPacket(); 
} 

Répondre

0

Le code suivant pour l'envoi et la réception de paquets:

#include <SPI.h>         // needed for Arduino versions later than 0018 
#include <Ethernet.h> 
#include <EthernetUdp.h>         // UDP library from: [email protected] 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 }; 
unsigned int localPort = 5683;      // 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[] = "Portland banjo shabby chic Vice dreamcatcher gluten-free. Fashion axe Godard bicycle rights before they sold out, try-hard selvage polaroid sriracha master cleanse biodiesel Schlitz Wes Anderson.";       // 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); 
  Udp.begin(localPort); 

  Serial.begin(115200); 
} 

void loop() { 
  // 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 "); 
    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()); 

    // read the packet into packetBufffer 
    Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE); 
    Serial.println("Contents:"); 
    Serial.println(packetBuffer); 
  } 
   
  // Send 
  Udp.beginPacket("192.168.3.147", 5683); 
  Udp.write(ReplyBuffer); 
  Udp.endPacket(); 
   
  delay(1000); 
} 

Dans ce fait la déclaration suivante obtenir la taille:

int packetSize = Udp.parsePacket(); 
+0

Je pense que vous pouvez utilisez-le pour vos références – Billa

+0

Je l'ai essayé mais je ne reçois aucune donnée lorsque j'utilise le tampon. Comment puis-je obtenir mes données dans le parsePacket ou packetSize? – TheTris