🛠 Serveur web embarqué pour piloter une LED
Objectifs
Transformer la GIGA R1 WiFi en serveur web embarqué : la carte écoute sur le port 80 du réseau local et sert une mini-page HTML avec deux liens qui allument et éteignent une LED. C'est la variante locale des exemples officiels SimpleWebServerWiFi livrés avec la bibliothèque WiFi du core. Vous apprendrez à parser une requête HTTP GET et à renvoyer une réponse correcte.
Matériel
- Carte Arduino GIGA R1 WiFi + antenne u.FL
- WiFi 2,4 GHz WPA2 (la carte et le téléphone doivent être sur le même réseau)
- 1 LED + résistance 330 Ω sur la broche 5 (rappel : 8 mA max par broche)
Code complet
// GIGA R1 WiFi — mini serveur web LED (inspiré de SimpleWebServerWiFi du core)
#include <WiFi.h>
const char SSID[] = "your-ssid";
const char PASS[] = "your-pass";
const int LED_PIN = 5; // LED + 330 ohms vers GND
WiFiServer serveur(80);
void setup {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
WiFi.begin(SSID, PASS);
while (WiFi.status != WL_CONNECTED) { Serial.print("."); delay(200); }
Serial.print("Ouvez http://"); Serial.println(WiFi.localIP);
serveur.begin;
}
void loop {
if (WiFi.status != WL_CONNECTED) { WiFi.reconnect; delay(2000); return; }
WiFiClient client = serveur.available; // attend une connexion entrante
if (!client) return;
String requête = "";
unsigned long debut = millis;
while (client.connected && millis - debut < 3000) {
while (client.available) {
char c = client.read;
if (requête.length < 200) requête += c; // on ne garde que la 1re ligne utile
}
if (requête.indexOf('\r\n\r\n') >= 0) break; // fin des en-tetes recues
}
if (requête.startsWith("GET /on")) { digitalWrite(LED_PIN, HIGH); Serial.println("LED ON"); }
if (requête.startsWith("GET /off")) { digitalWrite(LED_PIN, LOW); Serial.println("LED OFF"); }
client.print("HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n");
client.print("Connection: close\r\n\r\n");
client.print("<html><body style='font-family:sans-serif'>");
client.print("<h2>GIGA R1 WiFi — LED broche 5</h2>");
client.print("<a href='/on'><button>OUI</button></a> ");
client.print("<a href='/off'><button>NON</button></a></body></html>");
client.stop; // ferme la socket proprement
}
Vérification attendue
Le moniteur affiche « Ouvrez http://192.168.x.x ». Depuis un téléphone connecté au même WiFi, cette URL affiche une page avec deux boutons ; un appui imprime « LED ON » / « LED OFF » côté carte et allume/éteint réellement la LED. Le bouton du navigateur recharge la page à chaque appui, ce qui est normal pour ce design sans JavaScript.
Erreurs fréquentes
- Inaccessible depuis le réseau : certains routeurs bloquent les communications entre clients (isolement client / AP isolation) — désactivez-le ou testez depuis le PC de programmation.
- Réponse HTTP mal formée : un
\r\nmanquant entre les en-têtes et le corps, ou l'oubli de la ligne vide finale, donne une page blanche ou un navigateur qui attend. - Socket laissée ouverte : sans
client.stop, le navigateur tourne en roue libre et le serveur sature après quelques requêtes ; pensez aussi à vider la requête reçue (réflexe #937 sur le core mbed). - Un seul client à la fois : ce design séquentiel ne sert qu'une connexion à la fois ; un téléphone qui ouvre 6 connexions parallèles (favicon, etc.) peut sembler bloquer — c'est temporaire.
- Adresse IP qui change : notez l'IP affichée au démarrage, ou réservez-la dans le bail DHCP du routeur.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton.inoArduinorespiration.inoArduinoanalogique.inoArduinodac-onde.inoArduinooled-i2c.inoArduino