Importare variabili da form html ESP8266

Eccomi di nuovo qua :rofl: :sunglasses: :laughing:
Prova a dare un'occhiata a questo tutorial che mi sembra un buon punto di partenza.

Rispetto a quanto hai già fatto ieri ti dovrebbe risultare abbastanza semplice aggiungere le opportune funzioni di "handling" per gestire le tue richieste web fatte con le form HTML.

P.S.
In questo contesto sono utilissimi gli strumenti di analisi web che tutti i browser più importanti mettono a disposizione (tasto F12)
Prova a metterti nella tab "rete - network" ad esempio e vedi cosa succede quando premi il pulsante di submit della form ad esempio.

Io comunque continuo a NON capire perché vi complicate così la vita quando, per gestire queste cose, c'è l'ottima libreria webbino (in Megatopic) che gestisce il tutto per voi ... basta disegnare le pagine, metterle dove si vuole (Flash, LittleFS, SD) e il gioco è fatto ...

Mah ... :roll_eyes:

Guglielmo

Il fatto che ci sia una libreria, per quanto ottima essa possa essere, non è che esclude a priori tutto il resto.
Inoltre, se lo scopo del forum è aiutare chi vuole imparare, secondo me a maggior ragione andrebbero evitate le soluzioni che fanno tutto in background.

Credo che imparare i meccanismi che sono alla base di una richiesta web >> risposta del server e tutte le tecnologie web connesse, sia didatticamente più valido rispetto all'imparare come usare una specifica libreria.

Per quanto mi riguarda, l'ho provata più di qualche volta, ma con ESP8266/ESP32 non mi ha convinto ad abbandonare le librerie già incluse nel core che fanno egregiamente il loro lavoro senza dover aggiungere ulteriori dipendenze ai progetti. Non ci vedo alcun vantaggio.

Certo ... SE sei interessato alle applicazioni web e a come funzionano ...

... personalmente non me ne può fregare di meno :grin:, mi interessa il mio codice sul microcontrollore e raggiungere il risultato che mi occorre in modo pulito ed efficiente, quindi ... mi dedico al codice 'C/C++' relativo alla risoluzione del mio problema, non ad imparare una parte (quella del HTML) per cui non ho alcun interesse (... non faccio mica il web designer). :wink:

Ribadisco ... opinione del tutto personale eh, ciascuno poi sceglie la strada che preferisce :slight_smile:

Guglielmo

Ciao Chris...io ho il tuo stesso problema, sei riuscito a risolvere?? :slight_smile:

@kinghe97 : Buongiorno, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà, quindi ti consiglio di farla al più presto. :wink:

Fatto!! :wink:

@kinghe97, @Chris301197, se può tornarvi utile ho creato una libreria che incapsula le funzioni dell'esempio di cui si parlava aggiungendo anche un paio di funzionalità in più.

https://github.com/cotestatnt/esp-fs-webserver/

Ad esempio, oltre alla pagina "built-in" /edit che consente di modificare i file contenuti nel filesystem, ho aggiunto la pagina /setup che consente di impostare le credenziali WiFi ed altre opzioni liberamente configurabili dall'utente allo stesso modo in cui fanno le librerie "wifi manager".

Per ora ho solo caricato il progetto sviluppato con VScode + platformio cosi com'è (se avete questi tool installati, basta scaricare tutto il repo e compilare). Più in là magari lo riorganizzo proprio come libreria importabile nell'IDE. Lo è anche ora ovviamente, ma dovete copiare il contenuto della cartella lib manualmente dove sono salvate le librerie dell'IDE Arduino.

L'esempio mostra anche come è possibile aggiungere degli handler "custom" per le pagine/comandi con il classico led che si accende e spegne da remoto.

P.S.
Per ora è testato solo su ESP8266

Studio questi sketch e vi farò sapere, al momento grazie a tutti :blush: :blush: :blush:

Ho riorganizzato il repository come libreria Arduino e aggiunto qualche esempio "pratico".

A breve faccio richiesta per aggiungerla anche al gestore librerie.

Per questa cosa, hai già visto quanto ho scritto QUI ? :wink:

Guglielmo

Si Guglielmo ho già installato il tool per il lint ed eseguito con successo.
Volevo giusto fare qualche ulteriore test e poi faccio la richiesta di pull come da istruzioni.

:+1: :+1: :+1:

Ottimo !!! :slight_smile:

Guglielmo

Ho trovato uno sketch che fà proprio al caso mio, lo stavo analizzando e tutto funziona, vedo la rete sul mio smartphone e si connette benissimo, solo che nel seriale mi dà WiFi Failed! e non mi inizializza la pagina web quando inserisco l'ip fornitomi sempre dal seriale. Dov'è che sbaglio?

#include <Arduino.h>
  #include <ESP8266WiFi.h>
  #include <ESPAsyncTCP.h>
  #include <Hash.h>
  #include <FS.h>
#include <ESPAsyncWebServer.h>
#include <WiFiClient.h>
#ifndef APSSID
#define APSSID "Sono iooo"
#define APPSK  "12345678"
#endif

AsyncWebServer server(80);

// REPLACE WITH YOUR NETWORK CREDENTIALS
const char* ssid = APSSID;
const char* password = APPSK;

const char* PARAM_STRING = "inputString";
const char* PARAM_INT = "inputInt";
const char* PARAM_FLOAT = "inputFloat";

// HTML web page to handle 3 input fields (inputString, inputInt, inputFloat)
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html><head>
  <title>ESP Input Form</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script>
    function submitMessage() {
      alert("Saved value to ESP SPIFFS");
      setTimeout(function(){ document.location.reload(false); }, 500);   
    }
  </script></head><body>
  <form action="/get" target="hidden-form">
    inputString (current value %inputString%): <input type="text" name="inputString">
    <input type="submit" value="Submit" onclick="submitMessage()">
  </form><br>
  <form action="/get" target="hidden-form">
    inputInt (current value %inputInt%): <input type="number " name="inputInt">
    <input type="submit" value="Submit" onclick="submitMessage()">
  </form><br>
  <form action="/get" target="hidden-form">
    inputFloat (current value %inputFloat%): <input type="number " name="inputFloat">
    <input type="submit" value="Submit" onclick="submitMessage()">
  </form>
  <iframe style="display:none" name="hidden-form"></iframe>
</body></html>)rawliteral";

void notFound(AsyncWebServerRequest *request) {
  request->send(404, "text/plain", "Not found");
}

String readFile(fs::FS &fs, const char * path){
  Serial.printf("Reading file: %s\r\n", path);
  File file = fs.open(path, "r");
  if(!file || file.isDirectory()){
    Serial.println("- empty file or failed to open file");
    return String();
  }
  Serial.println("- read from file:");
  String fileContent;
  while(file.available()){
    fileContent+=String((char)file.read());
  }
  file.close();
  Serial.println(fileContent);
  return fileContent;
}

void writeFile(fs::FS &fs, const char * path, const char * message){
  Serial.printf("Writing file: %s\r\n", path);
  File file = fs.open(path, "w");
  if(!file){
    Serial.println("- failed to open file for writing");
    return;
  }
  if(file.print(message)){
    Serial.println("- file written");
  } else {
    Serial.println("- write failed");
  }
  file.close();
}

// Replaces placeholder with stored values
String processor(const String& var){
  //Serial.println(var);
  if(var == "inputString"){
    return readFile(SPIFFS, "/inputString.txt");
  }
  else if(var == "inputInt"){
    return readFile(SPIFFS, "/inputInt.txt");
  }
  else if(var == "inputFloat"){
    return readFile(SPIFFS, "/inputFloat.txt");
  }
  return String();
}

void setup() {
  Serial.begin(115200);
  // Initialize SPIFFS
  #ifdef ESP32
    if(!SPIFFS.begin(true)){
      Serial.println("An Error has occurred while mounting SPIFFS");
      return;
    }
  #else
    if(!SPIFFS.begin()){
      Serial.println("An Error has occurred while mounting SPIFFS");
      return;
    }
  #endif

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);
  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  if (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("WiFi Failed!");
    return;
  }
  Serial.println();
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());

  // Send web page with input fields to client
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html, processor);
  });

  // Send a GET request to <ESP_IP>/get?inputString=<inputMessage>
  server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
    String inputMessage;
    // GET inputString value on <ESP_IP>/get?inputString=<inputMessage>
    if (request->hasParam(PARAM_STRING)) {
      inputMessage = request->getParam(PARAM_STRING)->value();
      writeFile(SPIFFS, "/inputString.txt", inputMessage.c_str());
    }
    // GET inputInt value on <ESP_IP>/get?inputInt=<inputMessage>
    else if (request->hasParam(PARAM_INT)) {
      inputMessage = request->getParam(PARAM_INT)->value();
      writeFile(SPIFFS, "/inputInt.txt", inputMessage.c_str());
    }
    // GET inputFloat value on <ESP_IP>/get?inputFloat=<inputMessage>
    else if (request->hasParam(PARAM_FLOAT)) {
      inputMessage = request->getParam(PARAM_FLOAT)->value();
      writeFile(SPIFFS, "/inputFloat.txt", inputMessage.c_str());
    }
    else {
      inputMessage = "No message sent";
    }
    Serial.println(inputMessage);
    request->send(200, "text/text", inputMessage);
  });
  server.onNotFound(notFound);
  server.begin();
}

void loop() {
  // To access your stored values on inputString, inputInt, inputFloat
  String yourInputString = readFile(SPIFFS, "/inputString.txt");
  Serial.print("*** Your inputString: ");
  Serial.println(yourInputString);
  
  int yourInputInt = readFile(SPIFFS, "/inputInt.txt").toInt();
  Serial.print("*** Your inputInt: ");
  Serial.println(yourInputInt);
  
  float yourInputFloat = readFile(SPIFFS, "/inputFloat.txt").toFloat();
  Serial.print("*** Your inputFloat: ");
  Serial.println(yourInputFloat);
  delay(5000);
}

Se imposti l'esp in Access Point mode, il risultato di WiFi.status() è sempre diverso da WL_CONNECTED e quindi non esci mai dal while. Quello vale solo quando lo imposti in Station mode.

Piccolo consiglio, non prendere sketch a caso da internet nella speranza che si adattino al caso tuo, ma approfondisci il come fare una determinata cosa e poi scrivi il TUO sketch.

Essendo alle prime armi seguo altri esempi che poi personalizzando creo la funzione che mi serve. Inoltre avrei un piccolo problema, attraverso questo sketch ho creato anche una semplice pagina web che mi dovrebbe inviare dei parametri per il controllo di un onda triangolare. Nella sezione funzione sequenziale ho un blocco iframe con un solo tasto submit e 2 valori, ma quando premo questo tasto mi invia solo il secondo valore e non il primo. Sto usando un esp8266 in access point e valori salvati in file di testo txt su spiffs.
Grazie mille.

<!DOCTYPE HTML>
<html>
<head>
  <title>ESP Input Form</title>
  <meta content="width=device-width, initial-scale=1" name="viewport" /><script>
    function submitMessage() {
      alert("Valori inviati!");
      setTimeout(function(){ document.location.reload(false); }, 500);   
    }
  </script>
</head>
<body>
<h2 style="text-align: center;"><span style="color:#0099ff;"><strong><span style="font-family:verdana,geneva,sans-serif;">Pannello di controllo GalvoScanner</span></strong></span></h2>

<p style="text-align: center;"><font face="verdana, geneva, sans-serif"><b>Lughezza fascio</b></font></p>

<form action="/get" target="hidden-form">
<p style="text-align: center;">Lunghezza (Valore attuale:&nbsp;%Lunghezza% mm, Max=4000): <input maxlength="4" name="Lunghezza" type="text" /> <input onclick="submitMessage()" type="submit" value="Invia" /></p>
</form>

<p style="text-align: center;">&nbsp;</p>

<p style="text-align: center;"><b style="font-family: verdana, geneva, sans-serif; text-align: center;">Funzione ciclica</b></p>

<form action="/get" target="hidden-form">
<p style="text-align: center;">Frequenza (Valore attuale&nbsp;%Frequenza% mHz): <input name="Frequenza" type="number " /> <input onclick="submitMessage()" type="submit" value="Submit" /></p>
</form>

<p style="text-align: center;">&nbsp;</p>

<p style="text-align: center;"><b style="text-align: center; font-family: verdana, geneva, sans-serif;">Funzione sequenziale</b></p>

<form action="/get" target="hidden-form">
<p style="text-align: center;">Frequenza (Valore attuale&nbsp;%Frequenza% mHz): <input name="Frequenza" type="number " />

<form action="/get" target="hidden-form">
<p style="text-align: center;">inputFloat (current value %inputFloat%): <input name="inputFloat" type="number " /></p>

<p style="text-align: center;"><input onclick="submitMessage()" type="submit" value="Submit" /></p>
</form>

<p style="text-align: center;">&nbsp;</p>

<p><iframe name="hidden-form" style="display:none"></iframe></p>

<p>&nbsp;</p>
</body>
</html>

Il tuo codice HTML è un po' confuso: il blocco di cui parli non è un iframe, ma un form.
Non ti funziona come ti aspetti perché hai inserito due volte il tag di apertura <form> prima di chiuderlo con </form>

<form action="/get" target="hidden-form">

Non mi è molto chiaro perché hai usato il blocco iframe come target del form, ma nascosto.
Forse vuoi evitare il reload che di default viene fatto dopo il submit...?

Inoltre con le form è preferibile associare la funzione Javascript NON al pulsante, ma alla form stessa (questo perché esistono diversi tipi di pulsanti con dei comportamenti predefiniti: submit, reset etc etc)

Mi sono permesso di ri-organizzare il tuo HTML in un modo che secondo me è un po' più "pulito"

<!DOCTYPE HTML>
<html>
<head>
  <title>ESP Input Form</title>
  <meta content="width=device-width, initial-scale=1" name="viewport" />
  
  <style>
    body {
      font-family: verdana,geneva,sans-serif;
      text-align: center;
    }
    label {
      font-family: "Times New Roman", Times, serif;
    }
    h2 {
      color: #0099ff;
    }
  </style>

  <script>
    function submitMessage(inputs) {
      var msg = "Valori inviati: \n";
      // Iterate over the form controls
      for (i = 0; i < inputs.length; i++) {
        if (inputs[i].nodeName === "INPUT" && inputs[i].type === "number") {
          msg += inputs[i].name + ': ' + inputs[i].value + '\n';
        }
      }
      alert(msg);
    }
  </script>
</head>

<body>
<h2>Pannello di controllo GalvoScanner</h2>

<h4>Lughezza fascio</h4>
<form action="/get" target="hidden-frame" onsubmit="submitMessage(this.elements)">
  <label for="lunghezza">Lunghezza (Valore attuale&nbsp;%Lunghezza% mm, Max=4000):</label>
  <input maxlength="4" name="Lunghezza" type="number" />
  <input type="submit" value="Invia" />
</form>
<br>

<h4>Funzione ciclica</h4>
<form action="/get" target="hidden-frame" onsubmit="submitMessage(this.elements)">
  <label for="Frequenza">Frequenza (Valore attuale&nbsp;%Frequenza% mHz):</label>
  <input name="Frequenza" type="number" /> 
  <input type="submit" value="Invia" />
</form>
<br>

<h4>Funzione sequenziale</h4>
<form action="/get" target="hidden-frame" onsubmit="submitMessage(this.elements)">
  <label for="frequenza">Frequenza (Valore attuale&nbsp;%Frequenza% mHz): </label>
  <input name="frequenza" type="number" />
  <br>
  <label for="inputFloat">inputFloat (current value %inputFloat%): </label>
  <input name="inputFloat" type="number" step="0.1"/>
  <br><br>
  <input type="submit" value="Invia"/>
</form>

<iframe name="hidden-frame" style="display:none"></iframe>

</body>
</html>

Si, semplicemente perché salvo i valori in alcuni file txt caricati sulla eeprom con i comandi spiffs per nascondere i valori dal link della pagina. Il mio progetto si basa su una connessione access point che deve funzionare anche senza internet e senza modem locale. Per il momento grazie mille, provo e vi farò sapere

Ho provato ad eliminare la doppia apertura dei moduli form e, quindi ad aprirlo e chiuderlo 1 sola volta.
Ho provato anche con il documento da te steso ed ha qualche funzionalità in più, ma una volta che invio i 2 valori nella funzione sequenziale, mi invia solo input float e non la frequenza... :sob: :sob: :sob: come devo fare? Per facilità carico tutto il mio sketch.

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <Hash.h>
#include <FS.h>
#include <ESPAsyncWebServer.h>
#include <WiFiClient.h>
#ifndef APSSID
#define APSSID "Sono iooo"
#define APPSK  "12345678"
#endif

AsyncWebServer server(80);

// REPLACE WITH YOUR NETWORK CREDENTIALS
const char* ssid = APSSID;
const char* password = APPSK;

const char* PARAM_STRING = "inputString";
const char* PARAM_INT = "inputInt";
const char* Lunghezza = "Lunghezza";
const char* Frequenza = "Frequenza";
const char* PARAM_FLOAT = "inputFloat";

// HTML web page to handle 3 input fields (inputString, inputInt, inputFloat)
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML>
<html>
<head>
  <title>GalvoScanner</title>
  <meta content="width=device-width, initial-scale=1" name="viewport" />
  <style type="text/css">body {
      font-family: verdana,geneva,sans-serif;
      text-align: center;
    }
    label {
      font-family: "Times New Roman", Times, serif;
    }
    h2 {
      color: #0099ff;
    }
  </style>
  <script>
    function submitMessage(inputs) {
      var msg = "Valori inviati: \n";
      // Iterate over the form controls
      for (i = 0; i < inputs.length; i++) {
        if (inputs[i].nodeName === "INPUT" && inputs[i].type === "number") {
          msg += inputs[i].name + ': ' + inputs[i].value + '\n';
        }
      }
      alert(msg);
    }
  </script>
</head>
<body>
<h2>Pannello di controllo GalvoScanner</h2>

<p>&nbsp;</p>

<h4>Lughezza fascio</h4>

<form action="/get" onsubmit="submitMessage(this.elements)" target="hidden-frame"><label for="lunghezza">Lunghezza (Valore attuale&nbsp;%Lunghezza% mm, Max=4000):</label> <input maxlength="4" name="Lunghezza" type="number" /> <input type="submit" value="Invia" />&nbsp;</form>

<p>&nbsp;</p>

<h4>Funzione ciclica</h4>

<p>&nbsp;</p>

<form action="/get" onsubmit="submitMessage(this.elements)" target="hidden-frame"><label for="Frequenza">Frequenza (Valore attuale&nbsp;%Frequenza% mHz):</label> <input name="Frequenza" type="number" /> <input type="submit" value="Invia" />&nbsp;</form>

<p>&nbsp;</p>

<h4>Funzione sequenziale</h4>

<p>&nbsp;</p>

<form action="/get" onsubmit="submitMessage(this.elements)" target="hidden-frame">
<p><label for="frequenza">Frequenza (Valore attuale&nbsp;%Frequenza% mHz):</label></p>

<p><input name="frequenza" type="number" /></p>

<p><br />
<label for="inputFloat">inputFloat (current value %inputFloat%):</label></p>

<p><input name="inputFloat" step="0.1" type="number" /><br />
<br />
<input type="submit" value="Invia" />&nbsp;</p>
</form>

<p><iframe name="hidden-frame" style="display:none"></iframe></p>
</body>
</html>
)rawliteral";

void notFound(AsyncWebServerRequest *request) {
  request->send(404, "text/plain", "Not found");
}

String readFile(fs::FS &fs, const char * path){
  Serial.printf("Reading file: %s\r\n", path);
  File file = fs.open(path, "r");
  if(!file || file.isDirectory()){
    Serial.println("- empty file or failed to open file");
    return String();
  }
  Serial.println("- read from file:");
  String fileContent;
  while(file.available()){
    fileContent+=String((char)file.read());
  }
  file.close();
  Serial.println(fileContent);
  return fileContent;
}

void writeFile(fs::FS &fs, const char * path, const char * message){
  Serial.printf("Writing file: %s\r\n", path);
  File file = fs.open(path, "w");
  if(!file){
    Serial.println("- failed to open file for writing");
    return;
  }
  if(file.print(message)){
    Serial.println("- file written");
  } else {
    Serial.println("- write failed");
  }
  file.close();
}

// Replaces placeholder with stored values
String processor(const String& var){
  //Serial.println(var);
  if(var == "inputString"){
    return readFile(SPIFFS, "/inputString.txt");
  }
  else if(var == "inputInt"){
    return readFile(SPIFFS, "/inputInt.txt");
  }
  else if(var == "inputFloat"){
    return readFile(SPIFFS, "/inputFloat.txt");
  }
  else if(var == "Lunghezza"){
    return readFile(SPIFFS, "/Lunghezza.txt");
  }
  else if(var == "Frequenza"){
    return readFile(SPIFFS, "/Frequenza.txt");
  }
  return String();
}

void setup() {
  Serial.begin(115200);
  // Initialize SPIFFS
  #ifdef ESP32
    if(!SPIFFS.begin(true)){
      Serial.println("An Error has occurred while mounting SPIFFS");
      return;
    }
  #else
    if(!SPIFFS.begin()){
      Serial.println("An Error has occurred while mounting SPIFFS");
      return;
    }
  #endif

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);
  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  Serial.println();
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());

  // Send web page with input fields to client
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html, processor);
  });

  // Send a GET request to <ESP_IP>/get?inputString=<inputMessage>
  server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
    String inputMessage;
    // GET inputString value on <ESP_IP>/get?inputString=<inputMessage>
    if (request->hasParam(PARAM_STRING)) {
      inputMessage = request->getParam(PARAM_STRING)->value();
      writeFile(SPIFFS, "/inputString.txt", inputMessage.c_str());
    }
    // GET inputInt value on <ESP_IP>/get?inputInt=<inputMessage>
    else if (request->hasParam(PARAM_INT)) {
      inputMessage = request->getParam(PARAM_INT)->value();
      writeFile(SPIFFS, "/inputInt.txt", inputMessage.c_str());
    }
    // GET inputFloat value on <ESP_IP>/get?inputFloat=<inputMessage>
    else if (request->hasParam(PARAM_FLOAT)) {
      inputMessage = request->getParam(PARAM_FLOAT)->value();
      writeFile(SPIFFS, "/inputFloat.txt", inputMessage.c_str());
    }
    else if (request->hasParam(Lunghezza)) {
      inputMessage = request->getParam(Lunghezza)->value();
      writeFile(SPIFFS, "/Lunghezza.txt", inputMessage.c_str());
    }
    else if (request->hasParam(Frequenza)) {
      inputMessage = request->getParam(Frequenza)->value();
      writeFile(SPIFFS, "/Frequenza.txt", inputMessage.c_str());
    }
    else {
      inputMessage = "No message sent";
    }
    Serial.println(inputMessage);
    request->send(200, "text/text", inputMessage);
  });
  server.onNotFound(notFound);
  server.begin();
}

void loop() {
  // To access your stored values on inputString, inputInt, inputFloat
  String yourInputString = readFile(SPIFFS, "/inputString.txt");
  Serial.print("*** Your inputString: ");
  Serial.println(yourInputString);
  
  int yourInputInt = readFile(SPIFFS, "/inputInt.txt").toInt();
  Serial.print("*** Your inputInt: ");
  Serial.println(yourInputInt);
  
  int Lunghezza = readFile(SPIFFS, "/Lunghezza.txt").toInt();
  Serial.print("*** Lunghezza: ");
  Serial.println(Lunghezza);
  
  float yourInputFloat = readFile(SPIFFS, "/inputFloat.txt").toFloat();
  Serial.print("*** Your inputFloat: ");
  Serial.println(yourInputFloat);

  int Frequenza = readFile(SPIFFS, "/Frequenza.txt").toInt();
  Serial.print("*** Frequenza: ");
  Serial.println(Frequenza);  
  
  delay(4000);
}

Scusa è colpa mia: nello scrivere la parte HTML per abitudine non ho messo la maiuscola (è consuetudine usare tutto minuscolo per tag, id, nomi delle classi etc etc )

<input name="frequenza" type="number" />

Quindi il parametro che arriva al server con la richiesta /get è frequenza e non Frequenza che è invece la stringa che vai a cercare nello sketch e che ovviamente non trovi.