Programmare arduino da webserver

Il tuo codice stampa sulla seriale quello che legge carattere per carattere dal file, ma nel log seriale manca la parte di verifica del contenuto dell'array. Ad ogni modo la stampa dei caratteri ">>>>>>>>>>>>>>>>" finisce sempre con 0 mentre ci dovrebbe essere un valore convertito in intero, indice che qualcosa non funziona come previsto.

 Serial.write(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
 Serial.print(datatemp.toInt());

Scusami se mi permetto, ma lo sketch che hai postato mi sembra un po' "confuso". Se ti va possiamo provare ad impostare nuovamente la funzione che fa il parsing del file con un approccio diverso (usando il simulatore online per semplicare).

Guardando con più attenzione, vedo che cerchi di fare la conversione da stringa ad intero usando il metodo della classe String toInt(). Essendo più semplice da comprendere rispetto ai puntatori, restiamo con questa metodologia, ma a questo punto sfruttiamola fino in fondo senza fare un inutile mix.

Correggimi se sbaglio, ma da quanto ho capito tu vorresti eseguire una riga del CSV ogni secondo e con la riga in questione definire in modo "programmabile" il comportamento di 7 uscite collegate a dei LED.
Ogni LED è caratterizzatyo da 4 parametri:

  • pin
  • stato (on, off, fade etc etc)
  • tempo fade
  • livello uscita

Questo a me suggerirebbe di usare una struct e poi fare un array di 7 elementi del tipo struct appena definito.
Poi, una volta al secondo leggi la riga dal file e imposti il valore di ciascun parametro per ciascun elemento. A quel punto con un ciclo for puoi fare la ricorsione dell'array ed esegui le azioni previste.

Tradotto in codice può diventare un cosa di questo tipo. C'è solo la funzione che fa il parsing della riga e non tutto il resto, ma a questo punto ti è sufficiente tenere traccia dell'ultima riga che hai letto ed ogni secondo incrementarla, oltre ovviamente ad implementare tutto il resto del codice per il fade etc etc.

1 Like

ok grazie do un occhiata alla tua parte di codice lo sketch deve eseguire 7 azioni al secondo, le uscite in gioco sono 100,(più arduino collegati in 485)

ciao,ho modificato il messaggio da leggere da csv,salverò come primo valore il tempo formattato a 3 cifre, come secondo dato l'uscita formattata in 3 cifre, come terzo dato fa funzione(000-255) e come quarto il tempo di fade formattato a 2 cifre in maniera da renderlo più semplice alla lettura, la mia domanda ora è:
il webserver puo semplicemente aprire una tabella csv ,modificare i valori e sovrascriverlo senza interagire con il funzionamento dell'arcuino che dovrà leggere il suddetto csv e comandare le uscite ?in maniera da rendere il webserver indipendente dal funzionamento dello sketch di arduino? grazie

No, è il tuo sketch che deve fare questo. Il webserver fa il webserver...

Quello che puoi fare per semplificarti la vita è fare il download, modificare rifare upload del file modificato.
Oppure aggiungere una pagina web con un editor e modificare direttamente il csv online come ad esempio con questo editor che ho appena trovato su Github.
I sorgenti potresti caricarli sulla SD, ma il webserver chiaramente deve essere in grado di "servire" file statici leggendoli dalla SD.

Mi ricordi che tipo di scheda stai usando?

Davvero interessante questo progetto, l'ho appena caricato su un ESP8266 e funziona alla grande!

ciao,arduino mega, ethernet shield etc shield.grazie

domani ci do un occhio ma se dici che è interessante vuol dire che forse posso prendere spunto...grazie

hai colpito nel segno,questo e quello che vorrei fare con l'unica modifica di salvare poi il file modificato e se possibile impaginare meglio in html,secondo te è fattibile?grazie

Si certo, l'autore del progetto ha messo tutti i sorgenti nel repo GitHub.
Puoi modificarlo come meglio credi

ciao,ho caricato e funziona alla grande,ho un problema solo, questa pagina pesca il file dal client e lo salva nel client(pc,smatphone), mentre io avrei bisogno di pescare il file dalla sd dell'host(arduino) e sovrascriverlo,hai qualche consiglio?grazie

Guarda ci ho giocato un po' proprio questo pomeriggio semplificando la pagina per fare in modo che apra in automatico un file predefinito e consenta di scaricare il csv modificato, ma anche di salvare sull'host di origine.
Con l'occasione l'ho alleggerito un bel po' rimuovendo tutte le dipendenze "remote" in modo che possa funzionare anche in locale senza connessione esterna. In pratica produce solo la tabella csv e due pulsanti: download e save.

Questo però presuppone che il tuo webserver sia in grado di gestire l'upload di un file dal browser: un client come lo è il browser infatti, per questioni di sicurezza, NON PUO' accedere direttamente ai file del webserver.
Quindi l'unica soluzione è quella di fare nuovamente l'upload del file modificato che va a sovrascrivere il vecchio.

I test li ho fatti usando questa libreria che era da un po' che volevo provare.
Domani se vuoi ti giro tutto.

ciao, quindi dici che non si può fare fare il lavoro direttamente da browser fino alla sd ma bisogna scrivere i comandi nello sketch e poi salvarli in sd?intanto grazie, poi quando potrai passarmi un po di materiale...intanto ti ringrazio ancora

Pensa cosa potrebbe succedere se qualcuno fosse in grado di modificare direttamente i file sul webserver che ospita la pagina di accesso al tuo conto corrente :sweat_smile:

Per quanto riguarda lo sketch, lo trovi come allegato.
Come detto, ho pesantemente modificato il progetto originale semplificando e rimuovendo tutte le dipendenze esterne per fare in modo che funzioni anche senza internet, trovi tutto nella cartella data.

Di default viene aperto il file default.csv, ma ovviamente puoi modificare il nome del file direttamente nel sorgente /js/index.js/ oppure passarlo come parametro GET.

Ad esempio nella mia LAN con questa url verrà aperto il file test.csv se esiste.

http://192.168.2.177/?filename=test.csv

Oltre al necessario per modificare i file CSV direttamente dal browser, trovi anche la cartella /edit dove dentro ci ho messo un web editor che ti consente di modificare direttamente i file sorgente del webserver contenuti sulla SD (e chiaramente anche il CSV).
Io lo trovo molto utile in fase di sviluppo perché riesci a modificare al volo e valutare "in diretta" il risultato (in pratica l'ho usato per tutte le modifiche di cui parlavo prima).

C'è un bug che ancora non sono riuscito a trovare, ogni tanto si blocca quando vai a salvare il file, ma per fortuna non succede di frequente.

P.S.
Per compilare sono necessarie le librerie aWOT e SdFat che ovviamente trovi nel gestore librerie dell'IDE.

ethernet_sd_webserver.zip (134.4 KB)

ti ringrazio, questo weekend lo modifico poi ti dico...intanto grazie ancora

ciao, la pagina è proprio ciò che cercavo, hai un trucco per intabulare tutto in un font tipo excel?l'editor quando lo apro continua a cercare(Listing '/'...),non capisco come mai.grazie

Non ho capito cosa intendi, potresti fare un esempio di quello che vorresti?

Per quanto riguarda l'editor, se rimane "inchiodato" su Listing, vuol dire che il webserver non risponde correttamente alla richiesta della lista dei file presenti nel folder.
Stai provando l'esempio che ti ho inviato cosi com'è oppure l'hai inglobato nel tuo progetto?

Io purtroppo non ho un mega al momento per provare fisicamente, ho solo verificato che compilasse e i test reali li ho fatti su un SAMD21.

per rendere questo


come questo

scusami ma sono un pollo, non avevo il webserver connessolo sketch e caricato dritto, se apro dal pc edit.htm rimane in listing,ho connesso direttamente l'arduino al pc e dall'indirizzo ip index funzionano capisco perché l'editor nn va..

Perdonami... ma io non ho mica capito se ora funziona oppure no :crazy_face:

ciao grazie al tuo aiuto sono a buon punto, vorrei solo aggiungere una riga di testo sotto a questo form

var tableHolder = "<div class='table-holder' id='" + id + "'><p id='table-title' class='table-title'><b contenteditable>{@name}</b>" + downloadButton +  saveButton + "{@table} <p align=left>ciao </div>";

ma qualunque strada utilizzo non me la fa vedere, mi puoi aiutare?grazie