[Risolto] Caricare file su microSD

Che voi sappiate, c'è un modo per caricare i file sulla microSD tramite l'ethernet shield senza dover togliere continuamente la microSD?

Sii più preciso, che cosa vuoi fare? Salvare file a spasso sulla ad da una pagina web?
In quel caso devi avere uno sketch che utilizza tinywebserver o simili.
E questo che ti serve?

Voglio salvare i file da una pagina web, la quale si trova o sulla microSD o su un sito esterno (preferibile), ma se è più semplice da fare va bene anche se è sulla microSD, tanto non ho necessità di caricare i file dall'Australia.
Avevo pensato di usare l'esempio FileUpload della libreria TinyWebServer, ma non ho ben capito come interfacciare questo esempio con lo script per l'upload, dato che di php non me ne intendo.
Lo script che uso è questo Download AJAX script: Max's AJAX File Uploader
ma va bene qualsiasi script, basta che funziona!

Caricando su arduino lo sketch FileUpload, dopo aver aperto la pagina index.htm e cliccando sul link della pagina per l'upload si apre una pagina del browser con scritto: Could not found file: INDEX.PHP (anche se nel link il collegamento è a index.php)
Invece, caricando lo sketch BlinkLed, si apre tutto normalmente, ma quando clicco su upload, la barra di caricamento rimane ferma, come se stesse ancora caricando, anche se aspetto 10-15 minuti.
In entrambi i casi lo stesso avviene se il collegamento è fatto su un sito esterno (in questo caso questo sito di altervista che sto usando per fare delle prove http://arduhome.altervista.org/ajaxupload/index.php).

Guarda, non credo che arduino sia in grado di processare file php . (anzi ne sono proprio sicuro!)

Gli unici siti che puoi gestire (e se ti sembra poco vuol dire che sei troppo esigente per questa tecnologia) sono fatti in html e javascript, ovvero tutti linguaggi che vengono renderizzati lato client.
Puoi incorporare jquery ed utilizzarne le funzioni, puoi anche ospitare tutte le pagine del sito sulla SD,ma ricordati che hai la limitazione sui nomi file in formato dos 8+3.
Per fare l'upload di file da pc verso la SD ,come dicevamo ti serve tiniwebserver caricato e funzionante con l'esempio FileUpload, ma anche, anzi forse meglio , BlinkLed (anche in questo progetto è stato implementato l'handler per l'upload).
Una volta che hai questo funzionante puoi procedere a caricare file nella sd tramite un software che si chiama CURL .
L'autore ha creato anche un file bat che permette il caricamento di tutti i file contenuti in una cartella (static) direttamente sulla SD, ma richiede lo scaricamento del file che ti ho menzionato prima ( link al sito http://curl.haxx.se/).
Volendo si può anche caricare un file sulla sd creando una pagina html apposita, ma è uno SBOCCO DE SANGUE!
Io ci ho messo quasi un giorno intero a farla funzionare e mi manca ancora la gestione della progressione di upload!
Intanto vedi se riesci a caricare tramite CURL e il bat fornito negli esempi dall'autore, poi in caso per il caricamento diretto da pagina web ne riparliamo :grin:
Per non farti perdere tempo inutilmente ti dico solo di lasciar perdere gli script di upload che trovi sulla rete perchè utilizzano un approccio diverso, non supportato dall'handler previsto di default col tinywebserver.

Grazie per la risposta, avevo già notato l'opzione curl girando per il web, ma non ho capito un accidenti di come devo implementarla :sweat_smile: sul forum di arduino avevo visto questa parte di codice (se la memoria non mi inganna era così) curl -0 -T "nome_del_file" http://192.168.1.177/ (che è l'indirizzo che uso io) ma dove glielo dovrei mettere???
In alternativa stavo pensando...non si potrebbero trasferire i file tramite FTP? Ad esempio con FileZila? A dire la verità ci ho già provato, ma non funziona (ovviamente, altrimenti non sarei qui).

Grazie ancora per l'aiuto e perdona la mia ignoranza in materia :stuck_out_tongue:

53RG10:
Grazie per la risposta, avevo già notato l'opzione curl girando per il web, ma non ho capito un accidenti di come devo implementarla :sweat_smile: sul forum di arduino avevo visto questa parte di codice (se la memoria non mi inganna era così) curl -0 -T "nome_del_file" http://192.168.1.177/ (che è l'indirizzo che uso io) ma dove glielo dovrei mettere???
In alternativa stavo pensando...non si potrebbero trasferire i file tramite FTP? Ad esempio con FileZila? A dire la verità ci ho già provato, ma non funziona (ovviamente, altrimenti non sarei qui).

Grazie ancora per l'aiuto e perdona la mia ignoranza in materia :stuck_out_tongue:

Mi togli una curiosità?

Come è possibile che stiamo facendo più o meno le stesse cose e abbiamo pure lo stesso ip sull'arduino????
MI SPIII????

CHE SEI NA SPIAAA??? 8)

Comunque per usare curl usa il bat fatto da ovidiu : (queesto è il mio ma a a sto punto non devi neanche cambiare l'ip!)

Crea un file BAT con il seguente contenuto:

set IPADDRESS=http://192.168.1.177
rem Be sure to change IP address (above) to match your board.  No other modification to this file should be needed
@echo off

rem Run this bat file to load web pages to the SD card on your Arduino Ethernet shield.
rem This file is only needed with windows - otherwise use upload.sh

set SubDir=static/
for %%f in (%SubDir%*.*) do (
echo uploading %SubDir%%%f to %IPADDRESS%/upload/
curl.exe -0 -T %SubDir%%%f %IPADDRESS%/upload/

)
echo Done!
pause

ed eseguilo semplicemente facendoci doppioclick.

Questo batch cerca tutti i file contenuti dentro una cartella di nome 'static' e li copierà sulla sd (la cartella static la cerca relativa al percorso dove correntemente viene eseguito il comando)

RICORDATI che i file devono essere formato 8.3 , quindi i file html non vanno bene, e nemmeno i file lunghi e con spazi!

CHE SEI NA SPIAAA???

Era così evidente? :grin: va bene sono una spia, ma non dirlo a nessuno :stuck_out_tongue:

Comunque ho provato a fare come hai detto tu:

  1. ho copiato il codice in un file di blocco note e l'ho salvato col nome di curl.bat (dato che mi dava errore quando eseguivo il comando se lo salvavo in un nome diverso); in più nel codice che hai scritto tu ho cambiato curl.exe in curl, dato che diceva che curl.exe non era un comando riconosciuto
  2. ho creato una cartella di nome static nella stessa cartella in cui ho salvato curl.bat (in questo caso il desktop)
  3. ho caricato sull'arduino BlinkLed, collegato il tutto a ethernet e poi ho aperto curl.bat e indovina cosa è successo??? :smiley: niente =( =( =(
    ho anche creato una cartella nella microSD col nome di upload, ma lo stesso non funzionava.
    Così ho cambiato sketch (non si sa mai), ho caricato FileUpload e lo stesso non ha funzionato.

E' successa però una cosa strana: il file php per l'upload dei file si è aperto :astonished: , ma (ovviamente) quando clicco su upload non succede nulla, evidentemente perché, come hai detto tu, l'arduino non arriva a tanto.

Ah e poi un'altra cosa: quando apro curl.bat viene ripetuta la stessa scritta un centinaio di volte:
Uploading static/4587.HTM to http://192.168.1.177/upload (4587.htm è un file che c'è nella cartella static)
e poi si chiude la finestra, cioè è come se stesse caricando un unico file :astonished: anche se nella cartella static ce ne sono una decina (tutti in formato 8.3)

Grazie mille per l'aiuto :slight_smile:

Una curiosità: ma a te funziona??

Certo che funziona, ma stai scherzando?
mo ti faccio un video :grin:

Ma hai scaricato curl?
secondo me hai toppato qualcosa sul file bat!

Non ne vuole proprio sapere di funzionare =(
prima sbagliavo perché non avevo messo curl.bat e la cartella static nella cartella della libreria curl. Ora che l'ho sistemato, quando clicco su curl.bat mi esce scritto questo:
curl: <56> Recv failure: Connection was reset
Idee in merito?
Per quanto riguarda il tipo di libreria che ho utilizzato, ho scaricato tutte quelle di windows a 32 bit e ho provato con tutte, ma hanno dato tutte lo stesso risultato.

Un'altra cosa...è normale che collegando arduino a una batteria da 12V si riscalda molto?

Grazie infinite :slight_smile: poi ti faccio una statua :grin:

Si è normale che scaldi come un tostapane, o meglio secondo me non è proprio normale, però ne ho diversi e tutti fanno c
Paradossalmente quella col wiz5100 a bordo scalda meno della semplice uno... bhaa ...
Mi sembra strano che non ti funzioni, ma da quello che descrivi mi sembra che hai fatto un gran casino.
Riparti da capo, prendi la cartella dell'esempio e copia curl.exe allo stesso livello in cui vedi la cartella 'static' (non dentro!)
Ora edita il file bat e correggi l'IP.
Esegui il file bat e vedi che succede.
P.s. l'Arduino nel frattempo devi averlo connesso e acceso, prova a pingarlo e a fare un telnet sulla porta 80.
Se non ti risponde anche a uno solo dei test qualcosa non va!

Funziona!!! :grin:
Avevo fatto tutto bene, solo che avevo dimenticato che il mio portatile non si connette al 192.168....poi ho messo tutti i file sul fisso ed ha funzionato :slight_smile:

Grazie infinite :smiley: :smiley: :smiley:

:astonished:

:zipper_mouth_face: