HTML su SD

Buongiorno A tutti ..... Ultimamente sto lavorando su Arduino per creare una pagina html per poter gestire eventi.
Creandola direttamente nello sketch non ci sono problemi funziona a meraviglia, ho anche postato lo sketch un po' di tempo fa.
Ora però volevo cambiare registro e ho caricato una pagina HTML più completa sulla SD della shield e naturalmente tramite sketch riesco a vederla su qualsiasi monitor. "PC e smartphone".
Ora però non so' come poter fare interagire HTML su SD e lo sketch caricato su arduino. Premetto che sono due giorni che cerco qualcuno su internet che l'abbia fatto ma nulla da fare.
Ci sarebbe qualcuno che abbia sperimentato questa cosa e che mi possa spiegare come farli interagire??? magari con esempio banale tipo....

"ON" su html...
e....
"if(e qui che ci metto?????){

};" Grazie.......

Bè dubito riuscirai a farlo.
Dovresti creare un interprete del tuo file html dinamico per poi sparare in output il risultato.

Mi pare abbastanza azzardato, è come se volessi installare php su arduino.

Poi può essere che vengo contraddetto.

Ma io ho letto in giro che si puo' fare tramite il metodo get... ma ho proprio bisogno di un esempio scritto per capirebbe

Mail metodo get è una funzione del protocollo http per chiedere (get) file (html, immagini, suoni, ecc..) non per dire adarduino prendi il file pippo.html, vedi che c'è dentro, valutalo e fammi sapere il risultato

Si pero' usato con querystring funziona...alcune persone l'hanno fatto ma non hanno tanta voglia di condividere... quindi cercavo aiuto qui.... sperando...

Ok rimango in ascolto pure io.

Eh sperando che qualche buona anima si faccia carico di questo onere..

erpomata:
Bè dubito riuscirai a farlo.
Dovresti creare un interprete del tuo file html dinamico per poi sparare in output il risultato.

Mi pare abbastanza azzardato, è come se volessi installare php su arduino.

Poi può essere che vengo contraddetto.

Cerca Webduino. Ti annuncio che la documentazione è quasi inesistente, quindi devi guardarti un po' di esempi... Se trovi qualche guida fatta bene fammi sapere che serve anche a me... =)

Ho gia cercato qualcosa su beduino ma c'è poco in rete mi diventa troppo difficile.. comunque vediamo..

Quando si crea il webserver si associano agli url le funzioni che li gestiscono, si può inviare direttamente un file html dalla sd o leggerlo dalla flash, oppure si può generare completamente la risposta tramite il codice arduino.
Alcuni esempi sono il mio Wjsonduino, vedi link in firma , che legge solo lo stato delle porte e https://sites.google.com/site/circuitiarduino/home/antigelo-caldaia/sketch, che contiene il WebServerSD.h
Se non ricordo male con il WebServerSD puoi inserire nei file dei marcatori che vengono sostituiti dallo stato delle porte.
Per modificare lo stato delle porte devi gestire l'url tramite una funzione che usa i parametri di GET o POST.
Qualcuno ha anche tentato la modifica del Wjsonduino per poter scrivere sulle porte vedi http://arduino.cc/forum/index.php/topic,120644.0.html.

questa è la raccolta di post dove evidenzio le più importanti funzioni della tiny webserver secondo la mia esperienza personale, è chiaro che l'html da solo non basta ti serve un po' di CSS e Javascript, le comunicazioni di dati tra html e sketch le puoi fare con json o ajax che sono riassumendo botte e risposte tra client e server. Leggiti questi e capirai da quale punto iniziare, la webduino che ti hanno suggerito prima fa +/- le stesse cose, non trovi grandi documentazioni su entrambe, ma la tiny funziona bene se usata bene, con slider, progressbar, comandi, console di comandi da client, pagine create con frame, visualizzazione degli stati in tempo reale con il solo scambio di dati in ajax autorichiesti costantemente, ovviamente senza grafiche esagerate dati i limiti di velocità di upload

http://arduino.cc/forum/index.php/topic,88536.0.html
http://arduino.cc/forum/index.php/topic,141798.0.html
http://arduino.cc/forum/index.php/topic,81080.0.html

Grazie a tutti ragazzi di oggi mi metto li e faccio prove... per info la pagina html che ho fatto è stata fatta con jquery e css...

Ok ho dato un'occhiata a tutti i link e sotto link che mi avete postato e vi ringrazio per l'aiuto....
Ora la mia domanda è semplice.... su alcuni siti internet ho trovato persone che hanno fatto queste cose senza l'uso di altre librerie, ovvero hanno usato spy.h ethernet.h e sd.h .
IO per scrivere le mie pagine tipo www.tekinicaimpianti.altervista.org ho utilizzato bootstrap e in passato jquery e jqueryMobile, quindi piu' o meno me la cavo....
Non sono un informatico io faccio impianti elettrici e qualcosa di elettronica, quindi certi argomenti mi sono abbastanza sconosciuti, infatti avevo già provato a utilizza webduino ma utilizzando ide 1.0.3 mi dava un sacco di errori quindi avevo subito mollato anche perchè non ero e non sono in grado di modificarlo.. e cosi penso sia anche per l'altra libreria "tiny".
Quindi la mia domanda iniziale che ho visto una mezza risposta nei post che mi ha dato pablo è la seguente....
se sul lato html scrivo....." dove pippo dovrebbe essere il mio nome identificativo sullo sketch di Arduino
ON

e poi sullo sketch come recupero pippo per far funzionate ad esempio l'accensione sul led?
io so che rompo ma come ho già scritto io faccio impianti elettrici quindi queste cose sono abbastanza nuove per me... in compenso posso dirvi che sul mio sito trovate una mini guida agli impianti elettrici che magari vi può tornare utile...

Ciao Pablos ho provato la libreria TinyWebServer bella e con qualche modifica l'ho fatta funzionare....
Ma sinceramente ho guardato lo sketch e non ho capito come fà a fare accendere il led.....
Penso sia nella parte finale dove c'e' il loop ma cosi per me scrivere un programma diventa complicato, almeno che non mi basti scrivere per ogni mio tasto che avrò nella mia pagina HTML {"/blinkled", TinyWebServer::POST, &blink_led_handler }, in teoria da quello che ho capito è questo l'unico punto di riferimento con la pagina su SD..... Giusto?
quindi per ogni mio tasto dovrò riscrivere quella riga ma sostituendo blinkled con pippo per esempio...

x iscrizione

Ovvero?

argomento interessante, indi lo seguo :slight_smile:
"x iscrizione" serve a ricevere automaticamente aggiornamenti sul post nella sezione REPLIES in alto a destra,
molto piu' comodo della notifica via mail :slight_smile:

ho provato la libreria TinyWebServer bella e con qualche modifica l'ho fatta funzionare....
Ma sinceramente ho guardato lo sketch e non ho capito come fà a fare accendere il led.....

Lo fa allo stesso modo degli esempi nell'ide dove le pagine le costruisci sullo sketch, legge carattere per carattere

 while ((c = client.read())>0)
       {
          readString += (char)c;
            
            if((char)c=='\n') 
            ...
            ...

       }

quindi per ogni mio tasto dovrò riscrivere quella riga ma sostituendo blinkled con pippo per esempio...

no, lo fai solo per una volta, è il messaggio che scrivi dopo blinkeled che contiene quello ad arduino interessa.

nel loop ci metti tutto quello che il programma deve fare quel web.process(); va a vedere c'è una richiesta altrimenti non fa niente è come se ci fosse if (client.available()) {

Nella pag html metti tutti i pulsanti che vuoi, quando lo premi sarà il Js a spedire ad arduino (tramite la funzione ajax) il messaggio, poi nello sketch vai a riconoscere il messaggio

cosa succede ora che arduino ha letto il messaggio?
lo script js si aspetta una risposta (lo vedi nella funzione success) ed è proprio nella risposta che spedisci al browser quello che vuoi che venga visualizzato sulla tua pagina.
Quindi approfitti della risposta per mandare tutti i dati al browser, non potresti fare altrimenti, questo è l'unico momento dove puoi spedire i dati al client dato che arduino essendo un server non è in grado di chiamare il client e dirgli visualizza questo e quello.

esempio:
Clent si connette

  • client domanda: come stai?

  • webserver risposta: lo stato dei pin 1,2,3 è 0,1,1 (che vai a leggere nel success)

  • client domanda: mi spegni il led 2? (premendo un pulsante sulla pag web)

  • webserver risposta: lo stato dei pin 1,2,3 è 0,0,1 (che vai a leggere nel success)

Cosa fa l'esempio della lampadina di Ovidiu Predescu's?
Fa si che una volta connesso il client, questo gli chiede come sta ogni 500ms così puoi tenere sott'occhio in tempo quasi reale lo stato di arduino a video, vedrai le tue caselle sul monitor accendersi e spegnersi da sole, nel tuo caso invece di spedire un byte solo per un led solo nella stringa ci metti tutte le informazioni che vuoi, sarà lo sketch in base a un criterio di lettura a capire cosa si stanno dicendo.

io ad esempio uso questa nello sketch per visualizzare i pin digitali

client.print("DP,");
      client.print((String)PINA + "," + (String)PINB + ",");
      client.print((String)PINC + "," + (String)PIND + ",");
      client.print((String)PINE + "," + (String)PING + ",");
      client.print((String)PINH + "," + (String)PINJ + ",");
      client.print((String)PINL + "," + (String)PINF + ",");
      client.print((String)PINK + "," + (String)ore + ",");
      client.print((String)minuti + ",");
      client.print((String)secondi + "," + (String)giorno + ",");
      client.println((String)mese + "," + (String)anno);

ottenendo a video questa
DP,32,156,0,4,3,32,8,0,0,0,0,11,57,26,24,2,2013

qui ci sono tutti i 69 pin della mia mega più la sua data di sistema, sarà un duro compito del javascript capire cosa arduino sta dicendo :slight_smile:

mmmmmmmmmmm.....Come dire..... sta diventano complicato il lavoro che volevo fare..... Penso che avessi ragione un po' di post fa' a dirmi che questa libreria e' un po' difficile.....
Mi hai fatto uno spiegone ma ti assicuro che forse un quarto di quello che hai scritto l'ho capito......

cosa vuoi fare? ti posso un po' indirizzare