http-post-capteur.ino
Telemetría autónoma por GPRS: cada minuto el MKR GSM 1400 lee una entrada analógica, construye un JSON pequeño y lo envía por POST a una API HTTP. Un patrón completo de estación de campo sin WiFi ni cables.
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). SIM de datos 2G, antena y una entrada analógica (potenciómetro o sensor 0-3,3 V en A1) para este ejemplo.
Cableado
Sensor a A1 y GND, 3,3 V para alimentar el sensor; no superes nunca 3,3 V en los pines SAMD21.
Funcionamiento
analogRead convierte la tensión (referencia 3,3 V, 10 bits), el JSON se ensambla con String y se envía por POST con Content-Length calculado. La respuesta del servidor se vacía para liberar el socket.
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
Añade un BME280 por I2C para temperatura/humedad, usa HTTPS o agrupa varias medidas por POST para ahorrar datos del plan.
http-post-capteur.ino
// Publication periodique d'une mesure via POST JSON sur GPRS.
#include <MKRGSM.h>
const char PIN_SIM[] = "0000";
const char APN[] = "sl2g";
const char HOTE[] = "api.example.com";
GSM gsm; GSMGPRS gprs; GSMClient client;
const int BROCHE_ENTREE = A1;
unsigned long dernierEnvoi = 0;
void setup() {
Serial.begin(9600);
if (gsm.begin(PIN_SIM) != GSM_READY) while (true);
while (gsm.waitNetworkReady(30) != ON_NET);
gprs.attachGPRS(APN, GPRS_AUTOMATIC_BEARER, 1);
}
void loop() {
if (millis() - dernierEnvoi < 60000) return;
dernierEnvoi = millis();
int brut = analogRead(BROCHE_ENTREE);
String json = "{\"tension\":" + String(brut * (3.3 / 1023.0), 3) +
",\"uptime\":" + String(millis() / 1000) + "}";
if (client.connect(HOTE, 80)) {
client.print(String("POST /mesures HTTP/1.1\r\nHost: ") + HOTE +
"\r\nContent-Type: application/json\r\nContent-Length: " +
json.length() + "\r\n\r\n" + json);
delay(1500); // laisser arriver la reponse serveur
client.stop();
}
}