🛠 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.

Objetivos

Obtener una página o una API mediante HTTP en la red celular con GSMClient + GPRS: la API de la biblioteca MKRGSM reproduce intencionalmente las clases de las bibliotecas Ethernet/WiFi, por lo que casi todo el código de red estándar de Arduino se puede portar casi tal cual. Escribimos la solicitud HTTP a mano (sin biblioteca HTTP) para entender el protocolo, y luego anotamos las opciones de HTTPS.

Material

Código completo

#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 requete
}

Verificación esperada

La consola muestra la cabecera HTTP y luego el cuerpo de la página (el « <!doctype html> » de ejemplo.org). La conexión debe cerrarse correctamente (Connection: close) para que available deje de devolver datos. Para HTTPS: o bien GSMSSLClient (perfiles SSL del módulo), o bien BearSSLClient en el lado SAMD21 apoyado en el chip de cifrado integrado ATECC508 — atención, el almacén de certificados raíz de las versiones antiguas de MKRGSM (última 1.4.2, 2019) ha tenido que ser reemplazado con las rotaciones de CA: actualiza la biblioteca.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales