Arduino Nano ESP32 - Ethernet
This guide shows you how to connect Arduino Nano ESP32 to the internet or your local network using the W55010 Ethernet module. You will learn the following:
- How to connect Arduino Nano ESP32 to W5500 Ethernet Module
- How to program Arduino Nano ESP32 for HTTP Requests through Ethernet
- How to create a simple Web Server on Arduino Nano ESP32 with Ethernet
![Arduino Nano ESP32 Ethernet](https://newbiely.com/images/cover/arduino-nano-esp32-ethernet.jpg)
Hardware Preparation
1 | × | Arduino Nano ESP32 | |
1 | × | USB Cable Type-C | |
1 | × | W5500 Ethernet Module | |
1 | × | Ethernet Cable | |
1 | × | Jumper Wires | |
1 | × | Breadboard | |
1 | × | (Recommended) Screw Terminal Expansion Board for Arduino Nano |
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | |
1 | × | DIYables Sensor Kit (18 sensors/displays) |
Disclosure: Some of the links provided in this section are Amazon affiliate links. We may receive a commission for any purchases made through these links at no additional cost to you. We appreciate your support.
Overview of W5500 Ethernet module
The W550io Ethernet module has two kinds of connections:
- RJ45 interface: Connect this to a router or switch using an Ethernet cable.
- SPI interface: Use this to link to an Arduino Nano ESP32 board. It includes 10 pins:
- NC pin: Leave this pin unconnected.
- INT pin: Leave this pin unconnected.
- RST pin: This is the reset pin; connect it to the Arduino Nano ESP32's EN pin.
- GND pin: Connect this to the Arduino Nano ESP32's GND pin.
- 5V pin: Do not connect this pin.
- 3.3V pin: Connect this to the Arduino Nano ESP32's 3.3V pin.
- MISO pin: Connect this to the Arduino Nano ESP32's SPI MISO pin.
- MOSI pin: Connect this to the Arduino Nano ESP32's SPI MOSI pin.
- SCS pin: Connect this to the Arduino Nano ESP32's SPI CS pin.
- SCLK pin: Connect this to the Arduino Nano ESP32's SPI SCK pin.
![Ethernet module pinout](https://newbiely.com/images/tutorial/ethernet-module-pinout.jpg)
image source: diyables.io
Wiring Diagram between Arduino Nano ESP32 and W5500 Ethernet module
![The wiring diagram between Arduino Nano ESP32 and Ethernet module](https://newbiely.com/images/tutorial/arduino-nano-esp32-ethernet-module-wiring-diagram.jpg)
This image is created using Fritzing. Click to enlarge image
image source: diyables.io
Arduino Nano ESP32 code for Ethernet Module - Making HTTP request via Ethernet
This code functions like a web client. It sends HTTP requests to the web server at http://example.com/.
/*
* This Arduino Nano ESP32 code was developed by newbiely.com
*
* This Arduino Nano ESP32 code is made available for public use without any restriction
*
* For comprehensive instructions and wiring diagrams, please visit:
* https://newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-ethernet
*/
#include <SPI.h>
#include <Ethernet.h>
// replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEF };
EthernetClient client;
int HTTP_PORT = 80;
String HTTP_METHOD = "GET"; // or POST
char HOST_NAME[] = "example.com";
String PATH_NAME = "/";
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("Arduino Nano ESP32 - Ethernet Tutorial");
// initialize the Ethernet shield using DHCP:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to obtaining an IP address");
// check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware)
Serial.println("Ethernet shield was not found");
// check for Ethernet cable
if (Ethernet.linkStatus() == LinkOFF)
Serial.println("Ethernet cable is not connected.");
while (true)
;
}
// connect to web server on port 80:
if (client.connect(HOST_NAME, HTTP_PORT)) {
// if connected:
Serial.println("Connected to server");
// make a HTTP request:
// send HTTP header
client.println(HTTP_METHOD + " " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println(); // end HTTP header
while (client.connected()) {
if (client.available()) {
// read an incoming byte from the server and print it to serial monitor:
char c = client.read();
Serial.print(c);
}
}
// the server's disconnected, stop the client:
client.stop();
Serial.println();
Serial.println("disconnected");
} else { // if not connected:
Serial.println("connection failed");
}
}
void loop() {
}
Detailed Instructions
To get started with Arduino Nano ESP32, follow these steps:
- If you are new to Arduino Nano ESP32, refer to the tutorial on how to set up the environment for Arduino Nano ESP32 in the Arduino IDE.
- Connect the Arduino Nano ESP32 to the Ethernet module according to the provided diagram.
- Connect the Ethernet module to your router or switch using a Ethernet cable.
- Connect the Arduino Nano ESP32 board to your computer using a USB cable.
- Launch the Arduino IDE on your computer.
- Select the Arduino Nano ESP32 board and its corresponding COM port.
- Click to the Libraries icon on the left bar of the Arduino IDE.
- Search “Ethernet”, then find the Ethernet library by Various
- Click Install button to install Ethernet library.
![Arduino Nano ESP32 Ethernet library](https://newbiely.com/images/tutorial/arduino-nano-esp32-ethernet-library.jpg)
- Open the Serial Monitor in the Arduino IDE.
- Copy the code given and paste it into the Arduino IDE.
- Press the Upload button in the Arduino IDE to send the code to the ESP25.
- Check out the Serial Monitor which will display the output as below.
COM6
Arduino Nano ESP32 - Ethernet Tutorial
Connected to server
HTTP/1.1 200 OK
Accept-Ranges: bytes
Age: 208425
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Fri, 12 Jul 2024 07:08:42 GMT
Etag: "3147526947"
Expires: Fri, 19 Jul 2024 07:08:42 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECAcc (lac/55B8)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256
Connection: close
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.</p>
<p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>
disconnected
Autoscroll
Clear output
9600 baud
Newline
※ NOTE THAT:
If another device on the same network has the same MAC address, it might cause problems.
Arduino Nano ESP32 code for Ethernet Module - Web Server
The code below turns the Arduino Nano ESP32 into a web server. This server sends a simple webpage to web browsers.
/*
* This Arduino Nano ESP32 code was developed by newbiely.com
*
* This Arduino Nano ESP32 code is made available for public use without any restriction
*
* For comprehensive instructions and wiring diagrams, please visit:
* https://newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-ethernet
*/
#include <SPI.h>
#include <Ethernet.h>
// replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEF };
EthernetServer server(80);
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("Arduino Nano ESP32 - Ethernet Tutorial");
// initialize the Ethernet shield using DHCP:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to obtaining an IP address");
// check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware)
Serial.println("Ethernet shield was not found");
// check for Ethernet cable
if (Ethernet.linkStatus() == LinkOFF)
Serial.println("Ethernet cable is not connected.");
while (true)
;
}
server.begin();
Serial.print("Arduino Nano ESP32 - Web Server IP Address: ");
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
bool 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 newline
// 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();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<body>");
client.println("<h1>Arduino Nano ESP32 - Web Server with Ethernet</h1>");
client.println("</body>");
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");
}
}
Detailed Instructions
- Copy the code provided and paste it into the Arduino IDE.
- Click the Upload button in Arduino IDE to send the code to your Arduino Nano ESP32 board.
- Check the Serial Monitor to view the results as shown.
COM6
Arduino Nano ESP32 - Ethernet Tutorial
Arduino Nano ESP32 - Web Server IP Address: 192.168.0.2
Autoscroll
Clear output
9600 baud
Newline
- Enter the IP address provided into your web browser's address bar. You will see a simple webpage displayed by the Arduino Nano ESP32.
![Arduino Nano ESP32 Ethernet Web Server](https://newbiely.com/images/tutorial/arduino-nano-esp32-ethernet-web-server.jpg)