Esp8266 utilizzato come web Server (problema)

Buongiorno, è da giorni che provo ad usare un esp8266 per capirne bene il funzionamento, sto cercando di fare un programma che mi generi una pagina web in html nella quale si trovino dei data da scambiare con la scheda esp8266.
Sono riuscito a creare una pagina html per il calcolo dell'area di un triangolo, vorrei inserire base e altezza sulla pagina web, ricevere i dati nella scheda, fare il calcolo dell'area e successivamente visualizzare il valore della variabile nella pagina html.
non riesco a capire come attribuire il valore di una variabile nell'ide arduino al valore di un input box della pagina html.
vi allego il codice, sapreste aiutarmi?

webserverhtml.ino (2.65 KB)

Come te la cavi con HTML, Javascript & Co.?

Un consiglio, lascia perdere questi pessimi esempi che creano delle pagine HTML tutte in RAM usando delle variabili String.

Nell'IDE c'è l'ottimo esempio FSBrowser che ti consente di caricare le pagine HTML e tutti i file necessari (CSS, JS, immagini etc etc ) direttamente dalla memoria flash dell'ESP.
E' incluso anche un file editor che puoi aprire dal browser per modificare/aggiungere file al tuo ESP senza dover ogni volta ricompilare tutto.

L'esempio può "spaventare" i neofiti perché ci sono tutte le funzioni necessarie per l'handling delle richieste del browser che puoi prenderle cosi come sono.

Io per semplificare lo sketch sposto tutto su un file webserver.h che includo poi quando mi serve, se vuoi ti giro un progetto di esempio fatto a partire da li.

Sinceramente non sono molto pratico con html e javascript, li ho trattati 5 anni fa a scuola ma dovrei rivedermeli.
Comunque grazie mille, mi sapresti indicare dove potrei controllare gli esempi di cui parli e dove posso documentarmi meglio?

Direttamente nell'IDE Arduino

File -> Esempi -> ESP8266WebServer -> FSBrowser

Per quanto riguarda il passaggio di valori al server, il modo migliore a mio avviso è di fare delle chiamate REST con un po' di Javascript lato browser.
Puoi usare l'oggetto XMLHttpRequest oppure il più recente (e flessibile) Fetch

https://developer.mozilla.org/it/docs/Web/API/XMLHttpRequest/Usare_XMLHttpRequest

Va bene grazie mille, puoi postarmi anche il progetto di esempio di cui parlavi?

spics:
puoi postarmi anche il progetto di esempio di cui parlavi?

Ti allego il progetto che è pensato per funzionare sia su ESP8266 che su ESP32. L'ho modificato un po' aggiungendo il classico esempio del led per mostrare il principio del funzionamento.

Non so che board usi tu, ma accertati che sia selezionato il giusto filesystem (se non c'è l'opzione vuol dire che usa quello di default che nelle ultime versioni del core ESP8266 per Arduino è il LittleFS)

Per caricare i file nella memoria aggiungi questo plugin all'ide ESP8266 LittleFS data upload

Edit:
Ho modificato un po' lo sketch e index.htm per "processare" la risposta del server nella pagina HTML

FSBrowser.zip (110 KB)

1 Like

riepilogando, mi consigli di caricare l'html della pagina web che devo usare direttamente sulla scheda e richiamarla come nell'esempio fsBrowser e successivamente usare javascript nella pagina html per scambiare dati tra la scheda e la pagina web, in modo da poter modificare delle variabili del programma direttamente dalla pagina web?

se c'è possibilità vorrei provare anche a far funzionare il programma che ho mandato all'inizio, anche se occupa la ram

Posso suggerire di guardare la libreria Webbino (che è multipiattaforma e gira anche su ESP), che si trova in area Megatopic ed evitarsi così tutti i casini di programmazione e parsing del HTML ... :slight_smile:

Io la uso da parecchio tempo su un programma piuttosto pesante su ESP8266 dove, su una pagina WEB aggiorno variabili e ricevo dati di configurazione e ... sono piuttosto soddisfatto :wink:

Guglielmo

Grazie Guglielmo, ma sapreste dirmi dove posso documentarmi per capire come funziona lo scambio di dati tra un esp8266 e una pagina web? scusate le domande ma non me ne intendo moltissimo

Purtroppo la libreria NON è dotata di un tutorial, però nella cartella deglie esempi ci sono molti programmi che mostrano vari tipi di scambio di dati :wink:

La puoi installare direttamente dal "library manager" del IDE così trovi gli esempi direttamente in esso.

Guglielmo

spics:
riepilogando, mi consigli di caricare l'html della pagina web che devo usare direttamente sulla scheda e richiamarla come nell'esempio fsBrowser e successivamente usare javascript nella pagina html per scambiare dati tra la scheda e la pagina web, in modo da poter modificare delle variabili del programma direttamente dalla pagina web?

Esattamente! In questo modo puoi concentrarti su ogni aspetto dell'applicazione in modo distinto.: il frontend ovvero la pagina che mostri all'utente con tutti gli abbellimenti possibili offerti dalla potenza e la flessibilità di HTML5/CSS/JS) ed il backend ovvero il webserver, esattamente come faresti per un sito web in hosting su Altervista o simili.

Guglielmo, ho provato la libreria che suggerisci.
Volevo fare un webserver da SD su un Leonardo, ma il compilato supera la dimensione massima del micro. Su ESP8266 invece non sono riuscito a compilare. Non ho approfondito oltre, ma sembrerebbero esserci delle definizioni che vanno in conflitto con quanto già definito a livello di core.

Cotestatnt scusami ancora, ma per fare tutto ciò posso trovare una guida o qualcosa del genere per capire meglio comepoterlo fare?

cotestatnt:
Guglielmo, ho provato la libreria che suggerisci.
..... Su ESP8266 invece non sono riuscito a compilare. Non ho approfondito oltre, ma sembrerebbero esserci delle definizioni che vanno in conflitto con quanto già definito a livello di core.

No, funziona correttamente, ovviamente occorre mettere le mani nel file di configurazione "webbino_config.h" per adattarla alla scheda che si usa e per le funzionalità che si vogliono.

Come ho scritto poco sopra, ultimamente l'ho utilizzata proprio su ESP8266 in un programma piuttosto corposo con una gestione di una pagina HTML molto articolata :wink:

Sulla Leonardo non l'ho provata, ma, effettivamente, è possibile che, in funzione della configurazione scelta, si possa andare fuori di memoria ... del resto UNO e Leonardo NON sono, di sicuro, le schede adatte per fare certe cose ... ::slight_smile:

Guglielmo

Se ti riferisci all'HTML e tutto il resto un'ottima risorsa online è https://www.w3schools.com/

Per quanto riguarda, l'ESP8266 quello che trovi in rete è in maggior parte immondizia ahimè, frutto di continui copia e incolla degli stessi schifo-tutorial che dilagano nel web, ragione per cui io parto SEMPRE dagli esempi inclusi nelle librerie e/o piattaforme per poi andare a esplorare nei sorgenti i metodi che le classi usate mi mettono a disposizione.
Ci vuole un po' più di pazienza ed applicazione, ma i risultati poi non deludono :wink:

gpb01:
No, funziona correttamente, ovviamente occorre mettere le mani nel file di configurazione "webbino_config.h" per adattarla alla scheda che si usa e per le funzionalità che si vogliono.

L'idea di una libreria che va modificata nei sorgenti per adattarla al singolo utilizzo però non è che mi fa impazzire.
Comunque, in effetti ora compila senza problemi (dopo aver aggiunto le dipendenze) però se non sbaglio è pensata solo per ESP8266 come modulo e non stand-alone o c'è altro che mi sfugge?
Tra l'altro avrebbe anche pienamente senso... a che pro usare una libreria esterna quando è già tutto incluso nel core in stand-alone?

quindi mi consigli di guardare l'esempio fsBrowser e cercare di capire come far funzionare quest'idea?

Purtroppo per averla multipiattaforma, multiinterfaccia e scegliendo varie funzionalità, quello è il prezzo da pagare ...

Per il resto, la scelta è molto ampia, incluso il ESP8266 standalone (che io uso) ...

//~ #define WEBBINO_USE_WIZ5100
//~ #define WEBBINO_USE_WIZ5500
//~ #define WEBBINO_USE_ENC28J60
//~ #define WEBBINO_USE_ENC28J60_UIP
//~ #define WEBBINO_USE_ESP8266
//~ #define WEBBINO_USE_ESP8266_STANDALONE
//~ #define WEBBINO_USE_WIFI
//~ #define WEBBINO_USE_WIFI101
//~ #define WEBBINO_USE_FISHINO
//~ #define WEBBINO_USE_DIGIFI

... si toglie il commento a ciò che si sta usando ed il gioco è fatto :wink:

Come dico sempre ... iniziate dall'esempio "LedControl" ... dove si leggono delle informazioni (un toggle) e si forniscono delle informazioni (accensione o meno del LED) :slight_smile:

Guglielmo