serveur-json.ino

Arduino Tian (id : tian) · Fichier : serveur-json.ino · Langage : Arduino · Usage : Répondre en JSON à une requête HTTP depuis le croquis

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

← Retour à la fiche