serveur-json.ino

Arduino Tian (id: tian) · 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 Tian (Microchip SAM3X8E + Linux TianOS sobre un Atheros AR9344, doble USB, Ethernet y Wi-Fi). 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 con la placa Arduino Tian: grabado por el puerto USB « Native ». Por el lado Linux: ssh root@arduino.local. La librería Bridge es idéntica a la del Yun.

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