🛠 L'API REST du Bridge en détail : /arduino, /data et routes personnalisées
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
- 1 Arduino Yún en ligne sur votre réseau (http://arduino.local)
- PC avec curl (ou PowerShell Invoke-WebRequest)
- Le sketch BridgeYunServer (exemples de l'IDE) téléversé, ou tout sketch avec Bridge.begin
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
- Exposer la Yún directement sur Internet (port forwarding 80/8080) : l'API REST n'a AUCUNE authentification sur les routes /arduino et /data — n'importe qui allume vos broches. Tunnel SSH ou VPN uniquement.
- Croire /arduino/analog/0 limité à 255 : c'est bien 0–1023 (ADC 10 bits du 32U4).
- Oublier le sketch vivant : sans Bridge.begin dans un croquis, les routes /arduino/* ne répondent pas correctement — le pont côté 32U4 doit tourner.
- Chaînes avec espaces ou accents dans /mail/send : encodez (espaces en +, @ parfois problématique selon les versions) — testez avec curl avant d'intégrer.
- Data store non persistant : /data vit en RAM côté Linux ; un redémarrage vide les clés. Pour du durable, écrivez sur la microSD (tuto avancé).
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotant-rest.inoArduinoconsole-bridge.inoArduinovaleurs-partagees.inoArduinoprocess-shell.inoArduinoserveur-json.inoArduinolecture-fichier.inoArduino