http-get.ino
Récupérer des données web avec la MKR WiFi 1010 : connexion au point d'accès, ouverture d'une socket TCP sur le port 80, requête GET vers une API météo gratuite, puis vidange de la réponse sur le port série. Le gabarit de tout client HTTP embarqué sobre.
Matériel requis
Une Arduino MKR WiFi 1010 (microcontrôleur SAMD21, module Wi-Fi WINC1500, pas de Bluetooth, alimentation USB ou LiPo sur J6). MKR WiFi 1010 sur un réseau Internet sortant ; aucune inscription nécessaire pour l'API utilisée.
Câblage
Aucun câblage ; vérifiez que le WiFi autorise le port de sortie (80) — certains portails captifs bloquent.
Fonctionnement
WiFiClient implémente Print/Stream : on écrit l'en-tête HTTP à la main, puis on lit jusqu'à fermeture ou timeout. La réponse JSON brute s'affiche telle quelle, prête à parser.
Exécution
Installez Arduino SAMD Boards et la bibliothèque WiFi101, sélectionnez la carte, téléversez. Le Wi-Fi fonctionne en 2,4 GHz uniquement : vérifiez que votre point d'accès n'est pas en 5 GHz seul.
Variantes
Passez à WiFiSSLClient sur le port 443 pour HTTPS (nécessite le certificat racine en flash), ou ajoutez un parser JSON minimal type ArduinoJson.
http-get.ino
// Client HTTP sur le reseau local/WAN (MKR WiFi 1010, WiFi101).
#include <SPI.h>
#include <WiFi101.h>
const char SSID[] = "MonReseau";
const char PASS[] = "motdepassewifi";
const char HOTE[] = "api.open-meteo.com";
const char CHEMIN[] = "/v1/forecast?latitude=45.5&longitude=4.8¤t=temperature_2m";
WiFiClient client;
void connexion() {
WiFi.begin(WPA_PASS_PHRASE, SSID, PASS);
unsigned long t = millis();
while (WiFi.status() != WL_CONNECTED && millis() - t < 20000) delay(100);
}
void setup() {
Serial.begin(9600);
while (!Serial);
connexion();
if (WiFi.status() != WL_CONNECTED) {
Serial.println(F("WiFi indisponible"));
while (true);
}
Serial.println(WiFi.localIP());
if (client.connect(HOTE, 80)) {
client.print(String("GET ") + CHEMIN + " HTTP/1.1\r\n" +
"Host: " + HOTE + "\r\nConnection: close\r\n\r\n");
unsigned long t = millis();
while (client.connected() && millis() - t < 10000)
while (client.available()) Serial.write(client.read());
client.stop();
} else Serial.println(F("TCP KO"));
}
void loop() {}