http-post-capteur.ino

Arduino MKR GSM 1400 · Archivo : http-post-capteur.ino · Lenguaje : Arduino · Uso : Publier une mesure de capteur vers une API par POST HTTP

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();
  }
}

← Volver a la ficha