1
votes

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.

1
I have the same problem with that library. Did you solve it ? One problem is that when u send upd packet like this, you will have destination mac address as 0.Gossamer

1 Answers

1
votes

First of all, the posted code doesn't seem complete. There are several incomplete #include's, also, I don't see where the ether class is defined.

Next, if your code use to work on Ethernet Shield, then what libs were used and more specifically what chip is on the Ethernet shield?

The ENCJ2860 is "its own" chip. That is, the libs required to control the ENCJ2860 might be different than the ones used on the Ethernet Shield, if and only if, the chip on the Ethernet Shield was NOT an ENCJ2860.

It is impossible to determine this from the information given in this question. But, this is the first thing I would look at.

P.S. I am currently working on sprucing up the libs for an ENCJ2860, and am waiting for an ethernet shield that has an ENCJ2860, so I can help you with this, or send you my libs (still to be debugged!!).