🛠 Serveur web embarqué pour piloter une LED
Objetivos
Transformar la GIGA R1 WiFi en un servidor web embarcado: la placa escucha en el puerto 80 de la red local y sirve una minipágina HTML con dos enlaces que encienden y apagan un LED. Es la variante local de los ejemplos oficiales SimpleWebServerWiFi incluidos con la biblioteca WiFi del core. Aprenderás a analizar una petición HTTP GET y a devolver una respuesta correcta.
Materiales
- Placa Arduino GIGA R1 WiFi + antena u.FL
- WiFi 2,4 GHz WPA2 (la placa y el teléfono deben estar en la misma red)
- 1 LED + resistencia de 330 Ω en el pin 5 (recordatorio: 8 mA máx. por pin)
Código completo
// 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 requete = "";
unsigned long debut = millis;
while (client.connected && millis - debut < 3000) {
while (client.available) {
char c = client.read;
if (requete.length < 200) requete += c; // on ne garde que la 1re ligne utile
}
if (requete.indexOf('\r\n\r\n') >= 0) break; // fin des en-tetes recues
}
if (requete.startsWith("GET /on")) { digitalWrite(LED_PIN, HIGH); Serial.println("LED ON"); }
if (requete.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
}
Verificación esperada
El monitor muestra « Ouvrez http://192.168.x.x ». Desde un teléfono conectado al mismo WiFi, esta URL muestra una página con dos botones; una pulsación imprime « LED ON » / « LED OFF » en la placa y enciende/apaga realmente el LED. El botón del navegador recarga la página en cada pulsación, lo cual es normal en este diseño sin JavaScript.
Errores frecuentes
- Inaccesible desde la red: algunos routers bloquean las comunicaciones entre clientes (aislamiento de clientes / AP isolation): desactívalo o prueba desde el PC de programación.
- Respuesta HTTP mal formada: un
\r\nque falta entre las cabeceras y el cuerpo, u olvidar la línea vacía final, da una página en blanco o un navegador que espera. - Socket dejado abierto: sin
client.stop, el navegador gira en vacío y el servidor se satura tras algunas peticiones; piensa también en vaciar la petición recibida (reflejo #937 en el core mbed). - Un solo cliente a la vez: este diseño secuencial sirve una conexión a la vez; un teléfono que abre 6 conexiones paralelas (favicon, etc.) puede parecer un bloqueo: es temporal.
- Dirección IP que cambia: anota la IP mostrada al arrancar, o resérvala en el lease DHCP del router.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton.inoArduinorespiration.inoArduinoanalogique.inoArduinodac-onde.inoArduinooled-i2c.inoArduino