Arduino: Read values from an Arduino via HTTP

Join the AI Workshop to learn more about AI and how it can be applied to web development. Next cohort February 1st, 2026

The AI-first Web Development BOOTCAMP cohort starts February 24th, 2026. 10 weeks of intensive training and hands-on projects.


In this tutorial I want to expand the Arduino Web Server tutorial to read the values measured by a sensor, so we can just open a page on our browser and see the data.

For example we’re going to measure the temperature using a DHT11 sensor, and we’re going to measure the distance from an object using a proximity sensor.

We light up the built-in LED on the Arduino by reaching out to the /on URL, and we turn it off by opening the /off URL. Anything else does nothing.

This is the code from the other tutorial:

#include <SPI.h>
#include <WiFiNINA.h>

WiFiServer server(80);

void setup() {
  char ssid[] = SECRET_SSID;
  char pass[] = SECRET_PASS;

  Serial.begin(9600);
  while (!Serial);

  int status = WL_IDLE_STATUS;
  while (status != WL_CONNECTED) {
    Serial.print("Connecting to ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
    delay(5000);
  }

  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  server.begin();
}

void loop() {
  WiFiClient client = server.available();
  if (client) {
    String line = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);

        if (c != '\n' && c != '\r') {
          line += c;
        }

        if (c == '\n') {
          if (line.length() == 0) {
            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("test");
            client.println("</html>");
            break;
          } else {
            line = "";
          }
        }
      }
    }

    client.stop();
  }
}

In the last else you see, we have a full line, so we can check its content before clearing it. In this case we can check for GET /on and GET /off :

if (line.startsWith("GET /on ")){
  digitalWrite(LED_BUILTIN, HIGH);
}
if (line.startsWith("GET /off ")) {
  digitalWrite(LED_BUILTIN, LOW);
}

That’s it! Now load the code on the Arduino and call the /on URL, or the /off URL.

I reserved a static IP to the Arduino using my local network router, and I named it arduino.local in my /etc/hosts file, so reaching out to http://arduino.local/on turns the LED on, and to http://arduino.local/off turns the LED off.

Here’s the complete program:

#include <SPI.h>
#include <WiFiNINA.h>

WiFiServer server(80);

void setup() {
  char ssid[] = SECRET_SSID;
  char pass[] = SECRET_PASS;

  Serial.begin(9600);
  while (!Serial);

  int status = WL_IDLE_STATUS;
  while (status != WL_CONNECTED) {
    Serial.print("Connecting to ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
    delay(5000);
  }

  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  server.begin();
}

void loop() {
  WiFiClient client = server.available();
  if (client) {
    String line = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);

        if (c != '\n' && c != '\r') {
          line += c;
        }

        if (c == '\n') {
          if (line.length() == 0) {
            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("test");
            client.println("</html>");
            break;
          } else {
            if (line.startsWith("GET /on ")){
              digitalWrite(LED_BUILTIN, HIGH);
            }
            if (line.startsWith("GET /off ")) {
              digitalWrite(LED_BUILTIN, LOW);
            }

            line = "";
          }
        }
      }
    }

    client.stop();
  }
}

Lessons in this unit:

0: Introduction
1: An introduction to Arduino
2: Arduino vs Raspberry Pi
3: The Arduino Uno rev 3 board
4: The Arduino Uno WiFi rev 2 board
5: The Arduino MKR WiFi 1010
6: Introduction to the Arduino Programming Language
7: The Arduino Create Platform
8: Arduino: using libraries
9: Arduino Serial Communication
10: How to connect to a WiFi network using an Arduino
11: ▶︎ Read values from an Arduino via HTTP
12: Powering an Arduino with a power bank
13: What to buy to get started with Arduino and Electronics