serveur-capteur.ino

Arduino Nano ESP32 · Archivo : serveur-capteur.ino · Lenguaje : Arduino · Uso : Exposer une mesure en JSON sur le réseau local

La Nano ESP32 se convierte en micro-servidor: la ruta /mesure devuelve la última lectura ADC en JSON, con anti-refresco a 2 Hz. Un curl, Node-RED o un navegador bastan para consumir el dato: interoperabilidad sin broker.

Hardware

Un Arduino Nano ESP32 (ESP32-S3 de doble núcleo, Wi-Fi 2,4 GHz + Bluetooth Low Energy, formato físico compatible con el Nano, USB nativo, pines de 3,3 V únicamente). Nano ESP32 en el WiFi local, sensor 0-3,3 V en A0.

Cableado

Sin cableado de red; la IP impresa por serie es la URL base de la API.

Funcionamiento

WebServer registra lambdas por ruta; handleClient() en loop() atiende las peticiones entrantes. La caché de 500 ms protege el ADC de las ráfagas de refresco.

Ejecución

Instala el paquete Arduino ESP32 Boards (o sigue la guía oficial del Nano ESP32), selecciona Arduino Nano ESP32 y carga. Los pines son de 3,3 V: nunca envíes 5 V a una entrada. El monitor serie usa el USB nativo.

Variantes

Añade una ruta POST para recibir consignas, o protege con una clave en la URL si la red no es de confianza.

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

← Volver a la ficha