I am using the new Microduino ENC28J60 Ethernet Module (Arduino compatible).
I am using the udpListener sketch and want to echo a message back to the sender when a UDP packet arrives.
I am receiving messages OK, but the udpSend in the callback method will not work.
This works fine on the Arduino Uno with Ethernet shield
Can anyone help.
Thanks in Advance
Here is the Code:
// Demonstrates usage of the new udpServer feature.
//You can register the same function to multiple ports, and multiple functions to the same port.
//
// 2013-4-7 Brian Lee [email protected]
#include
#include
#define STATIC 1 // set to 1 to disable DHCP (adjust myip/gwip values below)
#if STATIC
// ethernet interface ip address
static byte myip[] = { 192,168,0,201 };
// gateway ip address
static byte gwip[] = { 192,168,0,1 };
static byte ipDestination[] = {192, 168, 0, 9};
unsigned int portMy = 8888;
unsigned int portDestination = 9000;
#endif
// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x70,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[500]; // tcp/ip send and receive buffer
char msg[] = {"Hello World"};
//callback that prints received packets to the serial port
void udpSerialPrint(word port, byte ip[4], const char *data, word len) {
IPAddress src(ip[0], ip[1], ip[2], ip[3]);
Serial.println(src);
Serial.println(port);
Serial.println(data);
Serial.println(len);
//I Added this to echo the packet <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ether.sendUdp(msg, sizeof msg, portMy, ipDestination, portDestination);
Serial.println("UDP Sent !!");
}
void setup(){
Serial.begin(9600);
Serial.println("\n[backSoon]");
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println( "Failed to access Ethernet controller");
#if STATIC
ether.staticSetup(myip, gwip);
Serial.println("Serial Started on FixedIP");
#else
if (!ether.dhcpSetup())
Serial.println("DHCP failed");
#endif
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
//register udpSerialPrint() to port 1337
ether.udpServerListenOnPort(&udpSerialPrint, portMy);
//register udpSerialPrint() to port 42.
//ether.udpServerListenOnPort(&udpSerialPrint, 42);
}
void loop(){
//this must be called for ethercard functions to work.
ether.packetLoop(ether.packetReceive());
}
===== ADDITIONAL INFORMATION ====
Hi,
Sorry the includes are:
include EtherCard.h include IPAddress.h They seem to get removed from the text with the left arrow & right arrow symbol as used in c++.
I take your note about the ether class. I used an example from the Ethercard folder called "udpListener" and was puzzled about the class not being declared. I assumed in was done in the ethercard.h.
The program as is does work and listens to and displays correctly received udp packets with the udpSerialPrint method, so the Listening side works. I wanted to echo back something to the sender of the udp packet and it is udpSend does not work.
The shield that I am using is as on the link: http://hobbycomponents.com/index.php/microduino-enc28j60-ethernet-module-arduino-compatible.html
The compatible libraries are found through the same webpage:
https://github.com/jcw/ethercard
I hope this provides you with further info as necessary.