Introduction:
In this article, we will learn how to Control LED on the Internet using Arduino & ENC28J60 Ethernet Module to establish communication between computer to Arduino in a LAN or Wireless Network. We are interfacing the ENC28J60 Ethernet controller to Arduino so that our Arduino will be the one of a member of that network. Once it will be done the Arduino can Control LED on the Internet using Arduino & ENC28J60 Ethernet Module. Interfacing ENC28J60 Ethernet Module with Arduino and will further give us the freedom of using the internet on Arduino.
Check this previous project on ENC28J60: Interface ENC28J60 Ethernet Module with Arduino Webserver
ENC28J60 Ethernet Module:
Introduction to ENC28J60:
The ENC28J60 Ethernet Module utilizes the Microchip ENC28J60 Stand-Alone Ethernet Controller IC featuring a host of features to handle most of the network protocol requirements. The board connects directly to most microcontrollers with a standard SPI interface with a transfer speed of up to 20MHz.
This Ethernet Breakout-Module is the simplest way to add LAN connectivity to your microcontroller-based products and projects.
- Use this module to enable an Ethernet interface for your product. It works with any microcontroller operating at 3. 3V or 5V.
- This module works at 3.3V and is compatible with 5V interface lines.
- Use the SPI process to interface with it.
- Host web server, ping the module or add it to home automation via internet.
- The heart of this module is the ENC28J60 Ethernet controller from Microchip.
- The use of RJ45 with Integrated magnetics has made it possible to reduce the size of the board.
Features:
- Ethernet LAN Module for Arduino/AVR/LPC/STM3
- ENC28J60 Ethernet chips
- Can be easily mounted with the MCU
- Network Interface: HR911105A
- Supply Voltage: 3.3 V (5V Tolerant DIO)
- 25Mhz crystal oscillator
- Size (L x W x H): Approx. 2.3 x 1.3 x 0.7 inch / 58 x 34 x 17 mm
Block Diagram & Connections:
This is the simple block diagram that explains how an Arduino & ENC28J60 module can be interfaced with Router and Computer so that LED can be controlled for switching on & off.
The Router should be connected with LAN and should have multiple input-output ports. From the router, one ethernet cable is connected to Computer System and another ethernet cable should be connected to the ENC28J60 Module. Similarly, the ENC28J60 Module is connected to Arduino. The connection between Arduino & ENC28J60 is given below.
Control LED on the Internet using Arduino & ENC28J60 Ethernet Module:
- Download the Library for ENC28J60 from here: ENC28J60 Library
-
Copy the code from below and paste it to Arduino IDE.
-
Open Google Chrome or any other web browser and paste the code and hit enter:
- Copy the syntax code. Modify the syntax code by editing it with your IP adress number. Then hit enter:
-
Edit the code with ON & OFF command to switch on & switch off the LED:
Source Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
#include <EtherCard.h> #define STATIC 0 // set to 1 to disable DHCP (adjust myip/gwip values below) // mac address static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; // ethernet interface ip address static byte myip[] = { 192,168,0,200 }; // gateway ip address static byte gwip[] = { 192,168,0,1 }; // LED to control output int ledPin10 = 9; byte Ethernet::buffer[700]; char const page[] PROGMEM = “HTTP/1.0 503 Service Unavailable\r\n” “Content-Type: text/html\r\n” “Retry-After: 600\r\n” “\r\n” “<html>” “<head><title>” “Service Temporarily Unavailable” “</title></head>” “<body>” “<h3>This page is used behind the scene</h3>” “<p><em>” “Commands to control LED are transferred to Arduino.<br />” “The syntax: or ON” “</em></p>” “</body>” “</html>” ; void setup () { pinMode(ledPin10, OUTPUT); Serial.begin(9600); Serial.println(“Trying to get an IP…”); Serial.print(“MAC: “); for (byte i = 0; i < 6; ++i) { Serial.print(mymac[i], HEX); if (i < 5) Serial.print(‘:’); } Serial.println(); if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) { Serial.println( “Failed to access Ethernet controller”); } else { Serial.println(“Ethernet controller access: OK”); } ; #if STATIC Serial.println( “Getting static IP.”); if (!ether.staticSetup(myip, gwip)){ Serial.println( “could not get a static IP”); blinkLed(); // blink forever to indicate a problem } #else Serial.println(“Setting up DHCP”); if (!ether.dhcpSetup()){ Serial.println( “DHCP failed”); blinkLed(); // blink forever to indicate a problem } #endif ether.printIp(“My IP: “, ether.myip); ether.printIp(“Netmask: “, ether.netmask); ether.printIp(“GW IP: “, ether.gwip); ether.printIp(“DNS IP: “, ether.dnsip); } void loop () { word len = ether.packetReceive(); word pos = ether.packetLoop(len); // IF LED10=ON turn it ON if(strstr((char *)Ethernet::buffer + pos, “GET /?LED10=ON”) != 0) { Serial.println(“Received ON command”); digitalWrite(ledPin10, HIGH); } // IF LED10=OFF turn it OFF if(strstr((char *)Ethernet::buffer + pos, “GET /?LED10=OFF”) != 0) { Serial.println(“Received OFF command”); digitalWrite(ledPin10, LOW); } // show some data to the user memcpy_P(ether.tcpOffset(), page, sizeof page); ether.httpServerReply(sizeof page – 1); } void blinkLed(){ while (true){ digitalWrite(ledPin10, HIGH); delay(500); digitalWrite(ledPin10, LOW); delay(500); } } |
5 Comments
Hello,
Thank You very much for wonderful code.
Its working exactly as coded. But if i leave system idle for some time, i wont be able to access any more.
I have to make arduino reset and use.
What will be fix to solve this issue.
Thank You.
ethern
embeddedadventures.com is a fake web site. they are fraud. you pay but you can’t get your item.
error: expected ‘)’ before numeric constant
ether.httpServerReply(sizeof page – 1);
^
exit status 1
stray ‘\342’ in program
This is a problem with Unicode. Delete “-1” and reenter again “- 1”.