http-get.ino
Cliente HTTP sobre los datos GPRS del MKR GSM 1400: conectarse a la red, adjuntar GPRS y lanzar un GET a una API meteorológica abierta. La respuesta cruda se imprime en el puerto serie, lista para parsear en un panel autónomo.
Hardware
Una Arduino MKR GSM 1400 (microcontrolador SAMD21, módem celular 2G/GPRS, antena externa, alimentada por batería LiPo en el conector J6 o por USB). Una SIM con opción de datos (plan IoT 2G), la antena 2G y acceso a Internet para llegar a la API remota.
Cableado
Sin cableado externo; solo revisa el APN del operador en el código, cambia según el operador IoT.
Funcionamiento
attachGPRS negocia un bearer de datos y la dirección IP. GSMClient abre un socket TCP en el puerto 80; la cabecera HTTP se escribe a mano y el flujo se lee hasta la desconexión o 15 s de espera.
Ejecución
En el IDE de Arduino, instala el paquete Arduino SAMD Boards, selecciona la placa MKR GSM 1400 y carga. Los ejemplos de red suponen una SIM de datos activa insertada, la antena enroscada y cobertura 2G todavía disponible en tu zona.
Variantes
Pásate a HTTPS con GSMClientSecure y setCertificate, publica en tu propio servidor o apunta el sketch a cualquier endpoint HTTP compatible con 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¤t=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() {}