http-get.ino

Arduino MKR GSM 1400 · Fichier : http-get.ino · Langage : Arduino · Usage : Récupérer une page ou API HTTP via la data GPRS

Client HTTP par-dessus la data GPRS du MKR GSM 1400 : connexion au réseau, attachement GPRS, puis requête GET vers une API météo ouverte. La réponse brute s'affiche sur le port série, prête à être parsée pour un tableau de bord autonome.

Matériel requis

Une Arduino MKR GSM 1400 (microcontrôleur SAMD21, modem cellulaire 2G/GPRS, antenne externe, alimentation par batterie LiPo sur le connecteur J6 ou par USB). Une carte SIM avec option data (forfait IoT 2G), antenne 2G, et un accès Internet pour joindre l'API distante.

Câblage

Aucun câblage externe ; vérifiez simplement l'APN de l'opérateur dans le code, il diffère selon les opérateurs IoT.

Fonctionnement

attachGPRS négocie un bearer données puis l'adresse IP. GSMClient ouvre une socket TCP sur le port 80 ; on écrit l'en-tête HTTP à la main, puis on lit le flux jusqu'à déconnexion ou timeout de 15 s.

Exécution

Dans l'IDE Arduino, installez le package Arduino SAMD Boards, sélectionnez la carte MKR GSM 1400, puis téléversez. Les exemples réseau supposent une carte SIM data active insérée, broche antenne vissée, et un réseau 2G encore couvert dans votre région.

Variantes

Passez en HTTPS avec GSMClientSecure et setCertificate, publiez vers votre propre serveur, ou remplacez l'API météo par n'importe quel endpoint HTTP compatible 2G.

http-get.ino

// Requête HTTP GET via GPRS (MKR GSM 1400, bibliothèque MKRGSM).
#include <MKRGSM.h>

const char PIN_SIM[] = "0000";
const char APN[] = "sl2g"; // APN data 2G de votre opérateur

GSM gsm;
GSMGPRS gprs;
GSMClient client;

const char HOTE[] = "api.open-meteo.com";
const char CHEMIN[] = "/v1/forecast?latitude=45.0&longitude=2.0&current=temperature_2m";

void setup() {
  Serial.begin(9600);
  while (!Serial);
  if (gsm.begin(PIN_SIM) != GSM_READY) while (true);
  while (gsm.waitNetworkReady(30) != ON_NET);
  if (gprs.attachGPRS(APN, GPRS_AUTOMATIC_BEARER, 1) != GPRS_READY) {
    Serial.println(F("GPRS KO"));
    while (true);
  }
  if (client.connect(HOTE, 80)) {
    client.print(String("GET ") + CHEMIN + " HTTP/1.1\r\n");
    client.print("Host: " + String(HOTE) + "\r\n");
    client.print("Connection: close\r\n\r\n");
    unsigned long debut = millis();
    while (client.connected() && millis() - debut < 15000) {
      while (client.available()) Serial.write(client.read());
    }
    client.stop();
  } else Serial.println(F("Connexion TCP KO"));
}

void loop() {}

← Retour à la fiche