Arduino Nano - HTTP Request
Arduino Nano can act as a web client, sending HTTP requests to a web server. This web server could be a website, Web API, REST API, or Web service...
This tutorial instructs you how to use Arduino Nano to make HTTP Request to a web server. In detail, we will learn:
The fundamentals of web client and web server
How to create an HTTP request (GET and POST)
How to send data to a web server (a website, WEB API or REST API)
Arduino Nano code:
Making HTTP GET/POST requests using Arduino Nano and Ethernet module
Making HTTP GET request and sending data using Arduino Nano and Ethernet module
Making HTTP POST request and sending data using Arduino Nano and Ethernet module
Or you can buy the following sensor kits:
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.
Additionally, some of these links are for products from our own brand, DIYables.
Some key web concepts include web address (URL), hostname, pathname, query string, and HTTP request. You can learn more about these in detail in the HTTP tutorial.
This image is created using Fritzing. Click to enlarge image
image source: diyables.io
and headers.
Declare the request method, port for HTTP, hostname, pathname, query string and headers that are related to the code.
int HTTP_PORT = 80;
String HTTP_METHOD = "GET";
char HOST_NAME[] = "example.newbiely.com";
String PATH_NAME = "";
if(client.connect(HOST_NAME, HTTP_PORT)) {
Serial.println("Connected to server");
} else {
Serial.println("connection failed");
}
client.println(HTTP_METHOD + " " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
while(client.available())
{
char c = client.read();
Serial.print(c);
}
if(!client.connected())
{
Serial.println("disconnected");
client.stop();
}
We can include data in an HTTP request, and the format depends on the HTTP request method:
HTTP GET request:
HTTP POST request:
Data can be sent in various formats like query string, JSON, XML, images, etc.
The data is placed in the HTTP request body.
Steps to send an HTTP request:
int temp =
int humi =
String queryString = String("?temperature=") + String(temp) + String("&humidity=") + String(humi);
Modify the code for sending Data in the HTTP request
client.println("GET " + PATH_NAME + queryString + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
client.println("POST " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
client.println(queryString);
while(client.available())
{
char c = client.read();
Serial.print(c);
}
if(!client.connected())
{
Serial.println("disconnected");
client.stop();
}
This is the full Arduino Nano code for making HTTP GET and POST requests.
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetClient client;
int HTTP_PORT = 80;
String HTTP_METHOD = "GET";
char HOST_NAME[] = "maker.ifttt.com";
String PATH_NAME = "/trigger";
void setup() {
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to obtaining an IP address using DHCP");
while(true);
}
if(client.connect(HOST_NAME, HTTP_PORT)) {
Serial.println("Connected to server");
client.println(HTTP_METHOD + " " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
while(client.connected()) {
if(client.available()){
char c = client.read();
Serial.print(c);
}
}
client.stop();
Serial.println();
Serial.println("disconnected");
} else {
Serial.println("connection failed");
}
}
void loop() {
}
Connect the Arduino Nano to the Ethernet module according to the above wiring diagram.
Connect an Ethernet Cable to the Ethernet module.
Connect the Arduino Nano to a PC using a USB cable.
Launch the Arduino IDE on your PC.
Select Arduino Nano board and 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.
Copy the above code and open with Arduino IDE
Click Upload button on Arduino IDE to upload code to Arduino Nano
Open the Serial Monitor
Check out the result on Serial Monitor.
Please note that the above code demonstrates how to make an HTTP request. You need to replace the URL and queryString with your own values to make it work.
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetClient client;
int HTTP_PORT = 80;
String HTTP_METHOD = "GET";
char HOST_NAME[] = "maker.ifttt.com";
String PATH_NAME = "/trigger";
String queryString = "?value1=26&value2=70";;
void setup() {
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to obtaining an IP address using DHCP");
while(true);
}
if(client.connect(HOST_NAME, HTTP_PORT)) {
Serial.println("Connected to server");
client.println(HTTP_METHOD + " " + PATH_NAME + queryString + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
while(client.connected()) {
if(client.available()){
char c = client.read();
Serial.print(c);
}
}
client.stop();
Serial.println();
Serial.println("disconnected");
} else {
Serial.println("connection failed");
}
}
void loop() {
}
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetClient client;
int HTTP_PORT = 80;
String HTTP_METHOD = "POST";
char HOST_NAME[] = "maker.ifttt.com";
String PATH_NAME = "/trigger";
String queryString = "?value1=26&value2=70";;
void setup() {
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to obtaining an IP address using DHCP");
while(true);
}
if(client.connect(HOST_NAME, HTTP_PORT)) {
Serial.println("Connected to server");
client.println(HTTP_METHOD + " " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
client.println(queryString);
while(client.connected()) {
if(client.available()){
char c = client.read();
Serial.print(c);
}
}
client.stop();
Serial.println();
Serial.println("disconnected");
} else {
Serial.println("connection failed");
}
}
void loop() {
}