🛠 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.

Objectifs

Documenter et exploiter sérieusement l'API REST embarquée dans Linino OS : c'est elle qui permet à un navigateur, un smartphone ou un serveur distant de parler aux broches et au Bridge sans aucun serveur web à écrire. Niveau intermédiaire : on sort des URLs magiques pour comprendre les familles de routes, les verbes, et comment greffer ses propres routes côté Linux.

Matériel

Les routes essentielles

# --- 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"

Côté sketch, le miroir exact existe : Bridge.put alimente /data, et le service REST pilote les broches comme le ferait votre code. Côté Linux, ces routes sont servies par un démon Lua (uhttpd + luci-rpc) ; on peut ajouter ses propres routes en déposant un fichier Lua dans /usr/lib/lua/ — le tuto avancé serveur web le détaille.

Code sketch (côté 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("état", digitalRead(13) ? "on" : "off");
  delay(200);
}

Vérification attendue

curl 10 allume la LED (le sketch réagit à la clé) ; curl http://arduino.local/data/get/etat` renvoie « on ». Chaque famille répond en texte brut, intégrable dans un simple fetch JavaScript. Testez une route inexistante : réponse 404 — l'API est votre surface d'attaque, protégez-la (mot de passe root, pas de carte exposée sur Internet).

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels