Trovata soluzione guardando l'esempio CaptivePortal disponibile per gli esp. Diciamo che non funziona nel modo in cui pensavo, ma funziona. Ecco il codice completo che ho testato:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <DNSServer.h>
const char *ssid = "ESPap";
ESP8266WebServer server(80);
byte mac[6];
IPAddress apIP(192, 168, 4, 1);
IPAddress netMsk(255, 255, 255, 0);
const byte DNS_PORT = 53;
DNSServer dnsServer;
const char *myHostname = "esp8266";
void handleRoot() {
server.send(200, "text/html", "<h1>You are connected</h1>");
}
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(apIP, apIP, netMsk);
WiFi.softAP(ssid);
delay(500); // Without delay I've seen the IP address blank
IPAddress IP = WiFi.softAPIP();
dnsServer.setErrorReplyCode(DNSReplyCode::NoError);
dnsServer.start(DNS_PORT, "*", apIP);
server.on("/", handleRoot);
server.begin();
if (!MDNS.begin("esp8266", IP)) {
Serial.println("Error setting up MDNS responder!");
while (1) {
delay(1000);
}
}
MDNS.addService("http", "tcp", 80);
WiFi.macAddress(mac);
Serial.print("MAC: ");
Serial.print(mac[0],HEX);
Serial.print(":");
Serial.print(mac[1],HEX);
Serial.print(":");
Serial.print(mac[2],HEX);
Serial.print(":");
Serial.print(mac[3],HEX);
Serial.print(":");
Serial.print(mac[4],HEX);
Serial.print(":");
Serial.println(mac[5],HEX);
}
void loop() {
dnsServer.processNextRequest();
server.handleClient();
}
In pratica così facendo, metto il modalità AP l'esp, mi collego alla sua rete ed una volta fatto qualsiasi pagina venga richiesta mi rimanda al suo ip.
Anche la stringa dell'hostname rimanderà quindi a quell ip, ottenendo l'apertura della pagina.
Solo che non è proprio una soluzione pulita.