February 9, 2013

Getting Arduino Online with an ENC28J60

After learning that an ethernet shield could be purchased for Arduino for under $10, I knew it was time to take my Arduino online. If this is your first time hearing that a $10 or less shield is available I encourage you to search you favorite search engine for the ENC28J60. On Ebay I picked one up for $5 from Hong Kong. But lets get into the meat and potatoes of how to connect one of these boards to and Arduino and start using it.


  1. Download the Ethercard library from
    https://github.com/jcw/ethercard/blob/master/README.md. The current version available supports the Arduino v1+ IDE and is compatible with DHCP. The link provided points to the download page with instructions on installing the library into your Arduino IDE.
  2. Physically wire the ENC28J60 board to the Arduino using the pinouts below:
    • ENC -> Arduino
      • VCC -> 3.3V
      • GND -> GND
      • SCK -> Pin 13
      • SO -> Pin 12
      • SI – Pin 11
      • CS -> Pin 8
    • I cut down an old Parallel ATA (PATA) cable (which is a Insulation Displacement Contact (IDC) connector) to plug into my ENC28J60’s SPI header
    • Pinout Diagrams
      • 10th wire -> CLK   | INT  <- 9th wire
      • 8th wire ->   WOL | SO    <- 7th wire
      • 6th wire ->    SI       | SCK  <- 5th wire
      • 4th wire ->    CS      | RST  <- 3rd wire
      • 2nd wire ->   VCC   | GN    <- 1st wire (starting from bottom of PATA cable)

      Arduino ENC28J60 SPI Pinout

      Parallel ATA Cable (PATA) & Related SPI Connection on ENC
      (Check to confirm your ENC’s SPI matches)
      PATA Wire SPI Left SPI Right PATA Wire
      10th CLK INT 9th
      8th WOL SO 7th
      6th SI SCK 5th
      4th CS RST 3rd
      2nd VCC GND 1st
      The PATA cable count starts in the lower
      right-hand corner of the SPI connector.

      Arduino with ENC28J60

      ENC -> PATA -> Arduino Pinout
      ENC PATA Arduino
      VCC wire 2 3.3v
      GND wire 1 GND
      SCK wire 5 Pin 13
      SO wire 7 Pin 12
      SI wire 6 Pin 11
      CS wire 4 Pin 8


  3. Download BackSoon.ino from
  4. Open backSoon.ino in the Arduino IDE . Confirm the myip, gwip, and mymac variables are correct in the sketch. These are the static network settings that will be used if DHCP fails.
    • myip = This is the Arduino’s unique ip address. If there is another device on the network with the same IP, you will have problems.
    • gwip = This is your gateway’s ip address.
    • mymac = This is the unique MAC address for the Arduino. If there is another device on the network with the same MAC, you will have problems.
  5. Plug your Arduino board into you computer via USB (to power and program).
  6. Upload the backSoon sketch to Arduino.
  7. [OPTIONAL] Open up your network’s router to the screen where you can see clients connected to the router.
  8. Open up Arduino’s Serial Monitor. This will allow you to see what Arduino is doing.
  9. Plug an ethernet cable into the ENC28J60 and look for the ENC/Arduino to show up on your router.
  10. Reset Arduino with the physical button.
  11. Patiently wait for the Serial Monitor to display the Arduino’s IP address. Within about 10 seconds you should see something like the following:
  12. Open your web browser of choice, surf to that IP, and rejoice when you see the following:
    Arduino OnlineIn your router’s DHCP administration panel you should see an entry for the Arduino. Router Arduino DHCP Entry

Connection Loss After Extended Periods?

If you are having issues with the ENC28J60 losing connection, try adding a heat-sink. See the notes below from Brad on October 10,2013 regarding his experience.



77 responses to “Getting Arduino Online with an ENC28J60”

  1. Hi Nathan

    thanks for linking, you can read my tutorial in English using the following link:


  2. Nathan Hein says:

    Thanks Luca for the English link to your site.

  3. Robert says:

    Hi, I have similar board, I wired it with arduino according to your pin out. But only red led on board is lighting. Green and yellow status led on RJ45 are off. Connected pc shows, that cable is disconnected. What is wrong ?

  4. Nathan says:

    Are you plugging the ethernet cable directly from your pc to the Arduino/ENC28J60? If so is you computer providing any kind of internet sharing service (name of this feature depend on your OS)?

  5. Robert says:

    Hi, problem is solved 🙂
    I have more pins on my board, I have VCC and 3v3. While VCC was connected with 3v3 on Arduino, it was not working. Then I reconnect 3v3 with 3v3 on Arduino side and it works !

  6. Nathan says:

    Awesome Robert. Thank you for the follow-up that will likely help others in the future!

  7. […] It’s worth mentioning at this point that I know almost nothing about electronics, how to read diagrams, or wire things up. Luckily for me this Ethernet Module is fairly popular, well supported, and I managed to find a a great blog post that’s only a few days old on how to do exactly what I was trying to do: http://nathanhein.com/2013/02/getting-arduino-online-with-an-enc28j60/ […]

  8. sandeep says:

    what are wol , sck ,si,so in arduino?

  9. Nathan says:

    The diagram above shows the ENC-Arduino pins.

    Arduino Pinout
    ENC PATA Arduino
    VCC wire 2 3.3v
    GND wire 1 GND
    SCK wire 5 Pin 13
    SO wire 7 Pin 12
    SI wire 6 Pin 11
    CS wire 4 Pin 8

  10. TOM says:

    The libuary doesn’t work on Arduino IDE below 1.00.

  11. Nathan says:

    Thank you for letting us know Tom. I am using the 1.x+ IDE.

  12. Scott says:

    This works with a Mega2650 if you override the CS pin in the sketch. The pin mapping is –
    ENC 2650
    SO 50 (MISO)
    SI 51 (MOSI)
    CLK 52 (SCK)
    CS 53 (SS)

    In the sketch you need to override the begin with ether.begin(sizeof Ethernet::buffer, mymac, 53) (note the 53) because the default is for pin 8 on a UNO. If you use another pin for the CS you will need to manually set pin 53 as an output or SPI doesn’t work.

    This library is a great start with the ENC28J60 which I’ve been using for the past couple of years on other AVR, Zilog and MicroChip projects.

  13. Russ says:

    Thanks to the excellent posts and article I’ve managed to get my Mega2650 working with the ENC28J60 card i bought. But I can only barely get the examples to work, and there isn’t really enough info in the library folder to get me any further.

    I’m trying to get this to listen for instructions from my android tablet. But first I need to figure out how to actually receive the request data being sent and process it!

    Anyone have suggestions/documents/etc that might help me out? I’m not terribly advanced with this stuff yet, but I’m eager to learn.

    Once I get that figured out, i’ll work on getting the interface setup on the tablet to send the commands. Thanks in advance!

  14. moataz says:

    i have a problem can’t find the ENC28J60 MAC address and its IP address, how can i get them ??
    thanks in advance

  15. sempol says:

    Did as it’s said here, but in the Serial Monitor there are something like “ÕzÅ-ÌÃ?AÈÐ3 A” instead of the IP-adress

  16. Nathan says:

    Is all of the text in the serial monitor like “ÕzÅ-ÌÃ?AÈÐ3 A”? If so the baud rate of the serial monitor and the baud rate set in the Arduino sketch likely do not match. Ensure you baud rates match.

  17. Nathan says:

    You set the MAC address and the IP address in your Arduino sketch. Look for the comments in the sketch labeled “// ethernet interface ip address” &
    “// ethernet mac address – must be unique on your network”.

  18. Duality says:

    Hi !
    Got it working thanks 🙂

    Can’t get it to work when I connect the ether-card to 3.3v, it works when I connect it to 5V and it gets a little hot …
    but it works, is it supposed to work on 3.3v ?


  19. Nathan says:

    I am not really sure. If you find out please post back here for others though. 🙂

  20. Matt says:

    Hi I just get a ‘backSoon’ message in serial from my Uno and nothing more after waiting 30 secs +

  21. Snowdog says:

    I can’t get mine working 🙁

    Failed to access Ethernet controller
    DHCP failed

    I’ve rechecked the wiring and it looks like it’s okay, any ideas ?

  22. Wes says:

    @Snowdog, if you have an Ethernet HUB (not a switch) lying around, you can try plugging your Arduino and your computer into the hub, set the Arduino for half-duplex operation, and capture what’s happening on the wire with an ethernet capture program like Wireshark.

  23. prasad says:

    on serial monitor only shows [backSoon] and nothing else is happen why it so

  24. Nathan says:


    have you tried the recommendation from Wes’ comments above?

  25. Kim Jessen says:

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

  26. Andrew Ginty says:

    Thanks for the info Nathan.

    I’ve managed to wire it up following your instructions and get the test sketch working, however I had some trouble due to a forward compatibility issue with the compiler.

    I was trying to compile “BackSoon.ino” using a recent version of Arduino (I’m using 1.0.3 on a Linux Mint 14 machine) kept getting compilation errors – to do with needing a “const declaration”.

    Just to save anyone the hour I spent googling it … there is a fix, which requires to manually edits of the “EtherCard” libraries (all .h and .cpp files listed). There’s probably a much more elegant way of doing this, but I’m too lazy to find it.

    Here’s where the code fix lives: https://github.com/jcw/ethercard/pull/91/files.

    Once I had that fixed, it works.


  27. Nathan says:

    Thanks Andrew for the heads up and the info!

  28. Lazarus Wald says:

    Nice write up about the low cost and low energy consumption ENC28J60. Mine also was very unreliable and unstable (rarely would send packages over the network) whilst connected to the 3.3volts pin, once the voltage source was swapped to the 5.5volts pin in the Arduino (Mega) it seems to work fine and flawlessly.

  29. johndoe says:

    do not get it! get one based on wiznet chip – the one that works with original arduino library… you’ll just waste time with this stuff and the library for it I wish I read about them first

  30. Nathan says:


    Many people like this board because it works great, is dirt cheap, and is easy to setup. A good knowledge of computer networking along with Arduino knowledge is needed for setting this up.

    Use what works best for you. 🙂

  31. Aby says:

    Hi, this little board is only for Arduino or I can use it with PIC? (16F887)


  32. Nathan says:

    I am not sure. Maybe someone else can respond and let us know.

  33. biren says:

    i am using your code but this will hang after few time. how we can resat Ethernet board.

  34. Nathan says:

    To reset the ethernet board I always just reset Arduino.

    Side note, I am not the author of the library or of backSoon.ino. 🙂

  35. Maybe you’d like to check out my new library ‘UIPEthernet’, that provides the stock Ethernet-libraries interfaces EthernetClient, EthernetServer and EthernetUDP for ENC28J60. It supports multiple persistent tcp-connections that stream in both directions, dhcp, dns, udp while using only 200-400Bytes of RAM. It’s build around Adam Dunkels uIP-stack and makes extensive use of ENC28J60 internal ram. It runs the stock Ethernet-librariy examples without modification besides changing the include of ‘Ethernet.h’ to ‘UIPEthernet.h’


    have fun!


  36. Brad says:

    Thanks Nathan for starting this desiccation, it has been a great help to me getting started with the ENC28J60 and Mega2650 boards. Also thanks to Scott for his info on the correct pins on the Mega2650 board.

    I am just including a chart I made for the pins and the code modification I made for the Mega2650 board. Note I included the UNO code but remarked it out.

    UNO Mega2650
    ENC28J60 Wire PIN PIN
    VCC 3.3v 2 3.3V 3.3V
    Reset NOT USED 3
    CS 4 8 53
    SCK 5 13 52
    SI 6 11 51
    SO 7 12 50

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

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

  37. Nathan says:

    Awesome Brad. Thank you for contributing.

  38. Brad says:

    A wier and pin layout for the UNO and Mega2650 boards.

    . . . . . . . . . . . . . . UNO . Mega2650
    ENC28J60. . . . . Wire. . . PIN . .PIN
    GND. . . . . . .1. . . . . GND……GND
    VCC-3.3v……..2. . . . . 3.3V…..3.3V
    Reset NOT USED..3
    CS. . . . . . . 4. . . . . 8 . . . . 53
    SCK. . . . . . .5. . . . . 13. . . . 52
    SI. . . . . . . 6. . . . . 11. . . . 51
    SO. . . . . . . 7. . . . . 12. . . . 50

  39. Brad says:

    I found that I lost connection with my network after a few minutes and the ENC28J60 chip was warm so I put a stack of pennies on the chip and held it there with a rubber band. It has been working fine for 4 hours with continues activity. I will try a ¾ “ long ½” aluminum square tubing as a heat sink. I will report back the results after some time.

  40. Brad says:

    As promised I am reporting back about the use of a heat sink on the ENC28J60 chip. We are using a 651-b heat sink (Digi Key part 345-1054-nd) attached directly on the ENC28J60 chip with 3M heat transfer tape. The unit is in a small enclosure with relatively little ventilation and has been running perfectly for eight days. If we experience any new problems we will let you know.

  41. Nathan says:

    Thank you for reporting back Brad. I am curious to experiment with a heat sink for my ENC28J60 to see if this is related to issues I was having logging information from reed switch.

  42. Roy says:

    Hi Nathan,

    Thank you so much for this! Is there a way to change the IP address using the web interface?

    Thanks again!

  43. Andrew says:


    I’m trying to get my webserver to work, but I have a problem with the code.
    It seems that I cannot display CSS buttons. What happens is that the server wont display anything if I add any CSS buttons but if I delete the style of the buttons everything works.
    Here is part of my code:

    byte Ethernet::buffer[3000];

    PROGMEM char page[] =
    “h1 {text-align: center}”
    “h2 {text-align: center}”
    “class {text-align: center}”
    “.button_on {”
    “-moz-box-shadow:inset 0px 1px 0px 0px #caefab;”
    “-webkit-box-shadow:inset 0px 1px 0px 0px #caefab;”
    “box-shadow:inset 0px 1px 0px 0px #caefab;”
    “background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #80c941), color-stop(1, #5cb811) );”
    “background:-moz-linear-gradient( center top, #80c941 5%, #5cb811 100% );”
    “filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=’#80c941′, endColorstr=’#5cb811′);”
    “border:2px solid #268a16;”
    “font-family:Comic Sans MS;”
    “text-shadow:1px 1px 0px #aade7c;”
    “Web Server Controller.”
    “This server is currently learning new stuff, so try again later.”

    “Living Lights -”


    Can somebody point me in the right direction? I am working with atmega 2560 and a ethernet card.

    Thank you.

  44. Andrew says:

    Hmm it looks like not every part of the code made it… The html parts were replaced by “”.

  45. Rajasekharan.N says:

    Thanks Nathan for the guide. I could set it up !! 🙂

  46. Miro says:

    My serial monitor display


    but at Explorer at

    This service is currently unavailable

    The main server is currently off-line.
    Please try again later.

    Some help …

  47. Nathan says:

    Please provide a screenshot.

  48. Patrick says:

    Hi, will this allow the arduino to connect to https (SSL-secured) sites too?

  49. mithat says:

    My serial monitor display


    but at Explorer at

    “This service is currently unavailable

    The main server is currently off-line.
    Please try again later.”

    :((… what can i do

  50. Rick says:

    Hi there,
    It works with static IP address,
    but I can’t use DHCP,

    How can I use DHCP on windows 7 ?
    I connect enc28j60 with lan cable to my computer directly…


  51. hg says:

    Use cross cable.sls

  52. ching says:

    Miro & Mitat,

    The message you are seeing is the normal webpage as defined in the code:

    char page[] PROGMEM =
    “HTTP/1.0 503 Service Unavailable\r\n”
    “Content-Type: text/html\r\n”
    “Retry-After: 600\r\n”
    “Service Temporarily Unavailable”
    “This service is currently unavailable”

    “The main server is currently off-line.”
    “Please try again later.”


  53. Nathan says:

    Thank you Ching!

  54. ben says:

    Is that a standard Arduino in the picture? Or an Arduino Uno / Arduino Leonardo?

    Any thoughts on using the parallel interface of these Microchip Ethernet controllers?

    Dangerous Prototypes has a breakout for the ENC424J600 but not sure if it’s worth the trouble if the performance upgrade is marginal.

    Also, I haven’t looked through the EtherCard library, or how it differs from Microchip’s TCP/IP stack, but I imagine the jeelabs library is only designed for the ENC28J60 / SPI. Is this correct?

  55. Nathan says:

    It is an Uno type Arduino. It is actually called a Freeduino.

    I have not tried a parallel interface myself. If you give it a try please do let us know how it works out.

    The Jeelabs library was the only one I could find for the ENC28J60 / SPI at the time of writing this article. I believe the ENC28J60 / SPI has gotten a lot more popular since I wrote this article so there may be other options these days.

  56. Vassilis says:

    Good page indeed… I would like to know if anyone in here managed to send data to Thingspeak with the ethercard library. Unfortunately they only give sample for the wiznet’s ethernet library and I haven’t manage to make it work with ethercard so far. Any ideas plz?

  57. Eddie says:

    there is some problem i m facing. When i connect my Ethernet module to LAN cable, after executing 4-5 command, its gets disconnected and stop pinging my ip address. When I switched OFF and then ON the device, it works normally. Can anyone tell me how can I solve this problem??

  58. pklawit says:


    I’m just starting with Arduino and connecting it to the network, but I have one comment to all these people reporting the overheating issue of ENC28J60 chip.

    There is obvious mismatch between the voltage levels – the ENC28J60 board is being powered (and this is correct) from 3.3V but the Arduino has 5V logic and thus all the I/O pins have 5V when HIGH.
    So, I think that the ENC28J60 should not be connected directly with the Arduino, but via the level-shifter board.


  59. Zoka says:

    according to ENC28J60 datasheet, all input pins are 5V tolerant.

  60. Duncan says:

    I’m also having trouble with these boards.

    Running a simple test sketch, it eventually connects then disconnects correctly, fails to connect a few times, connects again, disconnects and then locks up the Arduino is typical, but not consistent.

    One thing I did notice is that the Ethernet connector is marked “HR911105A”. This is presumably a Chinese ‘clone’ of a “MagJack”.

    I can locate info on “HR91105A” (though not enough to determine if the “5” might indicate 5V), but not with the extra “1” included in the part number.

    Are routers expecting 5V signals perhaps?

    I know nothing about all this Ethernet stuff but desperately want to get an Arduino online from the limited financial resources of a pension…

  61. Duncan says:

    I forgot to say, I’m running the board from the Arduino’s 3.3V with 5V logic (i.e. not using level-shifters) and using the UIPEthernet library as it’s a ‘drop in replacement’ for the Ethernet library used by the Wizznet chip (aledgedly).

  62. Chris says:

    Hi Nathan, thanks for the writeup.

    One note though:
    I think the term PATA (parallel AT attachment) might be a little confusing, PATA is for attaching things to PC “Advanced Technology” computers (vs. say PC XT or eXtended Technology). IDE hard drives (which are PATA) also use a similar connector, but this type is known as an Insulation Displacement Contact (IDC) connector. I think that might be a better term to use.

  63. Duncan says:

    I now have the ENC28J60 running flawlessly 100% reliable.

    The problem was actually very simple – the Ethernet card’s peak current consumption can be too much for the 3.3V regulator on the Arduino and cause it to shut down (even more of a problem with some WiFi modules).

    I’m now running it from a running a separate 3.3V regulator fed from the DC-Jack using the RAW pin of the Arduino (to avoid the possibility of current limitation on the USB 5V supply) and it is now a very happy module with a chip that runs at completely normal temperature…

  64. Duncan says:


    I forgot to say that I am currently NOT level-shifting the logic signals and it seems fine with that.

    When I leave prototype stage, I’ll probably add level-shifting but that will be primarily because of sensors – the ENC28J60 does indeed seem to be 5V-tolerant.

  65. I have done much work with the Wiznet 5100 Ethernet shields, and discovered this part when looking at one of my favorite U.S.A. sellers. They have it for $5.79 with free shipping from St. Louis.


    I wondered if there was software support for it. I will check your library. The Arduino Ethernet has a flaw with multiple incoming socket connections:


    I look forward to learning about this item. The Wizpro 5100 shileds (clones) are $11.49 currently, so this item at half price would be a nice savings.


  66. mou says:

    hey please can anyone help me …back soon alone is visible in the serial monitor.then if I try to open the webpage with the ip address it’s not coming..pls help

  67. Prashant says:

    I’ve tried enc28j60 with Induino-R4 (Arduino Uno clone I believe). I have Leoxys router. When I tried running program, it gives me error saing “Failed to access Ethernet controller”.
    I checked and re-checked my connections and used print statements to print MAC, IP (I’m not using DHCP) & Gateway all comes fine – but still it fails with above message.
    Please need help to identify why the ether.begin fails (and resultantly throws above msg).

  68. Prashant says:

    With Induino-R4, I used pin 10 instead of pin 8 and also in backsoon.ino changed in ether.begin statement to add this pin like ether.begin(sizeof Ethernet::buffer, mymac, 10). Viola…. it worked like a charm. Thanks very much for the guidance through this article.

  69. Fernando says:

    Thank you Nathan for posting this up. It worked on my first try. Awesome!!!

  70. Nermin Ziga says:


    I started pinging interface, it works without any lost packet. Then I open browser ones – received content OK! When I tried open second, third time content didn’t show up, and I lost connection at my ping window. Obviously app crashed. Anyone with similar break? Memory problem? Is it possible to have kind of debug mode -> serial out?

  71. Naveen prasath says:

    i m using ENC28j60 and i m using uip library
    i use client.print() to put my html code in arduino
    the problem is that the module stops responding when the program lines reaches 13
    it works fine till 12 lines but when i write the very next line and upload the code, it does not respond when it is pinged
    pls help

  72. Muhammed Faheem says:

    hey thanks Nathan:) I was trying to find the solution and ur website helped me get it done.

    keep it up.

  73. Nermin ZIGA says:

    Hi there,
    I strongly recommend to attach external power supply (MB102) because Arduino boards can’t supply enough current to ethernet module for reliable work. Found it hard way. Silly me didn’t check specification before deploy.Enjoy

  74. Amol Nardelwar says:

    I am facing the problem with library. I have installed it but while compiling the programm backsoon i got an error massage saying that,
    fatal error: avr/eeprom.h :No such file or directory



    compilation terminated.

    how to fix it ? do i need an updated version of library or is there any file missing in ethercard.h library ?

    pls help

  75. Kai says:


    Seen that this thread started years ago, I hope somebody (knowledgable) still monitors it…
    I too have a ENC28J60 Module attached to my arduino (module is a 12-pin version with 5V pin, which I use).
    I have cabled up the two boards as stated in all the examples (using a NANO-tried with leonardo too – didn’t work either).
    I have the red D1-LED on the ENC-Module constant red.
    I have link (Module is directly attached to a second eth-i/f of my linux-box – ethtool onlinux shows ‘up’ with 10Mbps / half duplex.
    Green LED (link?) in RJ45-jacks is constant green and yellow is blinking, i.e. module ‘sees’ activity.
    Only when I try to ping the module from my linux, the device isn’t responding to ARP-requests. Opening the serial monitor, I see:failed to access ethernet controller.
    After reading about power supply problems directly from arduino, I switched to external 5V PSU – didn’t help. Rechecked and even replaced all cables between arduino and ENC – still no luck.
    Is there any way to further debug this or should I simply call the ENC28J60 a DOA and order another one? Although they are rather cheep, I’d really like to know, how to further debug this


  76. Nathan says:

    Monitor, yes. I would recommend trying another ENC28J60 to confirm if the one you have is dead.

  77. Kai says:

    OK – already ordered another one. Will keep you posted. Thanks for the quick reply.

Leave a Reply

Your email address will not be published. Required fields are marked *