Configurazione WiFi Modalità Access Point e Salvataggio dedenzielle Crali

Ciao a tutti,

sto lavorando a un codice che permette al dispositivo ESP8266 di connettersi a una rete WiFi salvata o se non è disponibile di avviare un Access Point per configurare una nuova connessione WiFi tramite un'interfaccia web.

questo è il codice:


#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>

ESP8266WebServer server(80);

const char* apSSID = "ESP8266_AP";
const char* apPassword = "12345678";

void setup() {
  Serial.begin(115200);
  EEPROM.begin(512);

  // Controlla se ci sono credenziali WiFi salvate
  char ssid[32];
  char password[32];
  EEPROM.get(0, ssid);
  EEPROM.get(32, password);

  if (strlen(ssid) > 0 && strlen(password) > 0) {
    WiFi.begin(ssid, password);
    unsigned long startAttemptTime = millis();

    // Attendi la connessione
    while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 10000) {
      delay(100);
    }

    if (WiFi.status() != WL_CONNECTED) {
      startAPMode();
    } else {
      Serial.println("Connected to WiFi");
      Serial.print("IP Address: ");
      Serial.println(WiFi.localIP());
    }
  } else {
    startAPMode();
  }

  server.on("/", handleRoot);
  server.on("/network", handleNetwork);
  server.on("/connect", handleConnect);
  server.begin();
}

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

void startAPMode() {
  WiFi.softAP(apSSID, apPassword);
  Serial.println("AP Mode Started");
  Serial.print("IP Address: ");
  Serial.println(WiFi.softAPIP());
}

void handleRoot() {
  String html = "<html><head><title>ESP8266 Network</title></head><body>";
  html += "<h1>ESP8266 Network Configuration</h1>";
  html += "<a href=\"/network\">Configure Network</a>";
  html += "</body></html>";
  server.send(200, "text/html", html);
}

void handleNetwork() {
  String html = "<html><head><title>ESP8266 Network</title></head><body>";
  html += "<h1>Configure Network</h1>";
  html += "<form action=\"/connect\" method=\"POST\">";
  html += "<label for=\"ssid\">Select Network:</label>";
  html += "<select name=\"ssid\" id=\"ssid\">";
  
  int n = WiFi.scanNetworks();
  for (int i = 0; i < n; ++i) {
    html += "<option value=\"" + WiFi.SSID(i) + "\">" + WiFi.SSID(i) + "</option>";
  }
  
  html += "</select><br>";
  html += "<label for=\"password\">Password:</label>";
  html += "<input type=\"password\" name=\"password\" id=\"password\"><br>";
  html += "<input type=\"submit\" value=\"Connect\">";
  html += "</form>";
  html += "</body></html>";
  server.send(200, "text/html", html);
}

void handleConnect() {
  if (server.hasArg("ssid") && server.hasArg("password")) {
    String ssid = server.arg("ssid");
    String password = server.arg("password");

    // Salva le credenziali in EEPROM
    EEPROM.put(0, ssid.c_str());
    EEPROM.put(32, password.c_str());
    EEPROM.commit();

    // Connetti alla rete WiFi
    WiFi.begin(ssid.c_str(), password.c_str());
    unsigned long startAttemptTime = millis();

    // Attendi la connessione
    while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 10000) {
      delay(100);
    }

    if (WiFi.status() == WL_CONNECTED) {
      server.send(200, "text/html", "<html><body><h1>Connected!</h1><p>Manual restart required.</p></body></html>");
      WiFi.softAPdisconnect(true); // Disattiva la modalità AP
    } else {
      server.send(200, "text/html", "<html><body><h1>Failed to connect.</h1><p>Manual restart required.</p></body></html>");
    }
  } else {
    server.send(400, "text/html", "<html><body><h1>Missing SSID or Password</h1></body></html>");
  }
}

fino al riavvio tutto funziona correttamente, ma appena riavviato ri-abilitra la modalità AP. cosa sbaglio nel codice?
digita o incolla il codice qui

Buonasera e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE (... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.