🛠 L'API REST du Bridge en détail : /arduino, /data et routes personnalisées
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
- 1 Arduino Yún en línea en tu red (http://arduino.local)
- PC con curl (o PowerShell Invoke-WebRequest)
- El sketch BridgeYunServer (ejemplos del IDE) cargado, o cualquier sketch con Bridge.begin
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
- Exponer la Yún directamente en Internet (reenvío de puertos 80/8080): la API REST NO tiene NINGUNA autenticación en las rutas /arduino y /data — cualquiera puede encender tus pines. Usa solo túnel SSH o VPN.
- Creer que /arduino/analog/0 está limitado a 255: en realidad es 0–1023 (ADC de 10 bits del 32U4).
- Olvidar el sketch activo: sin Bridge.begin en un boceto, las rutas /arduino/* no responden correctamente — el puente en el lado 32U4 debe estar ejecutándose.
- Cadenas con espacios o acentos en /mail/send: codifícalas (espacios como +, @ a veces problemático según las versiones) — prueba con curl antes de integrar.
- Almacén de datos no persistente: /data vive en la RAM del lado Linux; un reinicio vacía las claves. Para almacenamiento duradero, escribe en la microSD (tutorial avanzado).
Otros tutoriales para esta placa
- Premiers pas sur la Yún : Bridge, Console et LED
- Connecter la Yún au WiFi et piloter une broche depuis le navigateur
- Envoyer un capteur analogique sur le réseau : potentiomètre et Bridge REST
- runShellCommandOnLinux : faire exécuter des commandes Linux depuis le sketch
- Alerte email : bouton sur la Yún et envoi via sendmail
- Serveur web embarqué : YunServer, YunClient et pages dynamiques
Ejemplos de código para esta placa
clignotant-rest.inoArduinoconsole-bridge.inoArduinovaleurs-partagees.inoArduinoprocess-shell.inoArduinoserveur-json.inoArduinolecture-fichier.inoArduino