🛠 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.

Objectifs

Sortir de l'API REST générique pour écrire VOTRE serveur web : la bibliothèque YunServer ouvre un port TCP côté Linux (via le démon avrbridge) et YunClient représente chaque connexion. Vous allez servir une page HTML + un endpoint JSON lus par un capteur réel, en comprenant que le HTTP est traité par Linux et que le 32U4 reste le seul à toucher les broches.

Matériel

Code complet

// 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(",\"unité\":\"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"));
  }
}

Vérification attendue

0 renvoie un JSON avec la lecture 0–1023 du capteur, rafraîchie à chaque requête. curl -v` montre l'en-tête Connection: close et une connexion propre. Ouvrez deux onglets : YunServer sérialise les requêtes — une requête bloquante (sleep mal placé) gèle le site, d'où l'exigence de handlers courts.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels