Warning: session_start(): open(/var/lib/php5/sess_895b065f99eb2a9f96cfc922878015b5, O_RDWR) failed: No space left on device (28) in /home/mhd-01/www.lucadentella.it/htdocs/blog/wp-content/plugins/adsense-extreme/adsensextremeopt.php on line 349
lucadentella.it – enc28J60 and Arduino (1)

enc28J60 and Arduino (1)

luca 12/02/2012 107

With the following post, I’m going to start a tutorial about how to use enc28j60 Ethernet controller with Arduino.

Introduction

Arduino’s official Ethernet shield is based on Wiznet W5100 microchip and Ethernet libraries in Arduino’s IDE also works for that chip: http://arduino.cc/en/Reference/Ethernet

A widely used Ethernet controller is Microchip’s enc28j60: in Internet you can find shields or breakout boards for that chip, usually cheaper than the official one.

Testato correctly suggested me to add a note about the differences between the two controller: the main differece, that surely was the reason why Arduino team chose W5100 chip, is that this controller implements in hardware all the TCP/IP stack, saving MCU resources.

Library

Some companies and hobbists developed Arduino libraries for Microchip’s controller; I’m going to use for these tutorials the EtherCard library by JeeLabs Café.

JeeLabs published its library on GitHub; first download the latest version in a ZIP file:

Open the main folder where Arduino’s IDE is installed (usually C:\arduino-1.0) and decompress the downloaded file into libraries subfolder. In ZIP archive, all the library files are in a folder named “jcw-ethercard-xxx“: rename that folder EtherCard:

Run IDE and check if the library is available:

Network parameters

Before connecting Ethernet shield to the net, you need some parameters:

  • MAC address, is a 48bit number that univocally identify each device in the net. Every company that produces network devices owns a code (OUI) that rappresents the address’ first 24bits;
  • IP address, is a 32bit number (IPv4) that identify the device in the local network;
  • Subnet mask is a 32bit number that allows devices to know if another device belongs to the same local network;
  • (usually) gateway is the IP address assigned to a device (router…) that allows to reach devices in different networks.

You need to choose a MAC address not alredy used in your network… in the examples we usually choose MAC addresses with a not already assigned organization code (es. DD-DD-DD).

IP parameters (address, subnet, gateway) have to be consistent with the ones configured to other devices in your local network: an unique IP address and the same subnet mask and gateway.

Sometimes a DHCP server is available, that automatically configures new devices in the network: in a next example I’m going to show how to use this with Arduino.

In the netxt page, you’ll write your first network sketch

Pages: 1 2

107 Comments »

  1. Mauro 14/02/2012 at 08:36 - Reply

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

  2. Roby 14/02/2012 at 10:57 - Reply

    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

  3. luca 14/02/2012 at 19:48 - Reply

    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 ;)

  4. mario 01/03/2012 at 19:14 - Reply

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

    • luca 01/03/2012 at 20:30 - Reply

      eBay…

  5. mario 01/03/2012 at 20:59 - Reply

    Ok cerco anch’io Grazie

  6. Axel 08/03/2012 at 17:24 - Reply

    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.

    • luca 08/03/2012 at 20:40 - Reply

      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.

  7. Axel 09/03/2012 at 21:58 - Reply

    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

  8. Rott 10/03/2012 at 23:27 - Reply

    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.

    • luca 11/03/2012 at 20:26 - Reply

      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?

      • Rott 12/03/2012 at 15:10 - Reply

        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

  9. Rott 12/03/2012 at 18:48 - Reply

    ho provato questo script per testare la scheda :

    #include

    #define REQUEST_RATE 5000 // milliseconds

    // ethernet interface mac address
    static byte mymac[] = { 0×74,0×69,0×69,0x2D,0×30,0×31 };
    // 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?

    • luca 12/03/2012 at 19:41 - Reply

      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.

    • Giovanni 23/11/2012 at 22:25 - Reply

      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

      • luca 23/11/2012 at 22:57 - Reply

        Ciao Giovanni,

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

        • Giovanni 24/11/2012 at 19:28 - Reply

          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

          • luca 26/11/2012 at 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

  10. Rott 12/03/2012 at 21:22 - Reply

    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

  11. mario 16/03/2012 at 12:06 - Reply

    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

  12. Matteo 14/06/2012 at 07:04 - Reply

    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

  13. Leonid 03/07/2012 at 11:19 - Reply
    • luca 13/07/2012 at 19:29 - Reply

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

  14. Jim 22/07/2012 at 19:30 - Reply

    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

    • luca 02/08/2012 at 08:35 - Reply

      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!

  15. lazyboy 28/07/2012 at 13:58 - Reply

    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

    • luca 02/08/2012 at 08:38 - Reply

      Hi!

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

  16. Frank 13/09/2012 at 19:24 - Reply

    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

    • luca 22/09/2012 at 14:30 - Reply

      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

  17. Marco 30/11/2012 at 19:29 - Reply

    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

    • luca 30/11/2012 at 20:05 - Reply

      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?

  18. Marco 01/12/2012 at 01:24 - Reply

    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

  19. Marco 01/12/2012 at 02:37 - Reply

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

    • luca 01/12/2012 at 09:40 - Reply

      ottimo!

  20. Usama 03/02/2013 at 16:22 - Reply

    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

    • luca 03/02/2013 at 21:24 - Reply

      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

      • Usama 04/02/2013 at 20:57 - Reply

        Hi Luca,

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

        • luca 04/02/2013 at 21:10 - Reply

          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…

          • Usama 04/02/2013 at 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

  21. Lucasz 03/02/2013 at 17:39 - Reply

    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?

    • luca 04/02/2013 at 17:03 - Reply

      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

  22. Istrice 14/02/2013 at 09:35 - Reply

    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

  23. Istrice 14/02/2013 at 09:45 - Reply

    …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…
    .

  24. Altis 25/02/2013 at 10:07 - Reply

    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..

  25. Renato Aloi 21/03/2013 at 20:30 - Reply

    Hi!

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

    Thanks,
    Renato Aloi

    • luca 21/03/2013 at 20:33 - Reply

      Yes, the limit is about 500 bytes of payload.

  26. hernan 21/03/2013 at 22:00 - Reply

    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.

    • luca 21/03/2013 at 22:50 - Reply

      ciao, stai usando esattamente lo sketch del tutorial?

  27. hernan 22/03/2013 at 11:12 - Reply

    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.

  28. lisergio 09/04/2013 at 18:07 - Reply

    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,0×00,0×00,0×01};
    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 )…

    • luca 12/04/2013 at 21:28 - Reply

      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?

  29. Fabio Pulzi 12/04/2013 at 01:45 - Reply

    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 ?

    • luca 12/04/2013 at 21:24 - Reply

      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!

  30. Arednas 26/05/2013 at 12:54 - Reply

    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

    • luca 28/05/2013 at 16:33 - Reply

      Hi Arednas,

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

  31. Raghavendra 07/06/2013 at 05:26 - Reply

    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

    • luca 08/06/2013 at 12:36 - Reply

      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)

  32. Raghavendra 08/06/2013 at 17:36 - Reply

    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 !

    • luca 10/06/2013 at 19:48 - Reply

      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?

  33. claudio 10/06/2013 at 17:27 - Reply

    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?

    • luca 10/06/2013 at 19:46 - Reply

      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…

  34. claudio 11/06/2013 at 11:13 - Reply

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

    ‘Destination Host Unreachable’

    • luca 13/06/2013 at 11:35 - Reply

      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?

  35. lucky 17/06/2013 at 13:59 - Reply

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

    Grazie!

    • luca 17/06/2013 at 21:11 - Reply

      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).

  36. Kim Jessen 05/08/2013 at 14:49 - Reply

    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.

    • luca 06/08/2013 at 14:47 - Reply

      Hi Kim,

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

  37. Kim Jessen 08/08/2013 at 12:01 - Reply

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

  38. Kim Jessen 11/08/2013 at 10:57 - Reply

    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.

  39. Rob 02/10/2013 at 20:12 - Reply

    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.

    • luca 03/10/2013 at 19:08 - Reply

      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)

      • Rob 04/10/2013 at 21:15 - Reply

        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!!!!!!

  40. marchx 24/11/2013 at 16:57 - Reply

    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?

    • luca 27/11/2013 at 14:32 - Reply

      Ciao

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

  41. Frank Bretland 25/11/2013 at 21:19 - Reply

    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

    • luca 26/11/2013 at 11:39 - Reply

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

  42. marchx 01/12/2013 at 22:35 - Reply

    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

    • luca 02/12/2013 at 09:38 - Reply

      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.

  43. marchx 03/12/2013 at 23:09 - Reply

    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

    • luca 04/12/2013 at 08:59 - Reply

      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

  44. marchx 08/12/2013 at 14:25 - Reply

    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.

    • luca 16/12/2013 at 14:18 - Reply

      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?

  45. marchx 17/12/2013 at 22:18 - Reply

    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?

  46. marchx 21/12/2013 at 16:05 - Reply

    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?

    • luca 23/12/2013 at 08:43 - Reply

      ciao

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

  47. marchx 01/01/2014 at 23:06 - Reply

    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.

    • luca 14/01/2014 at 19:44 - Reply

      Ciao

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

  48. Valerio B. 08/02/2014 at 18:24 - Reply

    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.

    • luca 12/02/2014 at 17:09 - Reply

      ciao Valerio,

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

      • Valerio B. 14/02/2014 at 16:33 - Reply

        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

  49. Edward Tang 20/02/2014 at 16:22 - Reply

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

  50. Valerio B. 07/03/2014 at 18:35 - Reply

    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.

  51. Víctor Calderón 10/03/2014 at 17:50 - Reply

    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,

    • luca 15/03/2014 at 10:42 - Reply

      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?

      • Victor Calderón 15/03/2014 at 17:51 - Reply

        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

        • luca 22/03/2014 at 15:04 - Reply

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

  52. Gianluca 04/04/2014 at 13:55 - Reply

    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

    • luca 13/04/2014 at 19:38 - Reply

      Ciao Gianluca: quale shield stai usando?

  53. Rodrigo 08/04/2014 at 23:24 - Reply

    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

    • luca 13/04/2014 at 19:33 - Reply

      Hi Rodrigo,

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

  54. enrico 29/04/2014 at 18:45 - Reply

    caro luca.. lo sketch non e completo…

    • luca 29/04/2014 at 20:58 - Reply

      ciao enrico, in che senso? compila, funziona…

Leave A Response »


Warning: Unknown: open(/var/lib/php5/sess_895b065f99eb2a9f96cfc922878015b5, O_RDWR) failed: No space left on device (28) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php5) in Unknown on line 0