point-acces.ino
Sin red disponible, la Nano ESP32 se convierte en su propio punto de acceso: un móvil unido a NanoESP32-Config abre la página de ajustes alojada en la placa. El patrón de configuración de productos autónomos en 40 líneas.
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 sola, un móvil o portátil para conectarse.
Cableado
Sin cableado; el AP aparece con IP fija 192.168.4.1 por el lado de la placa.
Funcionamiento
WiFi.softAP lanza el beacon WPA2; WebServer gestiona GET/POST con manejadores lambda. handleClient() en loop() atiende una petición por vuelta: basta para configurar.
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
Cambia automáticamente a AP si la red principal falla 3 veces, o sirve una página con el escaneo WiFi para elegir la SSID.
point-acces.ino
// Mode point d'acces : la Nano ESP32 devient elle-meme le routeur.
// Utile pour la configuration ou l'usage sans infrastructure.
#include <WiFi.h>
#include <WebServer.h>
WebServer serveur(80);
const char AP_SSID[] = "NanoESP32-Config";
const char AP_PASS[] = "config1234"; // WPA2, min 8 caracteres
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_AP);
WiFi.softAP(AP_SSID, AP_PASS);
Serial.print(F("AP "));
Serial.print(AP_SSID);
Serial.print(F(" — IP "));
Serial.println(WiFi.softAPIP()); // typiquement 192.168.4.1
serveur.on("/", []() {
serveur.send(200, "text/html",
"<h3>Nano ESP32</h3>"
"<form method='POST' action='/reglages'>"
"Seuil <input name='seuil' value='512'>"
"<button>Enregistrer</button></form>");
});
serveur.on("/reglages", HTTP_POST, []() {
int seuil = serveur.arg("seuil").toInt();
Serial.println("seuil=" + String(seuil));
serveur.send(200, "text/plain", "enregistre");
});
serveur.begin();
}
void loop() { serveur.handleClient(); }