🛠 HTTP GET via GPRS

Arduino MKR GSM 1400 · intermediaire · Schéma : IMG-mkr-gsm-1400-intermediaire-3-mkrgsm-http-get.svg — Requête HTTP GET partant de la MKR GSM 1400 via l'antenne vers une antenne relais puis un serveur web, la réponse s'affichant sur la console USB.

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

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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels