🛠 HTTP GET via GPRS
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
- Placa Arduino MKR GSM 1400 + antena U.FL
- micro-SIM de datos con APN conocido, código PIN desactivado
- Batería LiPo ≥ 1500 mAh
- Biblioteca MKRGSM; secretos en la pestaña Secret del IDE
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
- Leer el cuerpo antes de que termine: bucle sobre
availablecon un tiempo de inactividad en lugar de un únicowhileinstantáneo en un bucle principal rápido. - Olvidar la cabecera
Host:en HTTP/1.1: los alojamientos modernos devuelven un error 400. - Apuntar a un sitio HTTPS con
GSMClienten claro: la conexión falla o devuelve una redirección 301; usa SSL o una API HTTP de prueba. - SIM de datos agotada o APN restringido: la conexión TCP se establece pero la transferencia permanece vacía.
- Reutilizar el cliente sin
stopentre dos solicitudes: vacía el búfer o recrea la conexión. - 3G cortada: el caudal real de GPRS es muy bajo (repliegue a 2G), prevé tiempos de espera amplios tanto en el servidor como en el sketch.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
gsm-connexion.inoArduinoenvoi-sms.inoArduinohttp-get.inoArduinohttp-post-capteur.inoArduinoheure-gsm.inoArduinoappels.inoArduino