How to Connect the ENC28J60 Ethernet Module to an Arduino Development Board

Are you interested in Ethernet communication? In this post, we will explore the world of Ethernet communication using the ENC28J60 module and the Arduino development board. Whether you are a beginner or an experienced Arduino enthusiast, this will be helpful for you. In this article, we will learn how to connect the ENC28J60 module and provide step-by-step instructions and key points. Through simple explanations and practical examples, we will learn how to establish a TCP/IP connection, send and receive data, and create our own web server using the ENC28J60 module.

Required Components

● Arduino Micro Development Board

● ENC28J60 Ethernet Network Module

● Male/Female Jumper Wires

Pin Configuration of the ENC28J60 Ethernet Module

This module is equipped with the ENC28J60 Ethernet network controller, supporting various network protocols. With its SPI interface, it can easily communicate with microcontrollers. The maximum data transfer rate of this chip is 10Mbps, which is sufficient for many applications. The module has 10 pins, as shown in the figure below.

How to Connect the ENC28J60 Ethernet Module to an Arduino Development Board

Hardware Connections to Create a Web Server with Arduino and ENC28J60 Module

Connect the various components as shown, linking the SPI pins of the Arduino development board to the SPI pins of the Ethernet module.

Note: The power supply voltage for the ENC28J60 Ethernet module must be 3.3V. Higher voltages may burn out the chip.

How to Connect the ENC28J60 Ethernet Module to an Arduino Development Board

Web Server Code

Before we start writing the code, first download the EthernetENC library from this link and install it in the Arduino software.

Now let’s begin writing the web server code. With this code, the Arduino reads 6 analog inputs and displays them in a specific format on the web server page.

/*  modified on OCT 23, 2023  Modified by MajidMerati from Arduino Examples*/
#include <SPI.h>
#include <EthernetENC.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 6, 101);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
  // You can use Ethernet.init(pin) to configure the CS pin
  //Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit Featherwing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit Featherwing Ethernet

  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.println("Ethernet WebServer Example");

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  if (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("Ethernet cable is not connected.");
  }

  // start the server
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a new line
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
}

Leave a Comment