enc28J60 e Arduino (1)

by luca
143 comments

Con questo articolo, inizia una serie di tutorials sull’uso del controller Ethernet enc28j60 con Arduino.

Introduzione

Lo shield Ethernet ufficiale per Arduino è basato sul chip Wiznet W5100 e per tale shield sono state scritte le librerie Ethernet incluse nell’IDE di Arduino: http://arduino.cc/en/Reference/Ethernet

Un altro controller Ethernet molto diffuso è il chip enc28j60 di Microchip: su Internet sono disponibili – spesso ad un costo inferiore rispetto allo shield ufficiale – shield o breakout boards basate su tale chip.

Giustamente Testato mi ha suggerito di aggiungere una nota sulle differenze tra i due controller: quella principale, che sicuramente ha guidato il team Arduino nella scelta del W5100, è che tale chip implementa in hardware tutto lo stack TCP/IP liberando risorse lato MCU.

Libreria

Diversi produttori e hobbisti hanno sviluppato librerie per gestire questo controller con Arduino; per questi tutorials utilizzerò la libreria EtherCard di JeeLabs Café.

JeeLabs ha pubblicato la propria libreria su GitHub; per prima cosa scarichiamo l’ultima versione in formato ZIP:

Apriamo la cartella principale dove abbiamo installato l’IDE (tipicamente C:\arduino-1.0) e scompattiamo l’archivio appena scaricato all’interno della sottocartella libraries. All’interno dello ZIP, i files della libreria sono contenuti in una cartella chiamata “jcw-ethercard-xxx“: rinominiamo tale cartella in EtherCard:

Lanciamo ora l’IDE e verifichiamo che la libreria sia disponibile:

Parametri di rete

Prima di poter collegare il nostro shield alla rete, abbiamo bisogno di alcuni parametri:

  • il MAC address, è un numero di 48bit che identifica univocamente ogni dispositivo collegato in rete. Perché sia univoco, ad ogni produttore è assegnato un codice (OUI) che compone i primi 24 bit dell’indirizzo;
  • l’indirizzo IP è un numero di 32bit (IPv4) che identifica il dispositivo all’interno della rete locale;
  • la maschera di rete è un numero di 32bit che consente di identificare tutti i dispositivi appartenenti alla medesima rete locale;
  • (eventualmente) il gateway è l’indirizzo IP di quel dispositivo di rete (router…) che consente di raggiungere dispositivi non appartenenti alla propria rete locale.

Per quanto riguarda il MAC address, possiamo sceglierne uno che non sia già utilizzato da altri dispositivi nella nostra rete… spesso negli esempi si utilizzano MAC address con codice produttore non ancora assegnato (es. DD-DD-DD).

I parametri IP (indirizzo, maschera, gateway) devono essere invece coerenti con quelli già assegnati agli altri dispositivi nella nostra rete; in particolare indirizzo IP univoco, mentre maschera di rete e gateway uguali.

A volte è disponibile in rete un server DHCP che consente di impostare automaticamente i parametri sui vari dispositivi: vedremo in un prossimo esempio come utilizzare anche con Arduino tale funzionalità.

Nella prossima pagina inizieremo a scrivere uno sketch

Related Posts

143 comments

lucadentella.it – enc28J60 e Arduino (2) 13 febbraio 2012 - 22:47

[…] termine del primo articolo abbiamo scritto un semplice sketch dove tutti i parametri di rete erano definiti come costanti; […]

Reply
Mauro 14 febbraio 2012 - 08:36

Ciao Luca, articolo molto interessante l’ho twittato per farlo leggere ad altri appassionati Arduino.

Reply
Roby 14 febbraio 2012 - 10:57

Ciao Luca,

anche io sto usando (combattendo con ) uno shield con ENC28J60. Avrei bisogno di settare la subnet mask ma nessuna libreria o esempio che ho trovato permettono di farlo. Hai qualche suggerimento?

grazie, saluti

Reply
luca 14 febbraio 2012 - 19:48

Ciao Roby,

hai ragione… che strana dimenticanza, visto che se usi il setup via DHCP questo è in grado di impostarla correttamente.

Comunque mi pare si possa risolvere così:

static byte staticmask[] = {255,255,255,128};

ether.copyIp(mymask, staticmask);

fammi sapere se funziona, magari lo metto in un prossimo articolo 😉

Reply
lucadentella.it – enc28J60 e Arduino (3) 19 febbraio 2012 - 21:55

[…] aver imparato come collegare Arduino alla rete (con indirizzi statici oppure sfruttando un server DHCP) vediamo ora come inviare/ricevere informazioni attraverso un sito […]

Reply
mario 1 marzo 2012 - 19:14

Dove hai preso la shield con ENC ???
Grazie
Ciao

Reply
luca 1 marzo 2012 - 20:30

eBay…

Reply
mario 1 marzo 2012 - 20:59

Ok cerco anch’io Grazie

Reply
Axel 8 marzo 2012 - 17:24

Ciao Luca,

Complimenti per tutto.
Attualmente ho sviluppato un progettino su W5100 con l’uso anche di SD. Pero’ come sappiamo, per la verita’ l’ho imparato sucessivamente (non ho guardato bene), il chip suddetto ha un bug hardware. Pensavo di disaccoppiare lo shield procuramdomi un SD shield e l’ENC da sostituire. Il progetto e’ su mega e attualmente pesa circa 45k e sfrutta meno di 1k in ram quindi non avrei problemi di spazio, dato che l’enc ne ha bisogno. Inoltre per la parte in tcp, lo scambio di dati, avviene solo tramite bytes, nessuna stringa.
Dato che ho gia’ definito il protocollo di scambio dati tra client e server, con una traduzione all’enc risolverei definitivamente il problema hardware?
Comunque sia il w5100 fino ad ora non ha dato problemi. E lo uso in modalita’ sia con SD che con ETH.

Reply
luca 8 marzo 2012 - 20:40

Ciao Axel, grazie per i complimenti!
Sicuramente il chip enc28j60 ha dato prova in vari progetti di essere molto affidabile. A differenza del W5100 non gestisce in hardware il protocollo TCP/IP ma con un Mega non avrai di certo problemi di carico sulla CPU. Sul forum di Arduino c’è una discussione in corso su questo “bug” del chip W5100 e ci sono utenti che hanno riportato progetti attivi da giorni/settimane senza blocchi. Se a te non ha dato ancora problemi, è possibile che il tuo codice non vada a “toccare” quella funzionalità che lo manda in blocco.

Reply
Axel 9 marzo 2012 - 21:58

Ciao Luca,
Grazie per la risposta.
Ma soprattutto grazie per il tuo articolo con la quale mi permette di provare questa soluzione. Blocchi non me ne ha dati, ma per sicurezza e per avvantaggiarmi, penso di proprio di convertire il progetto. Per ora problemi non ne ho avuti è vero, ma nei (piccoli) ritagli di tempo penso di cominciare ad occuparmi dell’enc.
Tutti i risultati futuri, che non saranno a breve, prometto di postarteli.

Ciao

Reply
Rott 10 marzo 2012 - 23:27

Ciao Luca

Ho seguito il tuo tutorial ma non riesco a far funzionare arduino come web server.
Dopo aver assegnato l’ip 192.168.2.100 subnet 255.255.255.0 il gateway è l’indirizzo del router 192.168.2.1 anche se lo pingo non vedo i dati ricevuti, dal cmd mi risponde ma dallo stato connessione i ricevuti sono fermi a 0 mentre gli inviati vanno avanti.
Dove sbaglio?
Grazie e complimenti per i tuoi post.

Reply
luca 11 marzo 2012 - 20:26

Ciao!

tu stai pingando il tuo Arduino da un altro PC in rete locale giusto? Che indirizzo ha questo PC? E quando da prompt di dos dai il comando “ping 192.168.2.100” cosa vedi come risposta?

Reply
Rott 12 marzo 2012 - 15:10

Sono giorni che ci sto sbattendo la testa , ho acquistato su Futura elettronica ETHERNET SHIELD CON ENC28J60 in kit. Ho il pc connesso ad internet tramite wifi su un ip 192.168.2.2, il router è 2.1 finale firewall disabilitato.La scheda la connetto il lan con cavo cross con ip 192.168.2.200. attraverso il tuo script cerco di pingare la scheda( ip che è nello script 192.168.2.201) il gateway è lostesso per tutti 255.255.255.0 ma non risponde, ho provato un’altro tuo script demo dhcp ma in seriale mi dice :DHCP Demo
Failed to access Ethernet controller.Dallo stato di connessione lan del pc i dati inviati camminano ma i ricevuti sono fermi a zero,ho solo arduino connesso in lan.Il kit è semplice da montare ho rivisto le saldature sto battendo le piste con il tester ma sembra tutto ok.Ho riletto e riletto i tuoi tutorial e script e credo che sia la sceda che non funziona. Come posso fare un test per accertarmi?
Grazi eluca per avermi risposto
Rott

Reply
Rott 12 marzo 2012 - 18:48

ho provato questo script per testare la scheda :

#include

#define REQUEST_RATE 5000 // milliseconds

// ethernet interface mac address
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
// ethernet interface ip address
static byte myip[] = { 192,168,2,203 };
// gateway ip address
static byte gwip[] = { 192,168,2,1 };
// remote website ip address and port
static byte hisip[] = { 74,125,79,99 };
// remote website name
char website[] PROGMEM = “google.com”;

byte Ethernet::buffer[300]; // a very small tcp/ip buffer is enough here
static long timer;

// called when the client request is complete
static void my_result_cb (byte status, word off, word len) {
Serial.print(“<< timer + REQUEST_RATE) {
timer = millis();
Serial.println(“\n>>> REQ”);
ether.browseUrl(PSTR(“/foo/”), “bar”, website, my_result_cb);
}
}

Sul monitor seriale settato a 57600baud comparare solo la scritta [getStaticIP] e cosi rimane.
pingando 192.168.2.203 mi da richiesta scaduta
Butto la scheda?

Reply
luca 12 marzo 2012 - 19:41

Ciao!

Tutti i miei esempi come prima cosa inizializzano il chip enc28j60 e devono scriverti “Ethernet controller initialized” altrimenti c’è sicuramente qualcosa che non va nel dialogo tra arduino e la schedina.

Ho guardato il kit che hai acquistato e sembra “compatibile” con gli esempi di questo tutorial (ad es. il PIN CS è sul PIN 10 di Arduino)… purtroppo sembra proprio che la tua scheda non funzioni.

Reply
Giovanni 23 novembre 2012 - 22:25

anch’io sto riscontrando lo stesso identico problema di Rott con il modulo enc28J60.

Gradirei avere notizie su come è stato risolto e s’è stato risolto il problema. Grazie

Reply
luca 23 novembre 2012 - 22:57

Ciao Giovanni,

anche tu con un modulo di Futura Elettronica? Anche a te non appare nulla?

Reply
Giovanni 24 novembre 2012 - 19:28

proprio così 🙁 il modulo l’ho importato dall’ Inghilterra credo ci sia incompatibilità con arduino mega 1280. Comunque spero di risolvere il problema acquistando un altro modulo che mi costerà meno della metà del primo.
Ethernet Shield W5100 For Arduino 2009 UNO Mega 1280 2560

Reply
luca 26 novembre 2012 - 09:19

Ciao Giovanni,

sicuramente per utilizzarlo con un Mega1280 dovrai collegare correttamente i PIN della interfaccia SPI, guarda la tabella presente sul sito di Arduino:

http://arduino.cc/en/Reference/SPI

Rott 12 marzo 2012 - 21:22

Grazie Luca se non era per i tuoi tutorial vagavo in rete senza speranza.. prendero un’altro kit e riprovero anche se stavolta prendero anche la shield ufficiale.

Grazie ancora Rott

Reply
mario 16 marzo 2012 - 12:06

Come riferito qui da Luca:
attiviamo la libreria con il metodo begin(), passando come parametri la dimensione del buffer, il MAC address e il PIN di Arduino a cui è collegato il PIN ChipSelect del modulo (normalmente è il PIN 10, verificate la documentazione del vostro shield);

è possibile che alcuni shield o “minischede” non sia il PIN10 ma il PIN 8.
Provare per credere

Reply
Matteo 14 giugno 2012 - 07:04

Ciao Luca, complimenti per i tuoi ottimi tutorial.
Ho un modulo enc28j60 simile a quello visibile in foto, ma non riesco a farlo funzionare. Hai usato accorgimenti particolari per connettere i pin SPI ad arduino ( visto che lavorano a tensioni diverse) ?
Grazie
Matteo

Reply
luca 14 giugno 2012 - 08:07

Ciao Matteo,

in realtà sto utilizzando uno shield con il chip enc28j60; per la differenza di tensione di alimentazione puoi utilizzare un partitore resistivo oppure un circuito tipo questo: http://www.robot-italy.com/product_info.php?products_id=2508

fammi sapere se funziona!

Reply
Leonid 3 luglio 2012 - 11:19

qui c’è un esempio carino 🙂

http://jeelabs.org/2010/06/07/etherbbbreadboard/

Reply
luca 13 luglio 2012 - 19:29

Ciao! Quello è proprio il sito ufficiale della libreria Ethercard… se guardi nello ZIP tra gli esempi inclusi un paio sono quelli di questo blog 😉

Reply
Jim 22 luglio 2012 - 19:30

I bought the card pictured and downloaded from github. Renaming jcw-ethernet-xxxxxxx gives message “ethercard_test_1.cpp:3:23: error: EtherCard.h: No such file or directory
ethercard_test_1:5: error: ‘Ethernet’ has not been declared
ethercard_test_1.cpp: In function ‘void setup()’:
ethercard_test_1:12: error: ‘ether’ was not declared in this scope
ethercard_test_1:12: error: ‘Ethernet’ has not been declared
ethercard_test_1:15: error: ‘ether’ was not declared in this scope
ethercard_test_1.cpp: In function ‘void loop()’:
ethercard_test_1:21: error: ‘ether’ was not declared in this scope”. moving subdirectory EtherCard without renaming compiles and prints “PING demo” in serial monitor but gives a “request timed out” when I ping the IP address. All I changed is static byte myip[] = {192,168,0,10}; and Serial.begin(9600);.
I’m going through a Iogear wireless to ethernet adapter but my netbook works fine through it! Could it still be the problem?
Jim

Reply
luca 2 agosto 2012 - 08:35

Hi Jim!

Are you pinging Arduino from a PC in the same subnet (192.168.0.x)? Are you able to ping other devices in the same network?
thanks!

Reply
lazyboy 28 luglio 2012 - 13:58

Hi!
Thanks for your informative blog posts about ENC28J60 and Arduino Uno. Trying to get the same setup working. Could you please verify the connections that you give here: http://arduino.cc/forum/index.php/topic,112444.msg845718.html#msg845718
Thanks a lot!
-lazyboy

Reply
luca 2 agosto 2012 - 08:38

Hi!

I read that pescadito answered your post in Arduino forum, were you able to solve with the connections he suggested?

Reply
Frank 13 settembre 2012 - 19:24

Hi Luca!
I’m studing this library and I found that the socket used to browse a page never close after the page download is complete.

I mean the browseUrl() functions always open a new socket and do not close those that where used.

I’m trying to implement a raw socket, is the most simple network communication method, but I can’t close the used socket after the data is complete.

Have some ideas?
I think that keept opens socket will crash the application and the ENC.

Best Regards
Frank

Reply
luca 22 settembre 2012 - 14:30

Hi Frank!

enc28j60 is different from wiznet chip (which can only keep 4 sockets open): all the tcp/ip stack is managed by Arduino’s library.
Ethercard library correctly sends a TCP FIN packet at the end of the request (open tcpip.cpp and have a look to packetLoop method).

bye

Reply
Marco 30 novembre 2012 - 19:29

Ciao Luca
innanzitutto grazie per i tuoi esempi ,ma al momento ho riscontrato un problema :
caricando il programma al mio arduino mega , quando apro il serial monitor vedo Ping DEMO , ma niente altro , e facendo il ping , non ricevo mai una risposta , sempre host non raggiungibile .Pero’ se inverto i PIN SO e SI , vedo un errore failed access ethernet controller .Non capisco dove sia l’errore , ,tu cosa pensi che sia?
Grazie

Reply
luca 30 novembre 2012 - 20:05

Ciao Marco,

l’errore è normale se i PIN non sono collegati correttamente… hai provato l’esempio in DHCP (seconda parte del tutorial)? In questo caso che cosa ti appare sul serial monitor?

Reply
Marco 1 dicembre 2012 - 01:24

Ciao Luca
ho provato anche con la seconda parte del tutorial , ma il serial monitor si ferma a
DHCP Demo , da qui non si schioda .
Non ho idea di cosa possa fare o controllare

Reply
Marco 1 dicembre 2012 - 02:37

Ciao Luca
ho trovato il problema : utilizzando un arduino Mega , il pin del chip select nel mio caso e’ il 53 !adesso funziona !grazie

Reply
luca 1 dicembre 2012 - 09:40

ottimo!

Reply
Usama 3 febbraio 2013 - 16:22

Hi, I followed your example but I am getting this error message:

sketch_feb03a:3: error: ‘Ethernet’ has not been declared
sketch_feb03a.cpp: In function ‘void setup()’:
sketch_feb03a:10: error: ‘ether’ was not declared in this scope
sketch_feb03a:10: error: ‘Ethernet’ has not been declared
sketch_feb03a:13: error: ‘ether’ was not declared in this scope
sketch_feb03a.cpp: In function ‘void loop()’:
sketch_feb03a:19: error: ‘ether’ was not declared in this scope

any suggestion

Reply
luca 3 febbraio 2013 - 21:24

Hi! It seems you don’t have the Ethercard library installed… make sure:

– in the “libraries” folder of your Arduino installation you have an “EtherCard” folder containing files (EtherCard.cpp…)
– you closed and re-opened Arduino IDE after having installed the library

Reply
Usama 4 febbraio 2013 - 20:57

Hi Luca,

I have the library installed with EtherCard.cpp in it but the problem is still there.

Reply
luca 4 febbraio 2013 - 21:10

Hi! Did you include the library (#include ) on the top of your sketch?
In the “Examples” menu of the Arduino’s IDE do you find EtherCard examples? Try compiling one of them and let me know if you get the same errors…

Reply
Usama 4 febbraio 2013 - 21:26

yes, I copied your example then verified before uploading but I get the same error message. I even used the examples from EtherCard lib. but still nothing. I am getting this error:

pings:8: error: ‘Ethernet’ has not been declared
pings.cpp: In function ‘void gotPinged(byte*)’:
pings:13: error: ‘ether’ was not declared in this scope
pings.cpp: In function ‘void setup()’:
pings:20: error: ‘ether’ was not declared in this scope
pings:20: error: ‘Ethernet’ has not been declared
pings:22: error: ‘ether’ was not declared in this scope
pings:25: error: ‘ether’ was not declared in this scope
pings.cpp: In function ‘void loop()’:
pings:45: error: ‘ether’ was not declared in this scope

Lucasz 3 febbraio 2013 - 17:39

Hi
I try start my arduino mega 2560 with ENC28j60 module and I have a problem with communication with router-livebox 2.0 from Orange – router “sees” arduino (name: Arduino->=, IP address is given y DHCP and “sees” ENC’s MAC address). I tried with almost your examples, but anyone does not work….:(
I changed:
mac: 0xDE, 0xAD, 0xBE, 0xDE, 0xFE, 0xED
PIN: 53
buffer: 1500 – after changing this and first values, the router began to see Arduino.
Conectings:
VCC, GND
PIN 50: SO
PIN 51: SI
PIN 52: SCK
PIN 53: CS
Sometimes after uploading or reseting Arduino I get this:
DHCP Demo
Ethernet controller initialized
DHCP configuration done
IP Address: 192.168.1.14
Netmask: 255.255.255.0
Gateway: 192.168.1.1
But ping reports: destination host unreachable
After reseting Arduino:
DHCP Demo
Ethernet controller initialized
Failed to get configuration from DHCP
IP Address: 0.0.0.0
Netmask: 0.0.0.0
Gateway: 0.0.0.0
After second reset:
DHCP Demo
Ethernet controller initialized
Failed to get configuration from DHCP
IP Address: 0.0.0.0
Netmask: 255.255.255.0
Gateway: 192.168.1.1
PING:
Response from 192.168.1.13 (my computer’s IP): destination host unreachable
After third reset:
DHCP Demo
Ethernet controller initialized
DHCP configuration done
IP Address: 192.168.1.14
Netmask: 255.255.255.0
Gateway: 192.168.1.1
PING returns the same as the last…
Can anyone help?

Reply
luca 4 febbraio 2013 - 17:03

Hi Lucasz,

when your Arduino gets the correct IP address from DHCP, try – after ping – to find if your PC was able to resolve the mac address with the command “arp -a” and let me know the result

Reply
Get Your Arduino Online with an ENC28J60 By Nathan Hein Nathan Hein 9 febbraio 2013 - 09:40

[…] for using the ENC28J60 (in Italian, Google Chrome will offer to translate) http://www.lucadentella.it/2012/02/12/enc28j60-e-arduino-1/2/ ~Nathan Hein Comments (0) Tags: arduino, enc28j60, EtherCard, ethernet, milestone, network, […]

Reply
Istrice 14 febbraio 2013 - 09:35

Salve stavo cercando le stesse librerie per la ethercard enc28j da utilizzare però in bascom in quanto l’implementazione del codice con questo linguaggio comportava una maggiore facilità di scrittura e una sensibile riduzione di codice macchina da caricare sull’atmega328… qualche giorno fa girando fra i siti e i link vari avevo trovato chi si stava occupando del porting… purtroppo non ho salvato quella pagina e nemmeno il link… qualcuno ha informazioni in merito? grazie

Reply
Istrice 14 febbraio 2013 - 09:45

…dimenticavo: lo shield montato e funzionante con enc28j è quello di futuranet (codice prodotto 8190-ETHSHIELDKIT) purtroppo la sola inclusione della libreria $ethercard utilizzando l’ide di arduino con qualche riga di codice e una striminzita pagina html che fa da server occupa già metà dei 30kbyte disponibili con l’atmega328-pu… per ulteriori sviluppi sarà quindi necessario aggiugere uno shield sdcard se si vuole implementare un minimo di database-sql e html decente …nell’attesa di trovare la libreria per bascom-avr mi sto occupando di generare codice html compresso inviando codice all’atmega via seriale il quale provvederà a creare le opportune pagine…
.

Reply
Altis 25 febbraio 2013 - 10:07

Hi Luca,
I tried the above code to test my enc28j60 shield…but am not getting the ping results..the connections to my arduino uno were as follows..VCC – 3.3V
GND – GND
SCK – Pin 13
SO – Pin 12
SI – Pin 11
CS – Pin 10
in the serial monitor of arduino IDE, am getting Ping demo..

Reply
Renato Aloi 21 marzo 2013 - 20:30

Hi!

Has EtherCard library same limitation as ETHER_28J60? That issue about sending only 1 packet sized 500K bytes?

Thanks,
Renato Aloi

Reply
luca 21 marzo 2013 - 20:33

Yes, the limit is about 500 bytes of payload.

Reply
hernan 21 marzo 2013 - 22:00

Ciao Luca, volevo chiederti se sapevi perchè quando faccio il ping dal prompt seguendo questo tutorial mi dice host non raggiungibile ed arriva un solo pacchetto e 3 li perde?
grazie.

Reply
luca 21 marzo 2013 - 22:50

ciao, stai usando esattamente lo sketch del tutorial?

Reply
hernan 22 marzo 2013 - 11:12

si, però ora ho risolto, ho ricontrollato la continuità dei connettori ed un filo era spezzato. L’ho sostituito ed ora funziona tutto perfettamente. Grazie per i tuoi tutorial mi risultano molto utili.

Reply
lisergio 9 aprile 2013 - 18:07

Hi ! (sorry for may english, i´m spanish… )

I´m trying to connect Arduino UNO with ethernet card, to my iPhone , using NetIO App.

But don,t work…

i activate http protocol in the app, and add a button,
when press the button, the app send to arduino´s ip a message… ( i send a word… LED)..

i open a serial port, to print messages using…

#include

static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01};
static byte myip[] = {192,168,1,100};
byte Ethernet::buffer[700];
static byte gwip[] = { 192,168,1,1 };

void setup () {

Serial.begin(9600);
}

void loop() {

word len = ether.packetReceive();
word pos = ether.packetLoop(len);

if(pos) {

Serial.print((char *)Ethernet::buffer + pos );
}
}

but don´t write anything… 🙁

i need to send , an special word to initialize ?

( using the led example, works fine )…

Reply
luca 12 aprile 2013 - 21:28

Hi! The sketch seems ok! What happens if, instead of using the iPhone APP, you use the iPhone browser? Does Arduino print the received “GET” command?

Reply
Fabio Pulzi 12 aprile 2013 - 01:45

Hello Luca, I`m here again commenting on your posts. I had an Arduino Duemilanove working perfect with an enc28j60 module, but in order to increase the project I bought an Arduino Mega 2650, I tried a lots of things but without success to have it working with the enc28j60 module, could you please help me ?

Reply
luca 12 aprile 2013 - 21:24

Hi Fabio! The Arduino Mega has different PINs for SPI (the interface used to communicate with the enc28j60 chip), you need to compare the two pinouts and make the correct connections: you can’t simply insert the shield in the Mega.
Read this thread about the correct connections and let me know if it works for you!

Reply
Arednas 26 maggio 2013 - 12:54

Hi Luca,

When I use the default Webclient.ino script, it runs fine (using the http://www.google.com URL). When, however, I connect to a local machine (within the 10.0.0.x range), it fails to run. The callback function is never called.

My Internal DNS works fine, I can reach the local machines from my PC browsers, and pinging the arduino works also from other machines in my network.

Perhaps you can explain why this happens?

regards,
Arednas

Reply
luca 28 maggio 2013 - 16:33

Hi Arednas,

it’s a very stange behavior… is the subnet mask configured in Arduino correct?

Reply
Raghavendra 7 giugno 2013 - 05:26

Hello Luca,

ur tutorials have been quite informative so far. Ive worked on the likes of 8051, and the atmega series and this is the first time im working on an Arduino Uno board and hanrun ethernet controller….

**********Doubt*********

http://winkleink.blogspot.co.uk/2012/01/arduino-enc28j60-ethernet-module-part-2.html

The connection as this man says, the CS pin on most of the documented pages is pin10…

As this man says the library somehow allows the user to choose CS either at pin8 or pin10, where pin8 in Default… can u please confirm this…

My library is the Jeelabs one at Github but now the .zip package comes with a name EthernetMaster.

*********The Issue **********

Ive interfaced both arduino uno and enc28j60….

VCC – 3.3V
GND – GND
SCK – Pin 13
SO – Pin 12
SI – Pin 11
CS – Pin 8

Uploaded the sketch. Powered up the devices…
Im gettin nothing at the SerialScreen of arduino1.0 … But each time i press the reset button is get NonASCII values at the serialscreen of the IDE..

went on to ping the ip in CMD prompt all 4 packets failed to reach…

Checked the multimeter for Voltages, the ENC28j60 has some 2.6volts at SI pin…. when i press reset the Voltage drops to 0.1x …..

This is how far i have come till now, please shed some light ..!!

Peace LUCA

Reply
luca 8 giugno 2013 - 12:36

Hi Raghavendra,

if you’re using the EtherCard library, you can specify the CS pin in the begin() method: so if you use PIN8, you need to inizialize the library with the following code: ether.begin(sizeof Ethernet::buffer, mymac, 8)

Reply
Raghavendra 8 giugno 2013 - 17:36

caio luca….

reading all those comments in Italian i have somehow taught myself to understand it. quite a bit.. 🙂

i figured that out in the code, i changed it from 10 to 8 and vice versa and still got no ping response. all packets failed..

im not even gettin any thing on the SerialMoniter, just random not ASCII characters..

When i connect the Uno and Hanrun, a single LED blips on the ethernet controller and then nothing happens. Checked the LAN cable.

DO i need to connect the RESET pin on Hanrun to initialize SPI handshake.. Tomorrow is sunday and i dont want to return to college without making this run, so curious.. Plz help me out soon !

Thanks !

Reply
luca 10 giugno 2013 - 19:48

Hi Raghavendra,

the issue with the SerialMonitor is very strange… did you correctly set the baud rate (it must be the same you configure in the setup())? Which sketch are you running?

Reply
claudio 10 giugno 2013 - 17:27

Ciao Luca, ho installato sia su arduino mega 2650 che su arduino uno la scheda di rete (shield ethernet) fornita fa futura elettronica con il controllore enc28j60.
Ho controllato l’ardware ed anche i terminali coinvolti nella libreria enc28j60.h, tuttavia ho nell’applicazione _5_BasicServer.ino il seguente messaggio di errore durante il funzionamento del programma:

ethernet controller initialized
failed to get configuration from dhcp
ip address 0.0.0.0
netmask 0.0.0.0
gateway 0.0.0.0

hai qualche suggerimento?

Reply
luca 10 giugno 2013 - 19:46

Ciao Claudio,

prova a caricare lo sketch 1, con gli IP statici, mettendo un IP (e subnet) compatibili con la tua rete e vedi se riesci in questo modo a pingare Arduino…

Reply
claudio 11 giugno 2013 - 11:13

Ciao Luca buon pomeriggio,
ho provato l’esempio 1 ma aimè
nulla da fare mi dice che l’host non è raggiungibile

‘Destination Host Unreachable’

Reply
luca 13 giugno 2013 - 11:35

Ciao Claudio,

nel Serial Monitor di Arduino cosa vedi? L’init della ethercard ha esito positivo? Che IP/subnet hai configurato sul tuo PC e su Arduino?

Reply
lucky 17 giugno 2013 - 13:59

Ciao Luca,
volevo sapere s’è posso utilizzare le librerie con ImageCraft.

Grazie!

Reply
luca 17 giugno 2013 - 21:11

Ciao! teoricamente sì ma dovrai fare sicuramente qualche “adattamento” perché la libreria è scritta per essere compilata da AVR-GCC (il compilatore alla base dell’IDE di Arduino).

Reply
Kim Jessen 5 agosto 2013 - 14:49

Hello
Good guidance and everything works really well.
I have a piece of code written for Arduino Ethernet. with the original libraries.
I would like to change the code so it work with ENC28J60.
Does anyone want to help, it is not long. I’ve even tried now for 2 days, but my skills are not good enough.

Reply
luca 6 agosto 2013 - 14:47

Hi Kim,

send me a message using the contact form on the website…

Reply
Kim Jessen 8 agosto 2013 - 12:01

Hello Super thanks.
I’ve been away from my PC a few days hence this late reply.
You get something later.

Reply
Kim Jessen 11 agosto 2013 - 10:57

Hi Luca.
I’ve tried sending you several emails but I get a message that you can not receive them.
I have sent you 2 this morning, I write here, because if you do not receive mails then you should know that I receive your e-mails.

Reply
Rob 2 ottobre 2013 - 20:12

Ciao Luca, ho recentemente acquistato un ethernet shield basato sul ENC28J60: è il Nano Ethernet shield della DK Electronics (sucuramente conoscerai..). Il punto è che funziona solo con la libreria Ethershield. Non sono stato in grado di farla funzionare con la EtherCard. Hai qualche suggerimento da darmi in proposito? Qualche modifica di cui non sono a conoscenza?
Grazie.

Reply
luca 3 ottobre 2013 - 19:08

Ciao Rob,

normalmente tutti gli shield vanno con questa libreria: il problema potrebbe essere solo sul PIN CS: mi pare che il tuo lo abbia collegato al PIN 10. Se esegui lo sketch basic ti funziona? Altrimenti altri shield hanno il CS sul PIN 8, in questo caso cambia la riga di init in:
if (ether.begin(sizeof Ethernet::buffer, mymac, 8) == 0)

Reply
Rob 4 ottobre 2013 - 21:15

Grazie per la risposta, Luca.
Purtroppo non funziona neanche il ping!
Sembra che si impalli in qualche modo: vedo la scritta Ping Demo sul monitor seriale, ma windows semplicemente non lo vede.
Aiutooooooooooo!!!!!!

Reply
marchx 24 novembre 2013 - 16:57

Ciao Luca, sono un neofita di Arduino ma ho seguito con interesse i tuoi tutorials sulle possibilità date dal collegamento a ethernet della stessa scheda. La mia idea sarebbe quella di realizzare un sistema di domotica, rilevando sensori analogici e attivando uscite digitali (eventualmente bidirezionali) mediante la comunicazione Ethernet tra due Arduino, collegate tra loro mediante due Powerline Ethernet (i segnali corrono sui fili dell’alimentazione AC della casa). Ti chiedo: è possibile far comunicare le due schede Arduino tra loro senza passare attraverso la creazione di un Web server e quindi passare attraverso due PC e un collegamento a Internet?
Se si mi puoi dare un suggerimento?

Reply
luca 27 novembre 2013 - 14:32

Ciao

è assolutamente possibile! Arduino può fare sia da server TCP sia da client.

Reply
Frank Bretland 25 novembre 2013 - 21:19

Luca, Thanks very much for a very informative tutorial. I’ve just started with Arduinos and have found it difficult to find documentation on the EtherCard library. Have you done any further tutorials on the next step in connecting to the internet i.e as a server or client or both.
regards

Reply
luca 26 novembre 2013 - 11:39

Hi Frank, thanks for your feedback: on my website you can find some other tutorials about it!

Reply
marchx 1 dicembre 2013 - 22:35

Grazie Luca della risposta. Avevo chiesto anche sul forum di Arduino ma senza avere nessuna risposta!
Quindi se mi puoi confermare si tratterebbe di collegare con cavo ethernet ciascuna scheda Arduino con relativa scheda con enc28j60 al Powerline relativo e ricevere il segnale ethernet dall’altra presa.
Il cavo ethernet è normale o cross?
Sulle due schede Arduino vanno impostati gli stessi indirizzi MAC e IP?
Grazie ciao

Reply
luca 2 dicembre 2013 - 09:38

ciao! penso che il cavo debba essere normale: i powerlines sono una sorta di “switch” ethernet. I due arduino dovranno avere diversi MAC e IP. Gli IP dovranno appartenere alla stessa rete locale.

Reply
marchx 3 dicembre 2013 - 23:09

Ciao Luca. Ti chiedo una conferma: poichè avrei bisogno di usare il pin 10 di Arduino per generare un PWM da quale ricavare il segnale di un’analogica inviata da una scheda all’altra, per impostare il CS della scheda Ethernet su un altro pin è sufficiente agire qua:
if (!ether.begin(sizeof Ethernet::buffer, mymac, 10))
e sostituire il 10 con ad es. 8 e quindi collegare il CS della scheda ENC28J60 al pin 8?
Oppure è legato alla libreria SPI?
Grazie

Reply
luca 4 dicembre 2013 - 08:59

ciao

teoricamente sì, è possibile utilizzare un altro PIN per CS come indichi tu. Tieni solo conto che il PIN 10 deve comunque essere utilizzato come output (nel tuo caso quindi dovrebbe andare bene) come spiegato qui: http://arduino.cc/en/Reference/SPI

Reply
marchx 8 dicembre 2013 - 14:25

Ciao Luca. Grazie per la risposta. Volevo chiederti un parere. La mia idea è quella di realizzare una misura della potenza immessa in rete da parte di un inverter fotovoltaico, quindi inviare tale valore analogico tramite i Powerline come ti dicevo ad altre Smart Plug sempre connesse con i Powerlines in grado di ricreare il segnale atttraverso una PWM filtrata e gestire un carico attraverso l’accensione di uno o più rele’, in relazione a quanto il carico locale possa assorbire senza sforare il valore della potenza immesa in rete.
Secondo te con un sistema del genere sono in grado di avere una routine di gestione dell’Ethernet e di generazione del PWM tale da ricreare un segnale con banda passante di circa 100Hz? (I power lines hanno una banda di 200Mb/sec).
Ti chiedo troppo di farmi un esempio (o un tutorial) su come inserire l’acquisizione di segnali analogici e/o digitali da inviare su Ethernet e poi ricavarli dall’altra scheda Arduino?
Bisogna passare attraverso la creazione di un Array che poi va inviato e ricevuto?
Grazie e scusa per essermi dilungato.

Reply
luca 16 dicembre 2013 - 14:18

Ciao

se ho capito bene tu vuoi far comunicare via powerline due Arduino, uno che invia un valore (potenza immessa in rete) e uno che riceve tale valore e – in base a una soglia – attiva/disattiva un carico? non capisco bene la parte del PWM?

Reply
marchx 17 dicembre 2013 - 22:18

Ciao Luca. Con i PWM volevo ricrearmi, previo filtraggio con doppia cella, un segnale analogico pari a quello della potenza assorbibile dalla linea per un possibile anello di regolazione di potenza su un inverter, il tutto in analogico.
Ma se mi accontento di fare dei salti di potenza senza uno sfruttamento totale della potenza disponibile, allora posso semplicemente comandare dei relè o triac.
Mi dai un input su come fare per inviare dati o riceverli sui due Arduino?

Reply
marchx 21 dicembre 2013 - 16:05

Ciao. Ti aggiorno sull’andamento dei miei test preliminari. Ho montato due schede ENC28J60, le ho pingate e mi rispondono correttamente. Ora ho provato la libreria UIPEthernet con l’esempio del WebServer: al primo colpo dal browser ho visualizzato le uscite analogiche (variando la tensione sugli ingressi con potenziometri si vedevano aggiornati i valori fino a 1023). Quindi ho provato a ridurre i tempi di aggiornamento della pagina, modificando la linea “”) in 1 o 0.1 (suppongo siano i secondi). A un certo punto la seriale ha smesso di mostrarmi i dati, non c’è più attività sull’Ethernet (led giallo spento) e la seriale, ad ogni reset dell’Arduino mi dà “server is at 0.0.0.0”.
Io sto collegando la schedina ad una porta di un Modem Alice Adsl mentre l’altra porta è connessa al PC. Dove sto sbagliando e perchè al primo colpo il tutto funzionava mentre poi si è bloccato?

Reply
luca 23 dicembre 2013 - 08:43

ciao

sembra che il modem Alice non stia più assegnando l’indirizzo IP alla scheda… prova a riavviarlo

Reply
marchx 1 gennaio 2014 - 23:06

Ciao Luca. Il problema della gestione del DHCP dal modem ADSL l’ho evitato collegando con un cavo cross le due schedine con l’ENC28J60 e utilizzando la libreria UIPEthernet, implementando e adattando i due esempi di TCP Client e TCP Server.
Le due schedine funzionano e scambiano i byte delle stringhe ma dopo un certo tempo di funzionamento, il Client mi da’ Client connect failed: per farlo ripartire devo resettare il uP relativo. Pensavo potesse essere un effetto di saturazione della memoria (in compilazione arrivo a 22kB) e volevo implementare lo stesso funzionamento con la libreria EtherCard per verificare se fosse in grado di essere più efficiente e quindi occupandomi meno memoria.
Il problema e che non so come creare gli oggetti Client e Server con la EtherCard. Riesci a instradarmi in qualche modo?
Grazie.

Reply
luca 14 gennaio 2014 - 19:44

Ciao

guarda i miei tutorial: ci sono esempi sia di come scrivere un “server“, sia di come fare un “client“…

Reply
Valerio B. 8 febbraio 2014 - 18:24

Salve signor Dentella.
Vorrei realizzare un progetto con questo modulo
ethernet e, prima che ne acquisti uno, ho provato a caricarne la libreria seguendo questo tutorial. Ho ripetuto più e più volte la procedura, estraendo la cartella zip nella cartella “libraries” e rinominandola “EtherCard”. Fin qui tutto bene. Il problema sorge quando vado ad importare questa libreria da Arduino. Mi appaiono le scritte:

#include
#include
#include

Tuttavia non vi è traccia del classico evidenziamento color arancio che si ha caricando una qualsiasi altra libreria; inoltre, se provo a compilare lo sketch, riporta l’errore ‘uint8_t’.
Ho provato sia con la versione 1.0.5 di Arduino che con la 1.0 ed ho provato anche con la libreria del tutorial numero 16, ma nulla da fare.
Caricando una qualsiasi altra libreria di Arduino (o anche una libreria scaricata e importata seguendo la medesima procedura) non ho alcun problema e riesco a compilare.

La ringrazio per l’attenzione. Sarei molto contento di riuscire a realizzare il mio progetto seguendo i suoi tutorial.

Reply
luca 12 febbraio 2014 - 17:09

ciao Valerio,

mi mandi l’errore completo? Mi preoccupa di più della mancata “colorazione” degli include…

Reply
Valerio B. 14 febbraio 2014 - 16:33

Ciao.
L’errore mi appare quando, dopo aver caricato la libreria, compilo lo sketch lasciando vuoto il “void setup” ed il”void loop”; se invece carico uno dei codici di esempio della libreria oppure il codice riportato in questo stesso tutorial riesco a compilare correttamente senza alcun errore, però gli include non sono comunque evidenziati. Ecco l’errore completo:

In file included from sketch_feb14a.ino:1:
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:18: error: ‘uint8_t’ does not name a type
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:19: error: ‘uint16_t’ does not name a type
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:21: error: ISO C++ forbids declaration of ‘uint8_t’ with no type
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:21: error: expected ‘;’ before ‘*’ token
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:23: error: expected `;’ before ‘static’
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:24: error: ‘uint8_t’ does not name a type
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:28: error: ‘uint16_t’ has not been declared
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:29: error: ‘uint16_t’ does not name a type
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:31: error: ‘uint8_t’ has not been declared
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:31: error: expected ‘,’ or ‘…’ before ‘*’ token
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:31: error: ISO C++ forbids declaration of ‘uint8_t’ with no type
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:32: error: ‘uint8_t’ has not been declared
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:32: error: ‘uint8_t’ has not been declared
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:33: error: ‘uint8_t’ does not name a type
C:\Program Files\Arduino\libraries\EtherCard/enc28j60.h:41: error: ‘uint8_t’ does not name a type

Reply
Edward Tang 20 febbraio 2014 - 16:22

Can you please tell me the pin connections of arduino and the enc28j60 module?

Reply
luca 2 marzo 2014 - 13:47

Hi Edward

basically it’s connected using SPI, you can use one of the schematics available on the Internet:
http://claudiuradu.blogspot.it/2013/05/low-cost-ethernet-shield-with-enc28j60.html

Reply
Valerio B. 7 marzo 2014 - 18:35

Salve. Ho acquistato il modulo ma non riesco a far funzionare nessuno dei suoi sketch, pur riuscendo a caricarli correttamente. Ad esempio, quando vado a fare il ping di questo primo esempio mi appare la scritta “host di destinazione non raggiungibile” nel prompt dei comandi; se invece carico lo sketch di esempio “pings” contenuto nella libreria EtherCard (quindi non il suo esempio) riesco a fare il ping correttamente.
Lo stesso vale per il secondo step del tutorial (DHCP): con gli esempi della libreria riesco ad ottenere il funzionamento corretto e mi viene assegnato in automatico un indirizzo IP che viene scritto sul serial monitor; mentre col suo sketch sul serial monitor mi appare solamente la scritta “DHCP Demo” e nient’altro.
Sono anche riuscito anche a comandare l’accensione e lo spegnimento di un led con uno sketch preso in rete, ma non riesco proprio a far funzionare nessuno dei suoi codici.
Potrebbe gentilmente aiutarmi? I suoi tutorial sono molto esaustivi e vorrei seguirli passo per passo, ma per ora sono bloccato. Grazie.

Reply
Víctor Calderón 10 marzo 2014 - 17:50

Hi Luca, I congratulate you on your site. I am following your tutorials using the ENC28J60 and was implementing the first lesson. I downloaded the libraries from GitHub as indicated by your site. I have imported the libraries into the Arduino software.

When I compile the example, shown me the errors below both Windows 7 and Ubuntu 13.04:

Windows 7:
core.a(main.cpp.o) In function `main’
CProgram FilesArduinohardwarearduinocoresarduinomain.cpp11 undefined reference to `setup’
CProgram FilesArduinohardwarearduinocoresarduinomain.cpp14 undefined reference to `loop’

Ubuntu 13.04:
/home/victor/sketchbook/libraries/EtherCard/tcpip.cpp: In static member function ‘static void EtherCard::browseUrl(prog_char*, const char*, prog_char*, void (*)(byte, word, word))’:
/home/victor/sketchbook/libraries/EtherCard/tcpip.cpp:521:81: error: invalid conversion from ‘const char*’ to ‘prog_char* {aka char*}’ [-fpermissive]
In file included from /home/victor/sketchbook/libraries/EtherCard/tcpip.cpp:14:0:
/home/victor/sketchbook/libraries/EtherCard/EtherCard.h:170:15: error: initializing argument 4 of ‘static void EtherCard::browseUrl(prog_char*, const char*, prog_char*, prog_char*, void (*)(uint8_t, uint16_t, uint16_t))’ [-fpermissive]

The error appears if the sketchbook is as unique line program # include

I will appreciate if you can specify the library employee ethercard-master.zip that is the one that is currently in effect and with which I have the problem, because of which you are using in the example is not the same jcw-ethercard-3b6c094.

Thank you,

Reply
luca 15 marzo 2014 - 10:42

Hi Victor

The library is correct: “master” is the latest version and you should use that.
Are you compiling the example I provided or a sketch you wrote?

Reply
Victor Calderón 15 marzo 2014 - 17:51

Hi Luca
Thanks for your assistance. In the following link I have uploaded some screenshots from my pc compiling the example:

https://www.mediafire.com/?kb1k7jvm3f0cpec

I appreciate you indicate if I’m doing something wrong.

Thank you

Reply
luca 22 marzo 2014 - 15:04

Hi Victor… mmm it seems a weird compiler problem.. are you using the latest version of the ethercard library?

Reply
Víctor 17 agosto 2014 - 22:27

I found the solution to my problem, this link http://jeelabs.net/issues/466
Patch file (patch.diff) should be applied to the library EtherCard.h
Thanks for your assistance

Gianluca 4 aprile 2014 - 13:55

Ciao Luca,
Sto provando la libreria uIPEthernet compatibile per arduino DUE. Quando compilo gli esempi non mi da nessun errore ma quando vado a vedere se nella rete e presente la scheda non trovo niente, ho provato anche a fargli assegnare l’ip dal dhcp ma nenache funziona. Sapresti aiutarmi

Reply
luca 13 aprile 2014 - 19:38

Ciao Gianluca: quale shield stai usando?

Reply
Rodrigo 8 aprile 2014 - 23:24

I’m trying to connect ENC28J60 to internet on top of a motor shield (http://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=100_146&products_id=2179) pin 8 used by the shield, is there any change to change the CS signal from pin 8 to pin 10

Reply
luca 13 aprile 2014 - 19:33

Hi Rodrigo,

yes, you can use a shield for that (example the Go-Between Shield by SparkFun).

Reply
enrico 29 aprile 2014 - 18:45

caro luca.. lo sketch non e completo…

Reply
luca 29 aprile 2014 - 20:58

ciao enrico, in che senso? compila, funziona…

Reply
Danilo 20 agosto 2014 - 19:50

Ciao luca potresti dirmi come collegare la scheda enc28j60 ad arduino mega 2560 ????

Reply
luca 25 agosto 2014 - 07:54 Reply
Michal 15 gennaio 2015 - 07:20

Hi, a have a little problem… My router don’t recognize Arduino and i can’t connect to it 🙁 I have Ethernet Shield 1.1 from dealextreme, and i see only power led… But no blinking led on router, no blinking led on ethernet port. Can you help me? 🙁

Reply
luca 15 gennaio 2015 - 20:31

Hi Michal,

the ethernet port should have two leds, one for the “medium link” and one for the activity… if both are off, you’ve a problem: check the cable, try changing the ethernet port on the router side… the worst case is that your shield is broken

Reply
alexdi 20 marzo 2015 - 19:58

Luca ciao e grazie per questi articoli veramente ben fatti. 2 mesi fa circa un amico mi ha regalato un Arduino Uno R3 compatibile (ergo cinese). Poi vedo i tuoi articoli e mi compro (in italia) la schedina di rete di cui parli ma per farla “pingare” ho sofferto le pene dell’ inferno. perchè? VCC – 3.3V e cioè collegavo il VCC della scheda al 3,3 v di arduino (come riportato in credo tutte le documentazioni) e non cera verso. Collegato al 5v di arduino va benissimo. Arduino è alimentato attraverso USB del PC. Scusa la mia ignoranza ma volevo togliermi questa curiosità.

Reply
luca 21 marzo 2015 - 20:05

Ciao, grazie per il tuo feedback… è possibile che la schedina abbia incluso un regolatore di tensione e di livelli per renderla compatibile con circuiti a 5V e che quindi “ci pensi lei” ad adattare poi la tensione a 3.3V per il chip.

Reply
alexdi 24 marzo 2015 - 21:24

Grazie per la risposta Luca. In effetti avevo letto qualcosa in giro ma non pensavo fosse il mio caso. Ad ogni modo notavo che si accendeva solo i led del power della schedina ma nessun led nella presa rj. Grazie ancora per questi tutorials. Sono una manna dal cielo !

Reply
Giovanni 21 maggio 2015 - 19:13

Luca buonasera…. sono partito dall’inizio ma mi esce questo errore in fase di caricamento della libreria:

Arduino:1.6.4 (Windows 7), Scheda:”Arduino Uno”

ka04_sample_code_2.ino: In function ‘void setup()’:
ka04_sample_code_2:30: error: ‘class EtherCard’ has no member named ‘mymask’
‘class EtherCard’ has no member named ‘mymask’

AIUTO…. Cosa ho combinato?….

Grazie….
Giovanni

Reply
luca 23 maggio 2015 - 11:57

Ciao Giovanni, sostituisci “mymask” con “netmask” e dovrebbe andare… da dove hai preso quel ka04_sample_code_2.ino? non è un mio sketch…

Reply
Fuji 8 giugno 2015 - 21:21

Ciao Luca, ho scaricato la libreria e rinominata, tuttavia quando compilo il codice mi dice ‘Ethernet’ is not a class or namespace… Come posso risolvere? vorrei seguire anche le altre guide :).. seconda domanda: posso utilizzare gli stessi codici con la Ethernet Shield dell’arduino?

Reply
luca 9 giugno 2015 - 07:38

Ciao, quell’errore indica che la libreria non è stata correttamente riconosciuta dall’IDE: controlla che sia nel path giusto e riavvia l’IDE se già non l’hai fatto. Questi esempi non sono compatibili con lo shield ethernet ufficiale.

Reply
Nik 31 agosto 2015 - 16:38

Ciao Luca, all’inizializzazione del modulo con indirizzo statico mi da un errore:

if (ether.begin(sizeof Ethernet::buffer, mymac,53) == 0)
Serial.println( “Failed to access Ethernet controller”);

ma in realtà il modulo funziona correttamente, qualche idea?

Reply
luca 2 settembre 2015 - 22:13

Ciao Nik, strano… se quell’istruzione non va (ritorna zero) significa che la libreria non riesce proprio a parlare con il chip enc28j60…

Reply
Mauro 8 dicembre 2015 - 10:25

Ciao Luca, vedo che hai fatto una grande esperienza sul ENC28J60. Io sto tentando di avviarlo con Arduino Due e tutte le librerie finora provate non funzionano al volo. Tu hai mai provato qualcosa con il DUE?

Reply
luca 10 dicembre 2015 - 14:41

ciao Mauro, purtroppo no… non ho esprerienza diretta con quell’Arduino. Essendo su bus SPI non basta eventualmente cambiare i PIN usati dalla libreria?

Reply
Alessandro 24 dicembre 2015 - 19:13

Ciao Luca, sto tentando di pingare il mio ENC28J60 montato su mega 2560 e collegato ad un netgear dgn2000 senza nessun buon risultato. l’output è “Destinazione non raggiungibile”. Ho controllato se il dispositivo riesce ad ottenere il gateway e il dns e ho scoperto che sono 0.0.0.0, ho provato anche lo sketch testDHCP ma non funziona nemmeno con il server DHCP. Secondo te quale problema può essere? Ho già inserito il pin 53 nel codice.
P.S. con la libreria UIPEthernet riesco a ottenere gateway, dns e netmask solo se imposto staticamente l’IP ma il risultato finale non cambia.

Reply
Alessandro 26 dicembre 2015 - 12:08

Ho un aggiornamento: con il mio vecchio (10 anni fa) modem funziona tutto.

Reply
enc28J60 and Arduino (16) | LinkSprite Learning Center 21 giugno 2016 - 02:38

[…] the examples I wrote uses the Ethercard library by JeeLabs – in my first post I also explained how to install it in your […]

Reply
Virgilio 1 luglio 2016 - 12:52

Ciao Luca, complimenti per gli articoli pubblicati sulla scheda ENC28J60. sto realizzando un progetto in cui la scheda arduino si dovrebbe collegare ad un server Telnet per inviare alcuni comandi.
Negli esempi disponibili non trovo qualcosa di simile ma solo la realizzazione di server e non di client.
Mi potresti dare qualche dritta ?
Grazie Mille.

Reply
luca 25 luglio 2016 - 09:31

guarda gli esempi pubblicati insieme alla libreria… oppure il mio esempio relativo alla comunicazione verso una applicazione c#

Reply
sergio 30 agosto 2016 - 20:11

hello, thank you for developing this library. she is perfect for me.

Can you help me? I am using the example WebClient.
But I have no idea how to make him write a url in my bunch of data, eg:

http://10.50.10.206:8095/arduino/salvardados.php?sensor1=5&sensor2=5&sensor3=5

To write in a bunch of data.

Reply
tom 4 marzo 2017 - 16:48

Ciao Luca,
probabilmente puoi risolvere una mia curiosità.
I numeri nella forma XX/YY che appaiono come ultima riga sull’etichetta di questo tipo di schede (nell’immagine di questo articolo sono 10/25) cosa stanno a significare? Scusa la domanda sciocca ma anche cercando in google non sono stato in grado di trovare risposta…
Grazie per la cortesia.

Reply
luca 6 marzo 2017 - 08:59

ciao, dovrebbe essere solo un numero che indica il “lotto” di produzione di quel connettore (della Hanrun).

Reply
stefania 11 aprile 2017 - 15:58

Ciao!
tutorial molto chiaro, ma nel momento incui carico la libreria come descritto mi dice che non è valida…

Reply
Roberto 21 dicembre 2017 - 04:37

Hello luca, (apologize for English, I’m Spanish).
I write the code as is, and verified that I am connected to the same subnet, plus I have done other tests with the examples of the “ethernet” library and I have no problem (so I deduce that the shield is not bad). But when I want to ping, I see “destination host inaccessible”. I think I have a problem with the “ethercard” library. I hope you can help me, Thanks.

Reply
luca 21 dicembre 2017 - 08:47

Hi Roberto, try changing the mac address… which is the example that works?

Reply
andrea 13 marzo 2018 - 14:16

Buongiorno,

Mi sto approcciando a questo mondo e volevo usare arduino per svegliare il portatile, ho trovato delle scield da mettere su arduino nano, secondo voi vanno bene?

Grazie a tutti

Reply
luca 14 marzo 2018 - 10:27

ciao Andrea, pensi di usare la funzionalità di Wake On LAN? Se non dici che shield vuoi usare è difficile rispondere…

Reply
Nicola 26 aprile 2018 - 09:23

Ciao, mi sono imbattuto nel tuo sito cercando di risolvere un problema con enc28J60, ho provato vari esempi con arduino ma il modulo sembra non funzionare, si accende la spia rossa del corretto funzionamento e collegando un cavo di rete le due spie verdo fisso e giallo lampeggiante, ma quando ho cercato di utilizzarlo non ha mai funzionato. Anche eseguendo un ping all’indirizzo 192.168.1.10 mi restituisce come risposta “richiesta scaduta e poi pacchetti trasmessi 4 ricevuti 0 100% persi. Ti volevo chiedere se e’ per te e’ un problema di scheda non funzionante o sono io che sbaglio in qualcosa visto che non sono molto pratico con le schede di rete. Inoltre tra le periferiche di sistema non compare la scheda ti chiedo se deve essere presente o non in quanto quando la connetto non mi chiede nessuna installazione dei driver. Grazie.

Reply
luca 26 aprile 2018 - 14:15

ciao Nicola… non capisco bene la parte delle periferiche: tu colleghi con un cavo direttamente il tuo PC alla scheda enc28j60? Questa non si comporta come una periferica per il PC ma come un “secondo PC”. Normalmente dovresti usare uno switch o hub per collegare il PC ad Arduino, a meno che il cavo di rete che utilizzi sia “cross” (o che il tuo PC sia in grado di fare l’auto MDI-X)

Reply
Nicola 26 aprile 2018 - 14:31

Ho provato sia a collegare l’ enc28j60 ad un hub di rete, dove le trae periferiche funzionano, sia a collagarlo con un cavo di rete direttamente dal router, il risulato e’ sempre lo stesso non funziona, visto che l’enc28j60 e’ stato acquistato ad una mostra di elettronica, chiaramente e’ nuovo e non usato, ho i miei dubbi che funzioni alla perfezione, vorrei sapere come fare a testarlo per togliermi i dubbi. Chiaramente il cavo di rete non e’ cross.
Grazie.

Reply
luca 26 aprile 2018 - 16:16

se lo sketch non ti da errore, significa che almeno Arduino riesce a dialogare con il chip enc28j60. Se il ping non va, prova a fare “arp -a” sul tuo PC e vedi se almeno ti risolve il MAC address… se anche questo non va è probabile che il chip sia danneggiato nella parte di comunicazione ethernet.

Reply
Nicola 26 aprile 2018 - 16:35

Arduino non da errori ma carica lo sketch senza problemi, ho fatto eseguire quello da te proposto.
:#include
static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01};
static byte myip[] = {192,168,1,10};
byte Ethernet::buffer[700];

void setup () {

Serial.begin(57600);
Serial.println(“PING Demo”);

if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
Serial.println( “Failed to access Ethernet controller”);

if (!ether.staticSetup(myip))
Serial.println(“Failed to set IP address”);
}

void loop() {

ether.packetLoop(ether.packetReceive());
}

ecco inoltre il risultato di arp -a:

Interfaccia: 192.168.178.74 — 0xd7
Indirizzo Internet Indirizzo fisico Tipo
192.168.178.1 38-10-d5-72-13-27 dinamico
192.168.178.255 ff-ff-ff-ff-ff-ff statico
224.0.0.22 01-00-5e-00-00-16 statico
224.0.0.251 01-00-5e-00-00-fb statico
224.0.0.252 01-00-5e-00-00-fc statico
239.255.255.250 01-00-5e-7f-ff-fa statico
255.255.255.255 ff-ff-ff-ff-ff-ff statico

Interfaccia: 169.254.49.81 — 0xdd
Indirizzo Internet Indirizzo fisico Tipo
169.254.255.255 ff-ff-ff-ff-ff-ff statico
224.0.0.22 01-00-5e-00-00-16 statico
224.0.0.251 01-00-5e-00-00-fb statico
224.0.0.252 01-00-5e-00-00-fc statico
239.255.255.250 01-00-5e-7f-ff-fa statico
255.255.255.255 ff-ff-ff-ff-ff-ff statico

Interfaccia: 192.168.153.1 — 0xdf
Indirizzo Internet Indirizzo fisico Tipo
192.168.153.254 00-50-56-ec-40-cc dinamico
192.168.153.255 ff-ff-ff-ff-ff-ff statico
224.0.0.22 01-00-5e-00-00-16 statico
224.0.0.251 01-00-5e-00-00-fb statico
224.0.0.252 01-00-5e-00-00-fc statico
239.255.255.250 01-00-5e-7f-ff-fa statico
255.255.255.255 ff-ff-ff-ff-ff-ff statico

Interfaccia: 192.168.78.1 — 0xe0
Indirizzo Internet Indirizzo fisico Tipo
192.168.78.254 00-50-56-e9-b0-78 dinamico
192.168.78.255 ff-ff-ff-ff-ff-ff statico
224.0.0.22 01-00-5e-00-00-16 statico
224.0.0.251 01-00-5e-00-00-fb statico
224.0.0.252 01-00-5e-00-00-fc statico
239.255.255.250 01-00-5e-7f-ff-fa statico
255.255.255.255 ff-ff-ff-ff-ff-ff statico

Reply
86ktm 3 maggio 2018 - 06:23

prova così

#include
static byte mymac[] = {0x86,0x86,0x86,0x86,0x86,0x86};
static byte myip[] = {192,168,1,101};
byte Ethernet::buffer[700];

void setup () {

Serial.begin(9600);
Serial.println(“PING Demo”);

if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println( “Failed to access Ethernet controller”);

if (!ether.staticSetup(myip))
Serial.println(“Failed to set IP address”);
}

void loop() {

ether.packetLoop(ether.packetReceive());
}

Reply
86ktm 3 maggio 2018 - 06:26

il tuo problema potrebbe essere indirizzo mac. alcuni router capiscono che non può esistere e non lo digeriscono.

Io collego CS su pin 8, e correggo la riga if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)

prova

Reply

Rispondi a Nik Cancel Reply

9 + 14 =