http-post-capteur.ino
Télémétrie autonome par GPRS : toutes les minutes, le MKR GSM 1400 lit une entrée analogique, construit un petit JSON et le poste vers une API HTTP. Un patron complet de station de mesure sur le terrain, sans WiFi ni câble.
Matériel requis
Une Arduino MKR GSM 1400 (microcontrôleur SAMD21, modem cellulaire 2G/GPRS, antenne externe, alimentation par batterie LiPo sur le connecteur J6 ou par USB). SIM data 2G, antenne, et une entrée analogique (potentiomètre ou capteur 0-3,3 V sur A1) pour l'exemple.
Câblage
Capteur sur A1 et GND, 3,3 V pour l'alimentation du capteur ; ne dépassez jamais 3,3 V sur les broches SAMD21.
Fonctionnement
analogRead convertit la tension (référence 3,3 V, 10 bits), le JSON est assemblé avec String, puis POSTé avec Content-Length calculé. La réponse du serveur est vidée pour libérer la socket.
Exécution
Dans l'IDE Arduino, installez le package Arduino SAMD Boards, sélectionnez la carte MKR GSM 1400, puis téléversez. Les exemples réseau supposent une carte SIM data active insérée, broche antenne vissée, et un réseau 2G encore couvert dans votre région.
Variantes
Ajoutez BME280 sur I2C pour température/humidité, passez en HTTPS, ou regroupez plusieurs mesures par POST pour économiser le forfait data.
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();
}
}