serveur-json.ino

Arduino Yún · Archivo : serveur-json.ino · Lenguaje : Arduino · Uso : Répondre en JSON à une requête HTTP depuis le croquis

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

← Volver a la ficha