serveur-json.ino
Le croquis devient une API JSON : YunJSON construit l'objet (lumière, bouton, uptime) et YunServer le sert sur localhost. Les scripts Node/Python du côté Linux consomment l'état matériel comme un microservice.
Matériel requis
Une Arduino Yun (ATmega32U4 + Linux Linino sur Atheros AR9331, Wi-Fi et Ethernet, emplacement microSD). 1 bouton sur D2 vers GND + LDR/potentiomètre sur A0.
Câblage
Bouton entre D2 et GND (résistance interne) ; capteur analogique sur A0 comme d'habitude.
Fonctionnement
YunServer reçoit la requête HTTP relayée par le Linux, le croquis construit le corps JSON à la main et l'écrit dans le client. Le chemin /arduino/etat du Linux arrive comme "etat".
Exécution
Arduino IDE : sélectionne le port série pour téléverser, puis la carte Arduino Yun pour le moniteur. Côté Linux : ssh root@arduino.local (mot de passe de la distribution). L"app Yunwizard configure le réseau.
Variantes
Accepter des POST pour actionner des broches (parse JSON entrant), ou pousser le JSON vers un broker MQTT via le Linux.
serveur-json.ino
// YunServer + JSON : l'etat des entrees en API locale.
#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>
YunServer serveur;
void setup() {
Bridge.begin();
serveur.listenOnLocalhost();
serveur.begin();
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
YunClient client = serveur.accept();
if (!client) return;
String chemin = client.readStringUntil('/');
chemin.trim();
if (chemin == "etat") {
// JSON construit a la main (pas de dependance externe).
String json = "{";
json += ""lumiere":" + String(analogRead(A0)) + ",";
json += ""bouton":" + String(digitalRead(2) == LOW ? "true" : "false") + ",";
json += ""uptime_s":" + String((long)(millis() / 1000));
json += "}";
client.print("HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n");
client.print(json);
} else {
client.print("HTTP/1.1 404 Not Found\r\n\r\n");
}
client.stop();
delay(50);
}
// Bouton sur la broche 2 vers GND (pull-up active).
// Re tester : curl http://<carte>/arduino/etat