Introduction: Add Ethernet to Any Arduino Project for Less Than 10$
So you have a neat Arduino project going on. Wouldn't it be nice to add Internet connectivity and do it on the cheap as well? This Instructable will show you how to add Internet connectivity in the form of an Ethernet interface for a few dollars and in less than half an hour. More info at: http://hwstartup.wordpress.com/
Step 1: Order an ENC28j60 Ethernet Module on EBay
Apart from your Arduino, you need a read-made Ethernet module. You can easily get these on eBay for as low as 10$. Just search eBay for ENC28J60 module. In addition, you need to have a bit of electrical wire, a soldering iron and some soldering 'tin'.
Step 2: Wire Up the Ethernet Module
Now it's time to wire up the module. Either use a connector to put on the Ethernet module header or solder straight onto the pins (like I did). You will need just six wires, I used about 3-4 inches length, but this is not critical (as long as it's not a foot long).
Wire up as following (ENC = module side):
- ENC SO -> Arduino pin 12
- ENC SI -> Arduino pin 11
- ENC SCK -> Arduino pin 13
- ENC CS -> Arduino pin 8
- ENC VCC -> Arduino 3V3 pin
- ENC GND -> Arduino Gnd pin
Markings are on the module in white text. The result should look similar to the picture.
If you done this rigt, the LEDs on the module will light up when the Arduino is powered. Stick in an Ethernet cable and the LEDs on the Ethernet connector should light up, showing local Ethernet traffic.
Step 3: Arduino Code
Last step is to upload Arduino code to connect to the Internet. For the ENC28J60 chip/module, there are two Arduino libraries available: Ethershield (development has stopped) and Ethercard (the newest).
Load a Sketch that let's the Arduino act as a webserver, like this example:
// This is a demo of the RBBB running as webserver with the Ether Card
// 2010-05-28 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
#include <EtherCard.h>
// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 192,168,1,203 };
byte Ethernet::buffer[500];
BufferFiller bfill;
void setup () {
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println( "Failed to access Ethernet controller");
ether.staticSetup(myip);
}
static word homePage() {
long t = millis() / 1000;
word h = t / 3600;
byte m = (t / 60) % 60;
byte s = t % 60;
bfill = ether.tcpOffset();
bfill.emit_p(PSTR(
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n"
"\r\n"
"<meta http-equiv='refresh' content='1'/>"
"<title>RBBB server</title>"
"<h1>$D$D:$D$D:$D$D</h1>"),
h/10, h%10, m/10, m%10, s/10, s%10);
return bfill.position();
}
void loop () {
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if (pos) // check if valid tcp data is received
ether.httpServerReply(homePage()); // send web page data
}
With a bit of hacking, you can easily add code to display analog values read off the analog pins for instance.
Step 4: Done!!!
That's it, you just hooked up your Arduino to the Internet for less than 10$.
More interesting Arduino stuff at: http://hwstartup.wordpress.com
61 Comments
5 years ago
Hello how are you
I want to cut the network cable halfway down and connect it wirelessly
My question is, it did this with this module
If you have an experience with your friend.
This module can read the pins + rx, -rx, + tx, and -tx of the network port.
10 years ago on Introduction
I was expecting to see a level converter between the 5v arduino and 3v Ethernet enc28 board on the data lines. I've seen other DIY arduino Ethernet boards that use it. But yours indicates that is not necessary? Thanks.
Reply 5 years ago
The vital pins are 5V tolerant, according to the datasheet.
SI is 3V3, which is recognised by 5V inputs.
6 years ago
The CS pin can be made to be 8 if you wish: ether.begin(sizeof Ethernet::buffer, mymac, 8) is all that is required. Great tutorial tho..
6 years ago
Hi All!
New UIPEthernet release is available (2.0.3).
Added support for Intel ARC32, Nordic nRF51, and Teensy boards.
The Errata#12 corrected.
The Issues corrected.
You can download from: https://github.com/UIPEthernet/UIPEthernet/archive/v2.0.3.zip
and from: https://github.com/UIPEthernet/UIPEthernet/archive/master.zip
Best Regards
6 years ago
Hi All!
You can use UIPEthernet library for ENC28j60 arduinos (AVR,STM32F,ESP8266).
You can download this library from: https://github.com/UIPEthernet/UIPEthernet
Best Regards
Reply 6 years ago
Hi All!
Direct link to full repository compressed ZIP file:
https://github.com/UIPEthernet/UIPEthernet/archive...
Best regards
Reply 6 years ago
Hi All!
New version available:1.2.1
- Added Abstract Print class to MBED for full compatibility (Can use print, println with uip objects.)
- All examples working properly with MBED compiler.
Best regards
7 years ago
Nice tutorial. Thanks, and for those with problems.
ANSWER TO PROBLEM: (Sep 2016) Pin 10 for CS, NOT pin 8.
Reply 6 years ago
Thanks changing from pin 8 to 10 sorted out my issue... cheers!
7 years ago
Since the ethernet module itself has some programmability I can see it being an invaluable tool for a network technician... Maybe someone could write a snippet of code to blink the LEDs on a network switch in a user defined pattern (just in case several were in use at once)... a pattern different than normal network traffic (maybe blink the 10-100 LED)... then the tech could plug this into a network wall jack and then find the blinking switch port... power it with three AA cells...
Picture a building with 4 jacks per cubicle, 400 cubicles per floor, and 18 floors... now find the switch port for jack #3 in cubicle 307 on the 11th floor.... Yes, a consistent wiring pattern can find the patch panel, but then there is the tangle of patch cords. I'd pay $50 for this in a heartbeat!
7 years ago
Somebody knows how to fix those errors while compiling?:
"...Arduino\libraries\ethercard-master\EtherCard.h:252:41: warning: 'prog_char' is deprecated [-Wdeprecated-declarations]
void emit_raw_p (PGM_P p, uint16_t n) { memcpy_P(ptr, p, n); ptr += n; }
^"
I get lots of those.
Same thing when trying to use UIPEthernet
7 years ago
I am using UIPEthernet library, connection is same except using arduino pin 10 instead of 8.
7 years ago
Not working for me, I guess wiring is correct because it works with Ethercard library. The flashlight is blinking, but I cannot ping it. Any idea ?
Reply 7 years ago
Which library are you using then? Ethercard is the only use that uses pin 8 (for CS). If you're using Ethernet or UIPEthernet you will need to move it to pin 10.
7 years ago on Introduction
8 years ago on Step 4
Can this be used as a replacement of the Ethernet Shield?
Reply 8 years ago on Step 4
Yes indeed.
Reply 8 years ago
Could I connect with just 4 wires?? (I mean, I have a USB Ethernet adapter... Is it possible to use for this?)
Reply 8 years ago on Step 4
Thank you, you just helped me solve something.