🛠 Client HTTP : récupérer une page en GET
Objetivos
Conectar la GIGA R1 WiFi a una red WPA2 en modo estación, y luego enviar una solicitud HTTP GET sin procesar con WiFiClient y leer la respuesta. Aprenderás principalmente el reflejo propio de esta placa: vaciar siempre por completo el cuerpo de la respuesta TCP, ya que en el núcleo mbed los cuerpos TCP no leídos contaminan las conexiones siguientes (problema ArduinoCore-mbed #937).
Material
- Placa Arduino GIGA R1 WiFi con antena u.FL atornillada
- Un punto de acceso WiFi 2,4 GHz WPA2 (no 5 GHz)
- Cable USB-C, IDE con el núcleo « Arduino Giga R1 »
Código completo
// GIGA R1 WiFi — client HTTP GET (HTTP simple, sans TLS : voir le tuto HTTPS)
#include <WiFi.h>
const char SSID[] = "your-ssid";
const char PASS[] = "your-pass"; // WPA2
const char SERVEUR[] = "example.org";
const int PORT = 80;
void connexion {
Serial.print("Connexion a "); Serial.print(SSID);
WiFi.begin(SSID, PASS);
while (WiFi.status != WL_CONNECTED) { Serial.print("."); delay(200); }
Serial.print(" OK — IP "); Serial.println(WiFi.localIP);
}
void setup {
Serial.begin(115200);
while (!Serial) {}
connexion;
WiFiClient client;
if (!client.connect(SERVEUR, PORT)) { Serial.println("Connexion TCP echouee"); return; }
client.print("GET / HTTP/1.0\r\n");
client.print("Host: "); client.println(SERVEUR);
client.print("Connection: close\r\n\r\n");
unsigned long debut = millis;
while (client.connected && millis - debut < 10000) {
while (client.available) {
Serial.write(client.read); // on TOUT lit : ne jamais laisser des octets
} // en attente (issue #937 sur le core mbed)
}
client.stop; // purge + fermeture propre
Serial.println("\n--- fin de la reponse ---");
}
void loop {
if (WiFi.status != WL_CONNECTED) WiFi.reconnect;
delay(5000);
}
Verificación esperada
Después de la línea « Conexión a ... OK — IP 192.168.x.x », el monitor serie vuelca el HTML devuelto por el servidor (el contenido de la página de ejemplo), seguido de « --- fin de la respuesta --- ». Ejecuta el sketch varias veces: cada conexión debe tener éxito — es exactamente aquí donde el vaciado completo del flujo evita los bloqueos del problema #937.
Errores frecuentes
- Cuerpo de respuesta no leído: leer las cabeceras y luego ejecutar
client.stopdejando el cuerpo pendiente termina por bloquear las conexiones siguientes en el núcleo mbed. Lee todo, siempre. Connection: keep-aliveimplícito: en HTTP/1.0 sin la cabeceraConnection: close, el socket permanece abierto y el bucle espera; cierra correctamente conclient.stop.- DNS interno persistente: si tu red devuelve una IP falsa por DNS, prueba con la IP directa en
client.connect. - WiFi 5 GHz: el módulo 1DX es estrictamente 2,4 GHz; un SSID único de doble banda puede causar confusión — prueba con un SSID de invitado de 2,4 GHz.
- Núcleo compilado incorrecto: el código anterior funciona en ambos núcleos, pero las bibliotecas no se mezclan; recompila si cambias de núcleo.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton.inoArduinorespiration.inoArduinoanalogique.inoArduinodac-onde.inoArduinooled-i2c.inoArduino