Aggiornare libreria e sketch webduinoSD

Tempo fa ho caricato questo sketch con relative librerie create dall'utente Gianni C.
http://forum.arduino.cc/index.php?PHPSESSID=9teceldkr84qq361f4f4a704e0&topic=54797.0
Non sono un programmatore per cui, se non è troppo complicato, mi chiedevo se qualcuno puo aiutarmi ad aggiornare le librerie alla versione IDE 1.0
Quello che sono riuscito a capire, è che SdFat.h e SdFatUtil.h sono incluse nella libreria SD.h, ma per il resto non sono riuscito ad andare avanti.
Di seguito riporto il link del pacchetto che ha postato Gianni C. con sketch e librerie
http://forum.arduino.cc/index.php?action=dlattach;topic=54797.0;attach=1588
Grazie

sicuramente se scarichi la nuova versione della libreria trovi tutto già aggiornato

lesto:
sicuramente se scarichi la nuova versione della libreria trovi tutto già aggiornato

Grazie Lesto, ma il problema è proprio questo, la libreria mi sembra di capire che è una modifica mix della webduino e tinyWebserver fatta da Gianni C. e non credo si trovi in giro.

hai ragione, allora posta gli errori che vediamo di risolverli

Ti ringrazio lesto.
Allora, uso IDE 1.5.2, ho copiato webduinosd nelle librerie, ho caricato lo sketch ed ho sostituito SdFat.h e SdFatUtil.h con SD.h, tatso verifica e qui i seguenti errori....

In file included from demowebsd.pde:14:
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h:226: error: conflicting return type specified for 'virtual void WebServer::write(uint8_t)'
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h:228: error: conflicting return type specified for 'virtual void WebServer::write(const uint8_t*, size_t)'
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Print.h:53: error:   overriding 'virtual size_t Print::write(const uint8_t*, size_t)'
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h:257: error: cannot declare field 'WebServer::m_server' to be of abstract type 'Server'
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Server.h:4: note:   because the following virtual functions are pure within 'Server':
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Print.h:48: note: 	virtual size_t Print::write(uint8_t)
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Server.h:6: note: 	virtual void Server::begin()
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h:258: error: cannot declare field 'WebServer::m_client' to be of abstract type 'Client'
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:7: note:   because the following virtual functions are pure within 'Client':
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:12: note: 	virtual size_t Client::write(uint8_t)
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:13: note: 	virtual size_t Client::write(const uint8_t*, size_t)
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:14: note: 	virtual int Client::available()
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:15: note: 	virtual int Client::read()
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:17: note: 	virtual int Client::peek()
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:18: note: 	virtual void Client::flush()
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:10: note: 	virtual int Client::connect(IPAddress, uint16_t)
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:11: note: 	virtual int Client::connect(const char*, uint16_t)
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:16: note: 	virtual int Client::read(uint8_t*, size_t)
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:19: note: 	virtual void Client::stop()
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:20: note: 	virtual uint8_t Client::connected()
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:21: note: 	virtual Client::operator bool()
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h: In constructor 'WebServer::WebServer(const char*, int)':
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h:311: error: no matching function for call to 'Server::Server(int&)'
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Server.h:4: note: candidates are: Server::Server(const Server&)
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Server.h:4: note:                 Server::Server()
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h:311: error: no matching function for call to 'Client::Client(int)'
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:7: note: candidates are: Client::Client(const Client&)
C:\IDE_1.5.2\hardware\arduino\avr\cores\arduino/Client.h:7: note:                 Client::Client()
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h: In member function 'virtual void WebServer::write(const char*)':
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h:355: error: invalid conversion from 'const char*' to 'uint8_t'
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h:355: error:   initializing argument 1 of 'virtual size_t Client::write(uint8_t)'
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h: In member function 'void WebServer::processConnection(char*, int*)':
C:\IDE_1.5.2\libraries\webduinoSD/WebServerSD.h:477: error: 'class Server' has no member named 'available'

...ovviamente con IDE 022 tutto funziona perfettamente!

uhmm c'è un pò di lavoro da fare... c'è da aggiornare un sacco di roba, e risolvere qulche problema di conflitti, ad occhio.
IMHO è più facile adattare la nuova versione ufficiale che sistemare quella vecchia di Gianni
Se non erro l'uinca dirrerenza della lib è che quella di Gianni supporta la POST..

Io prima di fare tutto questo lavoro di fusione tra librerie e adattamento al nuovo ide, vorrei capire cosa vuoi fare, se dici di non essere programmatore allora non puoi nemmeno sapere cosa ti serve, dove è il problema e come raggiungere l'obbiettivo. Non è escluso che esistano già librerie che si adeguano alle tue necessità.

ciao

pablos:
Io prima di fare tutto questo lavoro di fusione tra librerie e adattamento al nuovo ide, vorrei capire cosa vuoi fare, se dici di non essere programmatore allora non puoi nemmeno sapere cosa ti serve, dove è il problema e come raggiungere l'obbiettivo. Non è escluso che esistano già librerie che si adeguano alle tue necessità.

ciao

Si pablos, non sono programmatore, ma tempo fa presi questo progetto e lo modificai in modo da comandare 7 relay tramite i pin 2-3-5-6-7-8-9 di arduino, il tutto ad intuito e facendo prove su prove fino a quando ha funzionato senza dare errori. Ultmimamente ho modificato anche la pagina web, in HTML me la cavo decisamente meglio, prendendo spunto da altro progetto, in modo da adattare l'interfaccia grafica al mio smartphone Samsung S3. In più ho creato una applicazione .apk per Android che mi apre la pagina web direttamente sullo stesso smartphone.
Ho ritagiato una parte della pagina web per farvi vedere come si vede. Quando click sul bottone di una zona si attiva il relè, il bottone cambia nome ON o OFF e cambia anche l'immagine. Nell'esempio sotto sono attivi i relè 2 e 5


In pratica avevo pensato di aggiornare la libreria per eventuali successive modifiche, tipo implementare l'accesso tramite user e passw.

Ciao
Ducker...

Il tuo lavoro sembra veramente fatto bene...grafica e colori...il funzionamento non lo sò perchè non posso provarlo e ne approfitto per farti due domandine...
-Intanto lo stato relè che tu dichiari sulla paginetta web è reale oppure segue il comando ON-OFF ??...mi spiego meglio ...se io dò il comando da OFF a ON e per un qualsiasi motivo il relè non si muove lo stato relè dal web comunque mi dirà che che il comando ON è stato attivato ??? anche se in realtà il relè non si è mosso ??

-Altra domanda ...quando mi collego con n.2 client,quindi magari uno smartphone e un pc nello stesso momento se aziono un relè in ON dallo smartphone mi si aggiorna anche sul pc oppure devo ricaricare la pagina e quindi poi avere delle collisioni nei comandi ???

Grazie in anticipo...

-Altra domanda ...quando mi collego con n.2 client,quindi magari uno smartphone e un pc nello stesso momento se aziono un relè in ON dallo smartphone mi si aggiorna anche sul pc oppure devo ricaricare la pagina e quindi poi avere delle collisioni nei comandi ???

difficile che sia così. Una sessione HTML nasce e muore durante una sola richiesta, l'uso delle sessioni nasce come "hack" per riconoscrere un utente in modo univoco. va da se che il server non ha alcun modo per avvisareil client se non che la pagina non usi dei socket (normalmente javascript) che stabiliscono una normale connessione persistente TCP con il server (anche l'UDP potrebbe andare bene con millemila complicazioni però).

Altra domanda ...quando mi collego con n.2 client,quindi magari uno smartphone e un pc nello stesso momento se aziono un relè in ON dallo smartphone mi si aggiorna anche sul pc

Si, l'aggiornamento viene eseguito su tutti i client è in tempo reale o quasi, come ti è stato detto

se non che la pagina non usi dei socket (normalmente javascript) che stabiliscono una normale connessione persistente TCP con il server

Ma la tecnica per ottenere questo non è altro che fare continuate richieste al server ogni tot ms e in risposta il server invia gli status.

Ma la tecnica per ottenere questo non è altro che fare continuate richieste al server ogni tot ms e in risposta il server invia gli status.

questo è un sistema di polling e non è real-time, ma al contrario aggiornato in base al tempo di polling. con tutti i problemi connessi, in particolare carico inutile sul server

lesto:
questo è un sistema di polling e non è real-time, ma al contrario aggiornato in base al tempo di polling. con tutti i problemi connessi, in particolare carico inutile sul server

Sarà un sistema di polling, ma le librerie che stiamo analizzando fanno quello, il client interroga il server ogni tanto, infatti io non ho parlato di real time ma ho specificato "quasi", fino a ieri tutti l'webserver fatti con arduino funzionavano così, oggi non lo so, hai percaso trovato una libreria per arduino che apre un socket e comunica con le funzioni full-duplex Send() e Receive() su tcp/ip?
Per quello che riguarda gli svantaggi delle lib in oggetto sono le richieste inutili quando nessun dato è cambiato, questo si che è un carico inutile del server, altro svantaggio, nel caso la connessione possiede pacchetti a pagamento dopo poche ore ci scappa la bancarotta (possiamo sempre rispondere picche se nulla è cambiato :slight_smile: invece di rimandare la sfilza di dati uguali ai precedenti).
Per quello che riguarda me il mio client visualizza 16 porte analog che cambiano sempre di poco ma cambiano

ciao

mai vistop una cosa fatta così, magari mi ci metto io a farla.. alla fine un poco di javascript e via :slight_smile:

magari mi ci metto io a farla..

perchè no,
Mi spiegheresti come dici tu, con passaggi a blocchi cosa intendi? magari diciamo la stessa cosa in lingue diverse o forse no.

ciao

questo, ma non l'ho mai studiato, so solo che esiste: Moved…

pietro78:
Ciao
Ducker...

Il tuo lavoro sembra veramente fatto bene...grafica e colori...il funzionamento non lo sò perchè non posso provarlo e ne approfitto per farti due domandine...
-Intanto lo stato relè che tu dichiari sulla paginetta web è reale oppure segue il comando ON-OFF ??...mi spiego meglio ...se io dò il comando da OFF a ON e per un qualsiasi motivo il relè non si muove lo stato relè dal web comunque mi dirà che che il comando ON è stato attivato ??? anche se in realtà il relè non si è mosso ??

-Altra domanda ...quando mi collego con n.2 client,quindi magari uno smartphone e un pc nello stesso momento se aziono un relè in ON dallo smartphone mi si aggiorna anche sul pc oppure devo ricaricare la pagina e quindi poi avere delle collisioni nei comandi ???

Grazie in anticipo...

Buona sera a tutti e scusate il ritardo, ma in questo periodo non ho molto tempo per connettermi al forum. Questa discussione si fa interessante con pablos e lesto e la seguirò piacevolmente.
Rispondo a Pietro:
E' doveroso chiarire che il lavoro è di Gianni C, io ho solo preso il progetto e ho apporatato alcune modifiche.
L'aggiornamento dei relè che visualizza la pagina è reale
Per quanto riguarda l'aggiornamento su due client le risposte le stanno dando lesto e pablos, io posso dirti che non c'è nessun conflitto se cambi lo stato sun un client e sull'altro aggiorni la pagina, ti dirò di più, ho provato a dare due comandi diversi su ogni client nello stesso momento e i 2 rele comandati hanno cambiato lo stato, capita che uno dei client ha aggiornato solo lo stato che ha comandato, per cui per vedere lo stato reale di tutti i rele, in questo caso, va fatto un refresh della pagina. Il refresh automatico con javascript l'ho provato, ma manda in tilt il sistema.