Arduino REST API
An Arduino REST API lets your Arduino-based device expose its data and controls over the web using
HTTP methods. This makes it easy for web apps, mobile apps, or other devices to read sensor values
and control actuators (LEDs, relays, motors) through simple URLs.
1. What is REST?
REST (Representational State Transfer) is an architectural style for networked
applications.
Key REST principles
1. Client–Server architecture
o Client: Web browser, mobile app, cloud server
o Server: Arduino device
2. Stateless communication
o Each request contains all required information
o Arduino does not store client session data
3. Resource-based URLs
o Resources are identified using URIs
o Example: /sensor/temperature
4. Standard HTTP methods
o GET – Retrieve data
o POST – Create or trigger an action
o PUT – Update a resource
o DELETE – Remove/reset a resource
2. Why REST API for Arduino?
Traditional Arduino communication used serial or local control. REST APIs enable:
Platform-independent access
Easy integration with web and cloud platforms
Scalable IoT architectures
Real-time remote control
3. Hardware platforms supporting REST APIs
Arduino itself has limited resources; hence REST APIs are commonly implemented using:
Arduino + Ethernet Shield
Wi-Fi-enabled microcontrollers:
o ESP8266
o ESP32
These boards can directly host a lightweight HTTP web server.
4. Software requirements
Arduino IDE
Networking libraries:
o WiFi.h (ESP32)
o ESP8266WiFi.h
o WebServer.h / ESP8266WebServer.h
Optional:
o ArduinoJson for structured JSON responses
5. REST API architecture for Arduino
Functional blocks
1. Client
oBrowser, Postman, mobile app, cloud server
2. Network
o Wi-Fi / Ethernet using TCP/IP
3. Arduino REST Server
o Handles HTTP requests
o Maps URLs to functions
4. Hardware layer
o Sensors (temperature, humidity)
o Actuators (LEDs, motors, relays)
The term "Arduino REST API" can refer to two primary methods for integrating Arduino
projects with other systems using the principles of a REST API: using the Arduino Cloud
REST API to interact with cloud-connected devices, or implementing a local REST API on
an Arduino board itself to act as a server.
1. The Arduino Cloud REST API
This is a set of endpoints provided by Arduino to manage and interact with devices, data,
and properties hosted on the Arduino Cloud platform.
Functionality: It allows external applications to fetch sensor data, trigger actions, manage
devices, and even create dashboards programmatically.
Access Methods: You interact with the cloud API using standard HTTP requests (GET,
POST, PUT, DELETE) from any HTTP client.
Authentication: Access requires generating API keys (Client ID and Client Secret) within
the Arduino Cloud interface and using OAuth 2.0 to obtain a temporary access token for
each session.
Client Libraries: Arduino provides official SDKs (Software Development Kits) in JavaScript
([Link]), Python, and Golang to simplify the authentication and interaction process.
Typical Use Case: Integrating real-time Arduino data into a custom website or creating
automated scripts for data analysis and device management.
2. Implementing a Local REST API on an Arduino Board
For projects where the Arduino board acts as its own server on a local network (or the
internet with appropriate network configuration), you can implement a REST API directly on
the device using a Wi-Fi or Ethernet shield/module.
Functionality: This allows an external client (e.g., a smartphone app, another computer) to
send HTTP requests directly to the Arduino's IP address to read pin values, set pin states, or
call custom functions defined in your sketch.
Libraries: Libraries like aREST simplify this process significantly. The library handles the
HTTP request parsing and maps URLs to specific variables or functions in your Arduino
sketch.
Supported Hardware: This approach works well with boards that have built-in Wi-Fi
capabilities, such as the ESP8266 or ESP32.
Example using aREST library structure:
A client could make a simple HTTP GET request to control a digital pin:
curl [Link] to set pin 5 to HIGH.
Use cases
IoT dashboards
Home automation
Remote monitoring & control
Integration with cloud services
How it works (high level)
1. Arduino runs a small web server.
2. Each URL (endpoint) represents a resource (e.g., /led, /temperature).
3. Clients send HTTP requests:
o GET → read data
o POST / PUT → change state
o DELETE → remove/reset (optional)
| Endpoint | Method | Purpose |
| `/led/on` | POST | Turn LED ON |
| `/led/off` | POST | Turn LED OFF |
| `/sensor/temp` | GET | Read temperature |
| `/status` | GET | Device health/info |
Simple example (ESP8266)
Turns an LED ON/OFF via REST calls.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "YOUR_WIFI";
const char* password = "YOUR_PASSWORD";
ESP8266WebServer server(80);
int ledPin = D1;
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
[Link](ssid, password);
while ([Link]() != WL_CONNECTED) delay(500);
[Link]("/led/on", HTTP_POST, []() {
digitalWrite(ledPin, HIGH);
[Link](200, "application/json", "{\"led\":\"on\"}");
});
[Link]("/led/off", HTTP_POST, []() {
digitalWrite(ledPin, LOW);
[Link](200, "application/json", "{\"led\":\"off\"}");
});
[Link]();
void loop() {
[Link]();