serveur-capteur.ino

Arduino Nano ESP32 · Fichier : serveur-capteur.ino · Langage : Arduino · Usage : Exposer une mesure en JSON sur le réseau local

La Nano ESP32 devient micro-serveur : la route /mesure renvoie la dernière lecture ADC en JSON, avec anti-fraîchissement à 2 Hz. Un curl, Node-RED ou un simple navigateur suffisent à consommer la donnée — l'interopérabilité sans broker.

Matériel requis

Un Arduino Nano ESP32 (ESP32-S3 double cœur, Wi-Fi 2,4 GHz + Bluetooth Low Energy, brochage physique compatible Nano, USB natif, broches 3,3 V uniquement). Nano ESP32 sur le WiFi local, capteur 0-3,3 V sur A0.

Câblage

Aucun câblage réseau ; l'IP affichée au série est l'URL de base de l'API.

Fonctionnement

WebServer enregistre des lambdas par route ; handleClient() dans loop() traite les requêtes entrantes. Le cache 500 ms protège l'ADC des rafales de rafraîchissement.

Exécution

Installez le package Arduino ESP32 Boards (ou le guide Nano ESP32 officiel), sélectionnez Arduino Nano ESP32, téléversez. Les broches sont en 3,3 V : n'envoyez jamais 5 V sur une entrée. Le moniteur série utilise l'USB natif.

Variantes

Ajoutez une route POST pour recevoir des consignes, ou sécurisez avec une clé dans l'URL si le réseau n'est pas de confiance.

serveur-capteur.ino

// API JSON locale sur la Nano ESP32 : GET /mesure -> {"adc":1234}
// Reponse a l'auto-refresh d'un tableau de bord ou a un script curl.
#include <WiFi.h>
#include <WebServer.h>

const char SSID[] = "MonReseau";
const char PASS[] = "motdepassewifi";

WebServer serveur(80);
unsigned long dernier = 0;
int derniereValeur = 0;

void setup() {
  Serial.begin(115200);
  WiFi.begin(SSID, PASS);
  while (WiFi.status() != WL_CONNECTED) { delay(200); Serial.print('.'); }
  Serial.println(WiFi.localIP());

  serveur.on("/mesure", []() {
    if (millis() - dernier > 500) { // lecture fraiche max 2 Hz
      dernier = millis();
      derniereValeur = analogRead(A0);
    }
    serveur.send(200, "application/json",
                 "{\"adc\":" + String(derniereValeur) + "}");
  });
  serveur.onNotFound([]() { serveur.send(404, "text/plain", "introuvable"); });
  serveur.begin();
  Serial.println(F("API sur /mesure"));
}

void loop() { serveur.handleClient(); }

← Retour à la fiche