🛠 Serveur web embarqué : YunServer, YunClient et pages dynamiques

Arduino Yún · avance · IMG-yun-avance-7-yun-serveur-web-yunserver.svg — Yún avec un serveur HTTP dessiné dans la partie Linux : navigateur connecté sur le port 5555, requête GET /temperature, réponse JSON ; le Bridge relie le serveur au 32U4 qui lit un capteur sur A1.

Objetivos

Salir de la API REST genérica para escribir TU propio servidor web: la biblioteca YunServer abre un puerto TCP en el lado Linux (a través del demonio avrbridge) y YunClient representa cada conexión. Vas a servir una página HTML y un endpoint JSON leídos por un sensor real, entendiendo que el protocolo HTTP es gestionado por Linux y que el 32U4 sigue siendo el único que accede a los pines.

Material

Código completo

// Serveur HTTP minimal sur le port 5555 : page + JSON capteur.
#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

YunServer serveur;
const uint8_t CAPTEUR = A1;

void setup {
  Bridge.begin;
  serveur.listenOnLocalhost;   // écoute côté Linux
  serveur.begin;
}

void loop {
  YunClient client = serveur.accept;
  if (!client) return;                 // aucune connexion en attente
  process(client);
  client.stop;                       // toujours fermer la connexion
}

void process(YunClient client) {
  String methode = client.readStringUntil('\t');     // GET /temperature HTTP/1.1
  String chemin  = client.readStringUntil('\t');
  client.readStringUntil('\r');                      // reste de la ligne HTTP
  client.readStringUntil('\n');
  // Vide les en-têtes jusqu'à la ligne vide (sinon ils seront lus comme le corps)
  String ligne;
  while ((ligne = client.readStringUntil('\n')).length > 1) { }

  if (chemin == "/temperature") {
    int v = analogRead(CAPTEUR);
    client.print(F("HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n"
                   "Connection: close\r\n\r\n"));
    client.print(F("{\"capteur\":A1,\"brut\":"));
    client.print(v);
    client.println(F(",\"unite\":\"adc10\"}"));
  } else if (chemin == "/") {
    client.print(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n"
                   "Connection: close\r\n\r\n"
                   "<h1>Yun vivante</h1>"
                   "<p><a href='/temperature'>/temperature</a></p>"));
  } else {
    client.print(F("HTTP/1.1 404 Not Found\r\nConnection: close\r\n\r\n"));
  }
}

Verificación esperada

0 devuelve un JSON con la lectura del sensor (0–1023), actualizada en cada solicitud. curl -v` muestra la cabecera Connection: close y una conexión limpia. Abre dos pestañas: YunServer serializa las solicitudes — una solicitud bloqueante (sleep mal colocado) congela el sitio, de ahí la exigencia de manejadores cortos.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales