Arduino Uno e WebServer Ethernet Shield

Ciao a tutti , mi chiamo Sandro ed è un piacere far parte di questa community.
Mi sono avvicinato da poco ad Arduino con grandi prospettive, spero possiate aiutarmi e cercherò anche io di aiutare chi è in difficoltà, ma veniamo a noi :stuck_out_tongue:

Vorrei creare delle pagine web dove pubblicare i valori rilevati tramite arduino, quindi usare il modulo Ethernet Shield.
Ho trovato alcune informazioni su internet e creato il codice che vi allego, ho voluto che il dispositivo ricevesse tramite un dhcp il proprio indirizzo ip e non assegnarlo io.
Per ora sono semplici pagine html, per vedere se il tutto funziona, più avanti penserò alla rilevazione dei dati delle sonde (già testato) e alla pubblicazione magari tramite un grafico.
Le pagine sono ospitate su una micro-sd.

Volevo chiedervi un paio di informazioni:
1- Il codice che ho scritto è corretto?
Nel senso che attualmente funziona, se mi collego all'IP vedo le pagine e navigo tra una pagina all'altra, è corretto sviluppare in questo modo o vi è un modo più semplice?

2- Ho dovuto includere i CSS all'interno di ogni pagina, non ho capito come farlo funzionare utilizzando invece un classico file esterno tipo "style.css" includendolo nelle varie pagine html, se lo faccio in pratica vedo la pagina non formattata, come faccio a mandargli anche le classi ?

3- Nel file HTML ho dovuto sostituire i tag per le immagini cambiando il nome del file con il codice base64, rendendo la pagina offline meno gestibile dato che in locale mi costruivo le pagine e poi le pubblicavo sull'SD, è corretto così ?

4- Ho notato anche alcune "limitazioni", del tipo l'estensione del file non funziona con *.html ma con *.htm
oppure, se ho capito bene, anche i nomi non devono essere lunghi.

Grazie mille dell'aiuto :slight_smile:
8)

Arduino_codice.txt (5.33 KB)

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

ciao, benvenuto

Nasco come programmatore c/c++, pascal...visual basic..principalmente seguo web server e application server.

bhe allora sicuramente sei tu che puoi insegnare a noi tutto quello che riguarda il webserver :smiley:

Però mi sorge spontaneamente una domanda:

ho voluto che il dispositivo ricevesse tramite un dhcp il proprio indirizzo ip e non assegnarlo io.

Perchè usi il DHCP su un apparato che funge da server e non un ip statico adeguato alla rete in cui è connesso? usi un DynDNS?
potresti avere n possibilità di non trovarlo quando lo cerchi in rete se l'ip non è deciso da te.

Ho dovuto includere i CSS all'interno di ogni pagina, non ho capito come farlo funzionare utilizzando invece un classico file esterno tipo "style.css", come faccio a mandargli anche le classi ?

  1. Tu sai bene che nelle QueryString tra client e server oltre a 1000 informazioni è contenuto il nome del file che la pagina web (client) chiede al server, quindi devi fare una ricerca e selezione dei char in arrivo dalla query, capire che tipo di file vuole e inviare una risposta appropriata al client dicendo che stai per inviare quel tipo di file, che può essere css, png, jpg, js, se non lo fai il client non sapendo il formato in arrivo visualizzerà tutto come html per default quindi non formattata.

es:
se invio file xml client.println("Content-Type: text/xml"); >>> send file.xml
se invio file htm client.println("Content-Type: text/html"); >>> send file.htm
se invio file css client.println("Content-Type: text/css"); >>> send file.css
jpg ... png... js... txt
ecc ecc

  1. il caricamento immagini da SD lo fai appunto come detto al punto 2

  2. dipende dalla lib sd che usi, il nome file è di 8 char e l'estensione 3 char, io non mi complicherei la vita, usalo così :slight_smile:

  3. si è corretto nei limiti delle possibilità di quel programma, ma tu hai chiesto qualcosa di più complicato e per fare tutto quello che vuoi va arricchito di elaborazioni, quindi più ram e più mal di testa

Per mia esperienza personale meno richieste fai al server di file meglio è. quindi includere il css e altre cose nella stessa pagina secondo me è meglio che spezzare in più file, solo per una questione di minor impegno del micro, se puoi far caricare immagini e componenti api da server esterni meglio ancora, hai una UNO non pretendere troppo :slight_smile:

ciao

pablos:
ciao, benvenuto

Nasco come programmatore c/c++, pascal...visual basic..principalmente seguo web server e application server.

bhe allora sicuramente sei tu che puoi insegnare a noi tutto quello che riguarda il webserver :smiley:

Ciao pablos, grazie per le risposte che i hai dato.
E' molto tempo che non scrivo più codice purtroppo.

pablos:
Però mi sorge spontaneamente una domanda:

ho voluto che il dispositivo ricevesse tramite un dhcp il proprio indirizzo ip e non assegnarlo io.

Perchè usi il DHCP su un apparato che funge da server e non un ip statico adeguato alla rete in cui è connesso? usi un DynDNS?
potresti avere n possibilità di non trovarlo quando lo cerchi in rete se l'ip non è deciso da te.

Questo è verissimo, ma tendenzialmente il dispositivo dovrebbe rimanese sempre connesso e sempre tendenzialmente i dispositivi dhcp, nel mio caso il router di fastweb, dovrebbe riassociare lo stesso ip.
Idem per la mia ipcam,utilizza il dhcp.
Questione di gusti, siam sempre in tempo a cambiare metodo.

pablos:

Ho dovuto includere i CSS all'interno di ogni pagina, non ho capito come farlo funzionare utilizzando invece un classico file esterno tipo "style.css", come faccio a mandargli anche le classi ?

  1. Tu sai bene che nelle QueryString tra client e server oltre a 1000 informazioni è contenuto il nome del file che la pagina web (client) chiede al server, quindi devi fare una ricerca e selezione dei char in arrivo dalla query, capire che tipo di file vuole e inviare una risposta appropriata al client dicendo che stai per inviare quel tipo di file, che può essere css, png, jpg, js, se non lo fai il client non sapendo il formato in arrivo visualizzerà tutto come html per default quindi non formattata.

es:
se invio file xml client.println("Content-Type: text/xml"); >>> send file.xml
se invio file htm client.println("Content-Type: text/html"); >>> send file.htm
se invio file css client.println("Content-Type: text/css"); >>> send file.css
jpg ... png... js... txt
ecc ecc

si, ho visto qualche esempio e ho capito ma il mio "problema" è che le immagini non le fornisco direttamente da arduino inviandogli il file htm o un img o altro, le mie immagini sono sempre contenute dentro un html di un sito.

pablos:
3) il caricamento immagini da SD lo fai appunto come detto al punto 2

come sopra, le img sono contenute nei file html.

pablos:
4) dipende dalla lib sd che usi, il nome file è di 8 char e l'estensione 3 char, io non mi complicherei la vita, usalo così :slight_smile:

si si, mi sono adattato subito ihihihihihi

pablos:

  1. si è corretto nei limiti delle possibilità di quel programma, ma tu hai chiesto qualcosa di più complicato e per fare tutto quello che vuoi va arricchito di elaborazioni, quindi più ram e più mal di testa

immagino, ma vi è un altro modulo al posto di arduino uno che dovrei usare o che è più indicato allo scopo?

pablos:
Per mia esperienza personale meno richieste fai al server di file meglio è. quindi includere il css e altre cose nella stessa pagina secondo me è meglio che spezzare in più file, solo per una questione di minor impegno del micro, se puoi far caricare immagini e componenti api da server esterni meglio ancora, hai una UNO non pretendere troppo :slight_smile:
ciao

si, potrei spezzare i vari pezzi della pagina in più file, non credo di aver vincoli.

immagino, ma vi è un altro modulo al posto di arduino uno che dovrei usare o che è più indicato allo scopo?

dipende sempre da cosa vuoi fare e quanto è importante la parte web che vuoi realizzare.
Potresti dare un acchiata alle caratteristiche della yun facendo qualche ricerca un esempio di descrizione riassuntiva qui

http://arduino.cc/en/Main/ArduinoBoardYun?from=Products.ArduinoYUN

ciao