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 Tian (Microchip SAM3X8E + Linux TianOS sur Atheros AR9344, double port USB, Ethernet et Wi-Fi). 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 avec la carte Arduino Tian : téléversement par le port USB « Native ». Côté Linux : ssh root@arduino.local. La bibliothèque Bridge est identique à celle de la Yun.
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