serveur-json.ino
El sketch se convierte en una API JSON: el croquis construye el objeto (luz, botón, uptime) a mano y YunServer lo sirve en localhost. Los scripts Node/Python del lado Linux consumen el estado del hardware como un microservicio.
Hardware
Un Arduino Yun (ATmega32U4 + Linux Linino sobre un Atheros AR9331, Wi-Fi y Ethernet, ranura microSD). 1 botón en D2 hacia GND + LDR/potenciómetro en A0.
Cableado
Botón entre D2 y GND (resistencia interna); sensor analógico en A0 como siempre.
Funcionamiento
YunServer recibe la petición HTTP retransmitida por el Linux, el croquis construye el cuerpo JSON a mano y lo escribe en el cliente. La ruta /arduino/etat del Linux llega como "etat".
Ejecución
Arduino IDE: selecciona el puerto serie para grabar y luego la placa Arduino Yun para el monitor. Por el lado Linux: ssh root@arduino.local (contraseña de la distribución). La app Yunwizard configura la red.
Variantes
Aceptar POST para accionar pines (parsear JSON entrante), o empujar el JSON a un broker MQTT vía el 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