🛠 L'API REST du Bridge en détail : /arduino, /data et routes personnalisées

Arduino Yún · intermediaire · IMG-yun-intermediaire-5-yun-api-rest-complete.svg — Yún au centre, autour d'elle quatre bulles HTTP : GET /arduino/digital/13/1, GET /data/get/temp, POST /data/send, GET /mail/send ; flèches navigateur, curl et smartphone.

Objetivos

Documentar y explotar en serio la API REST integrada en Linino OS: es la que permite a un navegador, un smartphone o un servidor remoto comunicarse con los pines y el Bridge sin necesidad de escribir ningún servidor web. Nivel intermedio: dejamos atrás las URLs mágicas para entender las familias de rutas, los verbos y cómo añadir nuestras propias rutas en el lado Linux.

Material

Las rutas esenciales

# --- Famille /arduino : accès direct aux broches ---
curl "http://arduino.local/arduino/digital/13/1"      # digitalWrite(13, HIGH)
curl "http://arduino.local/arduino/digital/13"        # lit la broche (si en entrée)
curl "http://arduino.local/arduino/analog/0"          # analogRead(0) -> 0..1023
curl "http://arduino.local/arduino/analogWrite/9/128" # analogWrite(9, 128)
curl "http://arduino.local/arduino/mode/7/input"      # pinMode(7, INPUT)

# --- Famille /data : le data store partagé entre les deux mondes ---
curl "http://arduino.local/data/send/temp:225/hum:60" # publie temp=225, hum=60
curl "http://arduino.local/data/get/temp"             # lit une clé
curl "http://arduino.local/data/get"                  # tout le contenu

# --- Famille /mail : envoi d'email via sendmail côté Linux ---
curl "http://arduino.local/mail/send/to@x.com/sujet/mon+corps"

En el lado del sketch, existe un espejo exacto: Bridge.put alimenta /data, y el servicio REST controla los pines igual que lo haría tu código. En el lado Linux, estas rutas son servidas por un demonio Lua (uhttpd + luci-rpc); se pueden añadir rutas propias colocando un archivo Lua en /usr/lib/lua/ — el tutorial avanzado de servidor web lo detalla.

Código del sketch (lado 32U4)

#include <Bridge.h>
void setup {
  Bridge.begin;
  Console.begin;
  pinMode(13, OUTPUT);
}
void loop {
  // Le sketch lit ce que le réseau publie, et publie en retour.
  String ordre;
  if (Bridge.get("ordre", ordre)) {
    if (ordre == "on")  digitalWrite(13, HIGH);
    if (ordre == "off") digitalWrite(13, LOW);
  }
  Bridge.put("etat", digitalRead(13) ? "on" : "off");
  delay(200);
}

Verificación esperada

curl 10 enciende el LED (el sketch reacciona a la clave); curl http://arduino.local/data/get/etat` devuelve «on». Cada familia responde en texto plano, integrable en un simple fetch de JavaScript. Prueba una ruta inexistente: respuesta 404 — la API es tu superficie de ataque, protégela (contraseña de root, no expongas la tarjeta en Internet).

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales