serveur-capteur.ino
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(); }