http-post.ino

Arduino MKR WiFi 1010 · Fichier : http-post.ino · Langage : Arduino · Usage : Publier une mesure vers une API REST en POST

Télémétrie locale de la MKR WiFi 1010 : chaque minute, une mesure analogique part en JSON POST vers une API de votre réseau (Flask, Node, InfluxDB…). Le gabarit exact de ce qu'attendent les bases de séries temporelles, testable en dix lignes de serveur Python.

Matériel requis

Une Arduino MKR WiFi 1010 (microcontrôleur SAMD21, module Wi-Fi WINC1500, pas de Bluetooth, alimentation USB ou LiPo sur J6). MKR WiFi 1010 sur le LAN, machine d'écoute avec un serveur HTTP acceptant POST (IP fixe conseillée).

Câblage

Aucun câblage ; fixez l'IP du serveur via bail DHCP statique pour éviter les surprises.

Fonctionnement

Le corps JSON est construit avec String, Content-Length calculé automatiquement. La réponse du serveur est lue et jetée pour libérer la socket proprement avant le prochain cycle.

Exécution

Installez Arduino SAMD Boards et la bibliothèque WiFi101, sélectionnez la carte, téléversez. Le Wi-Fi fonctionne en 2,4 GHz uniquement : vérifiez que votre point d'accès n'est pas en 5 GHz seul.

Variantes

Ajoutez un en-tête d'authentification (Bearer), passez en HTTPS avec WiFiSSLClient, ou empilez les mesures en RAM pour un POST groupé économique.

http-post.ino

// POST JSON periodique MKR WiFi 1010 vers une API locale (Flask/Node).
#include <SPI.h>
#include <WiFi101.h>

const char SSID[] = "MonReseau";
const char PASS[] = "motdepassewifi";
const char SERVEUR[] = "192.168.1.50"; // machine d'ecoute
const int PORT = 5000;

WiFiClient client;
unsigned long dernier = 0;

void setup() {
  Serial.begin(9600);
  WiFi.begin(WPA_PASS_PHRASE, SSID, PASS);
  while (WiFi.status() != WL_CONNECTED) delay(100);
  Serial.println(WiFi.localIP());
}

void loop() {
  if (millis() - dernier < 60000) return; // 1/min
  dernier = millis();
  String json = "{\"capteur\":\"salon\",\"valeur\":" +
                String(analogRead(A1)) + "}";
  if (client.connect(SERVEUR, PORT)) {
    client.print(String("POST /mesures HTTP/1.1\r\nHost: ") + SERVEUR +
      "\r\nContent-Type: application/json\r\nContent-Length: " +
      json.length() + "\r\n\r\n" + json);
    delay(500);
    while (client.available()) client.read(); // vide la reponse
    client.stop();
    Serial.println("POST " + json);
  } else Serial.println(F("serveur KO"));
}

← Retour à la fiche