Ethernet + SD

Dopo essermi sbizzarito con prove di Client e WebServer adesso vorrei provare ad utilizzare la SD
Mi e' chiaro che non funzionano in contemporanea
A tale proposito ho recuperato il manualetto di Fabrizio Schiano a cui mi rivolgo per porre una domanda
Leggo :
Dovete essere sicuro di avere l’ultima versione di SdFatLib (libreria dell’IDE Arduino necessaria per interfacciarsi alle SD card) in quanto avrete bisogno di alcune delle nuove caratteristiche.

Io ho installato l'IDE 1.0 , l'hardware e' tutto rev.3
Ho fatto prove modificando gli esempi e singolarmente funziona tutto

Domanda:
L'inclusione di <SdFat.h> e <SdFatUtil.h> e' da considerarsi in quanto siamo in presenza della traduzione di un documento precedente alle ultime release di Arduino oppure e' effettivamente una cosa diversa da #include <SD.h> presente negli attuali esempi ??

Ti ringrazio

PS: ovviamente e' ben accolta la risposta di chiunque abbia fatto qualcosa circa l'argomento
E se mi buttate li qualche link magari arrivo subito al dunque senza googlare magari inutilmente :slight_smile:

Il WebServer finche' non sovrascrivo dovrebbe essere raggiungibile da 93.185.125.140 ; E' il puro esempio dell'IDE leggermente rimaneggiato

ti basta SD.h

non funzionano insieme perché usano lo stesso pin di CS?

Ciao,
a questo link in questo post ~~http://arduino.cc/forum/index.php/topic,76032.60.html~~ http://www.panu.it/wjsonduino/c'è un mio esempio di webserver con sd ~~http://www.panu.it/jsounduino/20111125_jsonduino.zip~~ non ricordo se ho inserito nel codice la libreria WebServerSD ma la puoi scaricare da qui http://sites.google.com/site/circuitiarduino/home/antigelo-caldaia/sketch nel file webduinoSD.rar

Alberto

EDIT: scaricate il wjsonduino perché il codice del jsonduino è superato.

lucadentella:
ti basta SD.h

Con questo mi confermi che SD.h contiene le precedenti librerie

lucadentella:
non funzionano insieme perché usano lo stesso pin di CS?

Ethernet usa il 10 metre la SD il 4

2	pinMode(10, OUTPUT); // set the SS pin as an output (necessary!)
3	digitalWrite(10, HIGH);  // but turn off the W5100 chip!
4	uint8_t r = card.init(SPI_HALF_SPEED, 4); // Use digital 4 as the SD SS line

Stavo esaminando l'esempio http://schianorobotics.altervista.org/Ethernet_Web_Monitor.pdf per capire dove e come viene riattivata l'ethernet
A fronte di un "turn off" mi aspetterei un "turn ON" con un digitalWrite(10, LOW)

Sono alle prime armi e cerco di barcamenarmi con tutto quello che trovo
Ma oltre a trovare mi piacerebbe anche capire

bigjohnson:
la libreria WebServerSD

Come detto piu' sopra mi piace anche capire
La libreria che citi ha funzioni per "swappare" fra SD ed Ethernet oppure e' un mix di Ethernet , SD e altre funzioni aggiunte

Vado comunque a leggermi i post che mi hai indicato

ciao

(ottimo approccio ;))
più periferiche possono condividere il bus SPI, semplicemente quando vuoi "parlare" con loro devi attivarle mettendo a LOW il pin CS (se infatti guardi il datasheet vedrai che questo è indicato con una "tilde" davanti, ad indicare che è a "logica invertita")
spesso l'attivazione del chip è "nascosta" nella libreria: i comandi di libreria iniziano con un CS_LOW e terminano con un CS_HIGH...

lucadentella:
ti basta SD.h

non funzionano insieme perché usano lo stesso pin di CS?

Per quel poco che ricordo e che so sull'argomento, mi sento di confermare quanto detto da Luca.

Ciao,
Fab.

p.s. Mi fa piacere che la mia "guida" sia stata utile a qualcuno

Con la WebServerSD riesci a collegare un url con il relativo file sulla scheda, in più riesce a fare anche delle sostituzioni tra dei parametri predefiniti scritti nel file sulla sd e la lettura delle porte di arduino.

bigjohnson:
Con la WebServerSD riesci a collegare un url con il relativo file sulla scheda,

Intendi dire che potri mettere l'HTML sulla scheda ed utilizzarlo quando necessario anziche' sprecare prezioza memoria con i testi ?

Intendi dire che potri mettere l'HTML sulla scheda ed utilizzarlo quando necessario anziche' sprecare prezioza memoria con i testi ?

Fino ad oggi ho usato la SdFat.h della 0022 e alla tua domanda posso rispondere si, i nomi dei file sono di 8 caratteri con estensione htm 3 caratteri (fat16)

ma domanda agli esperti......la lib SdFat.h della 0022 è diventata WebServerSD nella 1.0?

ciao

Intendi dire che potrei mettere l'HTML sulla scheda ed utilizzarlo quando necessario anziché sprecare preziosa memoria con i testi ?

Si!

Ima domanda agli esperti......la lib SdFat.h della 0022 è diventata WebServerSD nella 1.0?

Per quello che ne so no, la libreria WebServerSD implementa tutto il webserver con accesso al filesystem ma abbisogna di
#include <SdFat.h>
#include <SdFatUtil.h>
per gestire il filesystem, ho letto lo sketch della caldaia e include le due librerie.
Confermo che la libreria si occupa di gestire il bus spi tra sd ed ethernet, senza bisogno di nient'altro.

bigjohnson:

Ima domanda agli esperti......la lib SdFat.h della 0022 è diventata WebServerSD nella 1.0?

Confermo che la libreria si occupa di gestire il bus spi tra sd ed ethernet, senza bisogno di nient'altro.

Arghhhh
Co' 'sta storia degli IDE mi pare sia un bel casino
Ma il fatto di includere librerie precedenti puo' creare problemi visto che io sono arrivato con la 1.0 e non ho alcuna intenzione di destreggirmi con IDE precedenti
Gia' ho i miei problemi con questa ...... :slight_smile:

bigjohnson:
Ciao,
in questo post http://arduino.cc/forum/index.php/topic,76032.60.html c'è un mio esempio di webserver con sd Wjsonduino non ricordo se ho inserito nel codice la libreria WebServerSD ma la puoi scaricare da qui http://sites.google.com/site/circuitiarduino/home/antigelo-caldaia/sketch nel file webduinoSD.rar

Ho recuperato i file
Diciamo che e' stato il classico buco nell'acqua
Intanto mi manca flash.h
Ma andando alla libreria SdFat e provando gli esempi non ne funziona alcuno mentre con gli esempi dell'IDE 1.0 la SD funziona
Non so se il file SD2...map venga richimato ma li dentro , l'unica parte il cui il pin di selezione e' il 4 risultano sbagliati gli altri ; almeno in confronto ad Arduino UNO Rev.3
Torno al DOC d Schiano e provo a fare qualcosa di mio scopiazzando dai vari esempi di lettura della SD

Allo stato attuale a me interessava leggere dei parametri dalla SD prima di inizializzare l'Ethernet per poterli personalizzare ; MAC IP & company

Poi se riuscivo anche a tirar fuori dalla SD una pagina HTML da popolare con qualche dato meglio altrimenti , memoria permettendo , la costruisco dentro al programma

Se avete qualche nota aggiuntiva , altrimenti grazie lo stesso
Non sono uno che si arrende XD

Ciao Bruno

secondo me ti conviene utilizzare direttamente le librerie SD dell'IDE... ti danno comunque le due possibilità:

  • usare la classe "wrapper" SD che ti semplifica le cose per attività base
  • richiamare comunque le classi della libreria sdfatlib (Sd2Card, Sd2Volume, Sd2File...) per esigenze più complesse

lucadentella:

  • richiamare comunque le classi della libreria sdfatlib (Sd2Card, Sd2Volume, Sd2File...) per esigenze più complesse

Ho "esplorato" la directory della libreria SD ed ho visto che esiste una sottodirectory dove ci sono SdFat e compagnia

La domanda :
Quando viene incluso SD.h vengono di fatto utilizzati i file che sono nella directory SD delle librerie ed anche quelli su sottodir di questa ??
Giusto per curiosita'
Vistoooo ... vengono richiamati da SD.h

Comunque e' scontato che quando e' attiva la SD la Ethernet e' "morta" e viceversa
Per cui per fare le mie sperimentazioni ci pensero io a tirar SU e GIU i pin 4 e 10 :frowning:

Comunque e' scontato che quando e' attiva la SD la Ethernet e' "morta" e viceversa
Per cui per fare le mie sperimentazioni ci pensero io a tirar SU e GIU i pin 4 e 10 smiley-sad

perchè devi farlo tu? io sto usando la ethernet che invia dati di continuo e scrivo su SD i log eventi senza dire al 4 e 10 che devono fare le ho impostate nel setup una volta e basta.

ciao

pablos:
perchè devi farlo tu? io sto usando la ethernet che invia dati di continuo e scrivo su SD i log eventi senza dire al 4 e 10 che devono fare le ho impostate nel setup una volta e basta.

Porcassa la miseria .... e' quello che non riesco a incamerare nella materia grigia

Per favore .... dimmi dove e come succede questo
E magari se hai un pezzo di codice da studiare te ne saro' grato

Un'altra cosa
Se io vado a vedere gli esempi vedo che viene stampato direttamente il read
Io il read lo voglio su una variabile e siccome era l'IP ho fatto byte IP_Scheda , lo leggo e poi lo stampo
Ma se fossero testi ?

Dubito che si riesca leggere una riga ed inviarla su Ethernet , leggerne un'altra ed inviare e cosi via ; probabilmente chiudendo la SD per inviare su Ethernet il puntatore della riga si azzera
Oppure si puo' fare ??

Doverosi ringraziamenti :slight_smile:

@Pablos
if (htmlFile) {
while (htmlFile.available()) {
client.print(htmlFile.read(), BYTE);
}
Ti ho inseguito sul web ... :smiley:
E ti ho trovato qui

Ho scopiazzato ma in fase di compilazione si arrabbia su quel BYTE
Lo ho brutamente tolto e il Server risponde sparando fuori una sfilza di numeri
Ovviamente Client e diventato EthernetClient e cosi pure il Server
Dai che ci sono ...quasi ; passami l'imbeccata dicendomi come lo hai risolto :slight_smile:

Ti ho inseguito sul web ... smiley-grin
E ti ho trovato qui

ahahahhaa vero sono io, ero in crisi e non sapevo come fare, poi ho risolto :)

Ma cosa vorresti fare ? purtroppo ho tutto sulla 0022 mi devo adeguare :(, ma se posso

#include <SPI.h>
#include <Ethernet.h>
#include <Flash.h> // non mi ricordo perchè l'ho messa :D forse a te non serve
#include <SdFat.h>
//#include <SdFatUtil.h> //serve se chiedi freeram ecc

---------------------dichiarazioni--------------------
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

---------------------nel setup-------------------------

// initialize the SD card
pinMode(10, OUTPUT); // set the SS pin as an output (necessary!)
digitalWrite(10, HIGH); // but turn off the W5100 chip!
card.init(SPI_FULL_SPEED, 4);
volume.init(&card);
root.openRoot(&volume);

void log_write()
{
//scrittura su file txt sd .... eventi
file.open(&root, "datalog.txt", O_APPEND | O_WRITE);
file.println(log_riga); // ovviamente log_riga è una String
file.close();
}

questo è quello che attualmente è operativo e funziona bene
ciao

pablos:
ahahahhaa vero sono io, ero in crisi e non sapevo come fare, poi ho risolto :slight_smile:

Ma cosa vorresti fare ?

Purtroppo io sto usando 1.0 e mi rendo conto che tutto il casino nasce da li'
Hanno sconvolto l'organizzazione del sistema di sviluppo per cui esempi che magari potrebbero servirti non funzionano perche' sono fatti per la 022 o 023
Come gia' detto non sono arrendevole e mi sono dato da fare ad esplorare le librerie
Adesso metti SD.h la quale richiama dalla sottodirectory utility SDFat e SDFatutility ; quelle che hai incluso tu
Il Flash.h e' sparito ma probabilmente sara' stato inglobato anche questo
In un altro TRD mi dicevi " La tua , piu' che una richiesta , e' uno sfogo " ; hai voglia che un principiante ci sopravviva
Mi chiedi cosa vorrei fare :
Ho fatto un piccolo sistema che con dei sensori ( attualmente per strada ma sostituiti con potenziometri ) leggono Amper e direzione del flusso di corrente su un cavo
Mi serve per controllare il mio impianto fotovoltaico accendendo un paio di semafori che indicano se c'e' produzione e se nel contatore Enel l'energia sta' uscendo o entrando
Ho poi un controllo per inserire dei carichi solo se se c'e' flusso verso la rete ( la corrente prodotta e' piu' conveniente consumarsela )
Il tutto oltre su delle Spie a LED dovrebbe fornire una paginetta WEB con qualche informazione su dove sta andando la corrente
La SD mi serve per metterci la paginetta Html ed i parametri MAC IP etc della Ethernet

Sono al punto che leggo la SD e Funziona la paginetta in modo autonomo ; insieme non funzia
Ehhh .... ma ci arrivo , mica ho intenzione di mollare .