🛠 HTTP GET via GPRS
Objectifs
Récupérer une page ou une API en HTTP sur le réseau cellulaire avec GSMClient + GPRS : l'API de la bibliothèque MKRGSM reprend volontairement les classes des bibliothèques Ethernet/WiFi, donc tout code réseau Arduino standard se porte presque tel quel. On écrit la requête HTTP à la main (pas de bibliothèque HTTP) pour comprendre le protocole, puis on note les options HTTPS.
Matériel
- Carte Arduino MKR GSM 1400 + antenne U.FL
- micro-SIM data avec APN connu, code PIN désactivé
- Batterie LiPo ≥ 1500 mAh
- Bibliothèque MKRGSM ; secrets dans l'onglet Secret de l'IDE
Code complet
#include <MKRGSM.h>
#include "arduino_secrets.h"
const char PINNUMBER[] = SECRET_PINNUMBER;
const char GPRS_APN[] = SECRET_GPRS_APN;
const char GPRS_LOGIN[] = SECRET_GPRS_LOGIN; // "" si non requis
const char GPRS_PASSWORD[] = SECRET_GPRS_PASSWORD;
GSMClient client; // clone de la classe Client (Ethernet/WiFi)
GPRS gprs;
GSM gsmAccess;
void setup {
Serial.begin(9600);
while (!Serial) {}
bool connected = false;
while (!connected) {
connected = (gsmAccess.begin(PINNUMBER) == GSM_READY) &&
(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY);
if (!connected) { Serial.println("Reseau indisponible"); delay(2000); }
}
Serial.println("GPRS pret");
if (client.connect("example.org", 80)) {
Serial.println("Connecte au serveur");
client.println("GET / HTTP/1.1");
client.println("Host: example.org");
client.println("User-Agent: MKRGSM1400");
client.println("Connection: close");
client.println; // ligne vide = fin d'en-tetes
} else {
Serial.println("Connexion refusee");
}
}
void loop {
while (client.available) Serial.write(client.read);
if (!client.connected && !client.available) client.stop;
while (true) {} // une seule requête
}
Vérification attendue
La console affiche l'en-tête HTTP puis le corps de la page (le « <!doctype html> » d'exemple.org). La connexion doit être proprement fermée (Connection: close) pour que available se tarisse. Pour du HTTPS : soit GSMSSLClient (profils SSL du module), soit BearSSLClient côté SAMD21 appuyé sur la puce de chiffrement embarquée ATECC508 — attention, le magasin de certificats racines des vieilles versions de MKRGSM (dernière 1.4.2, 2019) a dû être remplacé au fil des rotations de CA : mettre à jour la bibliothèque.
Erreurs fréquentes
- Lire le corps avant la fin : boucler sur
availableavec un délai d'inactivité plutôt qu'un seulwhileinstantané en boucle principale rapide. - Oublier l'en-tête
Host:en HTTP/1.1 : les hébergeurs modernes renvoient une erreur 400. - Viser un site en HTTPS avec
GSMClienten clair : la connexion échoue ou renvoie une redirection 301 ; passer par SSL ou une API HTTP de test. - SIM data épuisée ou APN bridé : la connexion TCP se fait mais le transfert reste vide.
- Réutiliser le client sans
stopentre deux requêtes : vider le buffer ou recréer la connexion. - 3G coupée : débit GPRS réel très faible (repli 2G), prévoir des timeouts larges côté serveur comme côté sketch.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
gsm-connexion.inoArduinoenvoi-sms.inoArduinohttp-get.inoArduinohttp-post-capteur.inoArduinoheure-gsm.inoArduinoappels.inoArduino