Tutorial Arduino Ethernet e SD Card

Partecipando all’Arduino Camp 2011 ho approfitatto per acquistare del materiale tra cui la Ethernet Shield:

Arduino Ethernet Shield

Arduino Ethernet Shield

La shield ha anche una slot per micro SD fino a 2Gb utilizzabile per scrivere e leggere i propri file.
In questi giorni ho provato questa magnifica shield e tutte le possibilità offerte, come sempre sono partito dalla guida ufficiale presente sul sito arduino.cc e dal loro esempio per realizzare un WebServer.

Ho quindi fatto i miei primi esperimenti con lo sketch di esempio proposto anche nell’IDE, per poi sperimentare come mi piace fare, cose nuove.

L’idea

Ho immaginato di voler realizzare un server che possa avere più pagine, come se ospitasse un sito, in particolare la mia fantasia è andata oltre pensando di visualizzare questa pagina non solo su un computer ma anche su un dispositivo mobile, a mia didposzione houn iPhone 3 (vecchio, si ma fa ancora il suo dovere).

Per consentire al sito di avere più pagine e non dovermi preoccupare delle dimensioni dei file HTML ho deciso di utilizzare una micro-SD card da 2Gb su cui memorizzare i miei file HTML e da cui Arduino potesse prenderli ed utilizzarli come un comune webserver.

Vantaggi

Il primo vantaggio offerto è la possibilità di creare quante pagine desidero senza dover sottostare alle dimensioni della Flash Memory che nel mio Arduino Uno è 32 KB (ATmega328) of which 0.5 KB used by bootloader come recita la scheda tecnica del sito.

Il secondo vantaggio è che posso costruire e testare le pagine sul pc, senza dover continuamente uplodare lo sketch arduino, risparmiando:

  1. il tempo di attesa per ogni variazione
  2. il numero di riscritture dell’Arduino
  3. dover avere l’Arduino sempre collegato al computer

Terminate le prove in locale sulla SD Card, puoi inserire semplicemente la micro SD Card nello slot della Ethernet Shield e provare il tutto.

Realizzazione

Per fare questo ho prima preparato uno sketch che sfrutti le librerie: SPI.h e Ethernet.h per laparte di rete e SD.h per la lettura/scrittura sulla micro SD card.

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,2, 130 };
File htmlFile;
Server server(80);

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  if (!SD.begin(4)) { return; }
}

void loop()
{
  Client client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          
          htmlFile = SD.open("index.htm");
          if (htmlFile) {
            while (htmlFile.available()) {
                client.print(htmlFile.read(), BYTE);
            }
            // close the file:
            htmlFile.close();
          }
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

Passiamo allo sbroglio del programma per capirci qualcosa di più:

linee 1-3: includono le librerie appena viste;
linee: 5-8: impostano le variabili perchè lo sketch funzioni, 5 e 6 definiscono rispettivamente il MAC e L’IP della scheda Ethernet, io ho lasciato invariato il primo, in quanto deve essere un numero univoco formato da 12 cifre esadecimali dove le prime 6 individuano il vendor o costruttore della scheda e i successivi un un numero univoco sequenziale, o seriale della scheda, maggiori informazioni puoi trovarle su Wikipedia; mentre ho modificato l’IP per consentire alla scheda di essere vista nella mia rete. la linea 7 imposta la variabile di tipo File contenenete il nome del file html e la linea 8 imposta il server per rispondere sulla pora 80 (la porta HTTP);
linee 10-15: impostano la funzione di setup, in cui inizializzo la libreria Ethernet passando Mac e IP (12) impostati, inizializzo il server (13) e imposto il pin 4 come designato alla comunicazione con la micro SD card (14);
linee 17-51: definiscono la funzione loop, in particolare analizzo linea per linea quello che accade ad ogni ciclo di processo.
linee 19-20: verifico che esista una connesione da parte di un client, in assenza di tale connessione evito di eseguire alcun passaggio;
linea 21: imposto una variabile di tipo booleana a true che mi servirà in seguito;
linea 22: inizio un ciclo di tipo while all’interno del quale eseguirò delle operazioni solo fino a che la connessione del client è attiva;
linea 23: verifico per ogni ciclo del while che il client comunichi con il mio server, in caso contrario non eseguirò alcuna operazione e chiuderò la comunicazione, vedreai come alle linee 48 e 49.
linea 24: leggo dal client la richiesta della pagina;
linea 25: se la richiesta è un carattere di linea nuova (\n) e la variabile currentLineIsBlank è true inizio la mia comunicazione con il client;
linee 26-28: con il metodo println della classe client, similmente a quanto visto per l’analogo metodo della classe Serial, invio al mio client gli Header della mia pagina, questi sono standard HTML;
linea 30: finalmente leggo il mio file index.htm dalla SD card, è importante sottolineare che il nume dei file non può essere maggiore del valore 8.3 ossia 8 caratteri per il nome e 3 per l’estensione, per mia abitudine uso chiamare i miei file .html ma in questo caso non funzionerebbero in quanto la SD Library non supporta file con una estensione maggiore di 3 caratteri.
linea 31: verifico che sia riuscito a leggere il file;
linea 32: scorro lungo tutto il file, riga per riga fina alla sua conclusione;
linea 33: con il metodo print della classe client incio al mio browser (IE,Firefox,Safari,Chrome, ecc) il contenuto di tutte le linee, per ottimizzare il flusso ho utilizzato la funzione print e non println che invierebbe al termine di ogni linea un ritorno a capo;
linea 36: terminata la lettura e l’invio del file chiudo il file, questa operazione è molto imporatnte per non lasciare il file aperto ed impedire ad un successivo collegamento la possibilità di aprirlo nuovamente, causando un errore nella fase di lettura;
linee 40-45: verificano la comunicazione con il client e ricevendo una linea vuota (\n) reimpostano la currentLineIsBlank a true, in caso di ricezione di un carriege return (\r) impostano a false la stessa, impedendo al ciclo successivo di reinviare nuovamente gli header e il file già inviato (vedi linea 25);
linea 48: imposta un tempo di attesa di 1 millisecondo per ciascuna eseguzione della unzione loop.
linea 49: chiude la comunicazione con il client, avendo ultimato l’invio di informazioni e consentendo al server di rispondere alle richieste successive.

In queto esempio ho trattato la sola lettura di un file HTML, prossimamente eseguirò degli esperimenti in cui il file da leggere nonsia sempre lo stesso ma più di uno potendo inserire dei veri e propri link all’interno delle pagine.

Buon lavoro.

 

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/tutorial-arduino-ethernet-sdcard.html

146 commenti

6 ping

Vai al modulo dei commenti

    • pablos il 24 Settembre 2011 alle 22:42
    • Rispondi

    ciao. Non ci sono molti esempi in rete che utilizzano una pagina html caricata su SD e soprattutto la gestione di dati tra arduino e la pagina htm…. comunque io ho messo una pagina index.htm nella sd, ma non viene caricata non ho nessuno errore, si connette ma il browser è bianco candido, mi basterebbe un pulsante on e uno off e un pezzetto di sketch per capire come andare avanti … saluti

    1. Ciao, sui pulsanti sto facendo degli esperimenti anche io, prima di passare a questa parte suggerirei di capire come mai non vedi nulla.
      Inizializza nel setup la seriale: Serial.begin(9600); e aggiungi dopo la riga:
      client.print(htmlFile.read(), BYTE);
      la
      Serial.print(htmlFile.read(), BYTE);
      Esegui l’upload e verifica cosa ti ritorna nel monitor seriale.

      Ciao

    • Diego il 29 Settembre 2011 alle 10:54
    • Rispondi

    Ciao! un’informazione…. Ho appena acquistato uno shield ethernet A000056. Dove trovo scritta la dimensione massima della scheda microSD da inserire?

    1. Ciao Diego,
      la scheda è la stessa che ho acquistato anche io all’Arduino Camp 2011, io ne utilizzo una da 2Gb con filesystem Fat16, che sul sito è indicato come filesystem da preferire.

    • pablos il 30 Settembre 2011 alle 23:05
    • Rispondi

    grazie per la risposta 🙂
    allora ho risolto avevo toccato una libreria java

    ho messo questo html per provare e funziona

    ora sarebbe bello capire cosa mandare a ad arduino quando premo e come fargli riconoscere il char inviato

    Non so se usare il get o post, c’e’ chi dice che il get è nascosto quindi piu sicuro, pero’ implica l’utilizzo di jquery.js e vado ben oltre le mie conoscenze di programmatore niubbo autodidatta 🙂

    Il post si vede sulla riga e mi basterebbe solo prendere la parte del (char)client.read() non mi è ben chiaro come devo fare

    Ho cercato di modificare il TinyWebServer a questo link http://www.webweavertech.com/ovidiu/weblog/archives/000484.html con scarsi risultati, troppi salti tra librerie script java, non so cosa studiare per fare una cosa decente e fatta bene
    Ciao

      • Leonid il 4 Luglio 2012 alle 14:48
      • Rispondi

      da quanto ne sapevo io, il post nasconde i dati e il con il get si vedono i dati 🙂

      comunque, per arduino non c’è tanta differenza

      1. Ciao Leonid,
        ciò che scrivi è corretto ma vale per la comunicazione HTML, sei a un livello superiore di lavoro.

        Quando ti parlo di web server mi riferisco a come il codice che scrive per arduino serve le pagine, le immagini e tutti i file che tu chiedi.

        Per capirci: quando tu chiami un web server ( tipo apache ) lui risponde attutite le tue richieste con il protocollo HTML interpretando la tua richiesta e rispondendoti.

        Con arduino non hai apache a disposizione per cui ogni volta che chiedi un elemento della pagina come un css, js, image ecc… La richiesta arriva al tuo codice che deve essere in grado di interpretarla e rispondere.

        Scriversi un web server non è semplice e occorre conoscenza approfondita dei protocolli della comunicazione client-server e sopratutto del codice da interpretare, tutto questo in arduino devi fartelo tu o trovarti un web server già fatto.

        Mauro

        • delta il 26 Luglio 2012 alle 16:28
        • Rispondi

        ciao,
        i dati passati per GET sono quelli visibili sulla URL tipo pagina.html?nome=valoer&nome2=valore2
        il GET e dopo il ?.
        in POST invece, i dati passano dentro al messeaggio HTTP e no sono visibili.

        se operi con arduino la differenza è la stessa, per leggere i dati io ho utilizzato questo sietema:
        dopo il comando: char c = client.read();
        metti: stringaLetta+=c;
        così alla fine hai tutto il messaggio ricevuto; ricordati poi di azzerare la variabile una volta concluso il tutto.

        poi prima di caricare Index.html
        fai: if (parametro.indexOf(“/pagina1.html”)!=-1){

        e tra le virgolette dell’indexof metti il testo da controllare, tipo se scrivi “/pagina1.html” nell’URL devi scrivere HTTP:// IP “/pagina1.html, altrimenti non carica nulla…

        su questo dei poi inporvvisare tu!

    • pablos il 30 Settembre 2011 alle 23:11
    • Rispondi

    non mi ha incollato l’html di esempio per vedere se arduino faceva l’upload

    • lui la plume il 9 Marzo 2012 alle 11:00
    • Rispondi

    Qualche anno fa’ ho acquistato una “Transcend SD Card 2GB” … e’ rimasta fino ad oggi sigillata ora ne tento l’utilizzo ma il sistema Vista (aggiornato) la vede come 1GB.

    Qualche idea sul motivo?

    1. Potrebbe essere dovuto alla porta USB, hai provato con una porta differente o su un Pc diverso?
      Mauro

    • lui la plume il 9 Marzo 2012 alle 11:11
    • Rispondi

    Acc …. Trovato
    Per leggere la SD ho utilizzato un dispositivo esterno… comodo ma poco raccomandabile viaggia connesso alla porta USB …. ed e’ nato come gestore usb 1.1 …. funziona ancora ma non vede ne sa’ gestire le sd superiori ad 1GB.

    Inserito nella scomodissima porta prevista nel portatile … va’ bene.
    Saluti.

    1. Bene, sono contento che tu abbia risolto.
      Mauro

    • David il 16 Marzo 2012 alle 22:12
    • Rispondi

    Ciao,
    leggendo il tuo codice ho visto che hai dichiarato File htmlFile;
    Volevo chiederti a quale libreria si rifà, visto che in arduino io non ho visto nulla riguardo i File, e poi nel codice non è definita
    Grazie

    1. File appariene alla libreria SD, inclusa alla linea 03.

      Mauro

    • Alberto il 16 Aprile 2012 alle 17:43
    • Rispondi

    Letto con interesse l’articolo,
    mi appresto ad acquistare anche la shield Ethernet oltre alla Arduino Uno rev. 3.

    Sarebbero di estremo interesse esempi con pagine web multiple.

    Grazie

    1. Ciao Alberto,
      ottima scelta.
      Apprendo la richiesta e mi ripropongo di pubblicare qualche esempio.
      Il tuo progetto di cosa si occuperà?

      Mauro

    • antonio il 26 Aprile 2012 alle 15:52
    • Rispondi

    salve, sto lavorando con una scheda ethernet appena acquistata. Ho realizzato un semplice webserver che funziona perfettamente e mi piacerebbe scrivere su SD anche lo stato di alcuni input di arduino (file txt).

    Se all’interno del loop e a client inattivo tento di scrivere su SD perdo la funzionalita’ ethernet e quindi tutta la parte webserver.

    Per quanto mi risulta il pin SS è il 10 (per la parte W5100) e il 4 per la parte SD. Non dovrebbero andare in conflitto. Sai darmi una dritta ?

    1. Ciao Antonio,
      sono interessato a quello che stai realizzando, non mi è chiaro cosa accade puoi postarmi su info(chiocciola)mauroalfieri.it il tuo sketch?

      Grazie
      Mauro

    • antonio il 30 Aprile 2012 alle 11:39
    • Rispondi

    ciao, lo sketch è il tuo con l’aggiunta di lettura da SD.Intanto ho tentato di leggere la porta da un file txt ma non sembra possibile dichiarare la “Server server(80)” dopo la lettura del file. Poi pensavo di poter scrivere lo status di alcuni IN/OUT su un file su SD (devo ancora completare i test).

    • Antonio il 22 Dicembre 2012 alle 11:04
    • Rispondi

    Ciao, ho riscontrato alcuni problemi nella compilazione di questo codice.Sto usando la Ide 1.0.1 con Ubuntu 12.04.1; ho dovuto modificare la linea 19:
    EthernetServer server(80);

    la linea 08 :
    <code EthernetClient client = server.available();

    e alla linea 33:
    client.print(htmlFile.read(), BYTE);
    anche la direttiva BYTE genera un errore di compilazione.
    E’ Ammesso: DEC, OCT ed HEX, ti risulta che sia stata modificata qualche libreria ?

    1. Ciao Antonio,
      dalla versione 0022 alla 1.0 in poi sono cambiate tante cose e alcune riguardano proprio librerie come la Ethernet ed i tipi di dati.
      Siccome non riesco a riprovare tutti i miei esempi su tutte le versioni dell’IDE se vuoi condividere le correzioni che apporti fallo commentando gli articoli.

      Mauro

      • Franco il 14 Gennaio 2014 alle 08:52
      • Rispondi

      Salve,
      pure io ho riscontrato il problema indicato alle linee 19, 8 e 33.
      Mentre per le prime due righe iniziali ho risolto come proposto, la riga 33 continua a dare problemi, mi spiego:

      il parametro BYTE non viene accettato ed inserendo (oppure omettendo del tutto) DEC, OCT, HEX nel browsere mi appare una lunga riga contenenente solo numeri che cambiano di valore in base al parametro inserito.
      il file index.htm è composto solo da una semplice scritta

      Il codice è il seguente:

      Ciao io sono Franco

      Ciao io sono Franco

      Grazie per l’eventuale aiuto

      1. Ciao Franco,
        prova a verificare nella libreria Ethernet cosa sia cambiato dalla versione per l’IDE 0022 e l’IDE 1.0 e successivi.
        Errori di questo tipo puoi risolverli con il manuale Arduino in cui ho trovato: http://arduino.cc/en/Reference/ServerPrint
        Il valore BYTE è stato sostituito da BASE che da come opzionale, per cui puoi ometterlo.
        Verificare se la soluzione risolve il problema, in alternativa prova a partire da un esempio presente nell’IDE e modificalo per fargli visualizzare la tua pagina.

        Mauro

        Mauro

          • Federico il 20 Settembre 2014 alle 18:07
          • Rispondi

          Stesso errore… senza BYTE solo sequenze di numeri 🙁

          1. Ciao Federico,
            verifica sulla documentazione della libreria come è cambiato il metodo usato così potrai correggere lo sketch.

    • Gianfranco il 4 Gennaio 2013 alle 16:57
    • Rispondi

    Ciao Mauro,

    volevo farti una domanda più banale: sulla SD card che andrà poi inserita in Arduino ethernet può essere scritto un qualsiasi sketch che verrebbe altresì scritto ad esempio su un arduino 2009, o si possono scrivere solo sketch di webserver?

    In pratica non capisco come sia possibile scrivere sketch su un Arduino ethernet non utilizzando una SD card.

    Grazie mille,
    Gianfranco

    1. Ciao Gianfranco,
      l’SD Card che inserisci nell’arduino ethernet puoi usarla indipendentemente dalla parte ethernet, puoi ad esempio scrivere uno sketch di datalogger senza coinvolgere la comunicazione di rete.

      Mauro

    • Gianfranco il 22 Gennaio 2013 alle 11:57
    • Rispondi

    Ciao Mauro,

    sto eseguendo il tuo tutorial, e mi domandavo se fosse possibile installare un webserver PHP….ma probabilmente immagino di no.

    Grazie mille ciao!

    1. Ciao Gianfranco,
      dovresti scriverti tu l’interprete e non basterebbe ne la memoria ne la capacità di calcolo di Arduino.

      Mauro

    • Gianfranco il 22 Gennaio 2013 alle 14:35
    • Rispondi

    Ok Mauro, e come lo vedi di implementare un webserver su un Raspberry pi, in modo tale che arduino possa accedere ad esso?

    Hai qualche esperienza sulla convivenza Raspberry+Arduino? Penso possa essere un’ottima idea circa l’utilizzo di Arduino con un webserver php a tutti gli effetti, senza necessariamente implementarlo su un PC desktop / laptop.

    Grazie 🙂

    1. Ciao Gianfranco,
      non ho ancora avuto modo di provare la RaspberryPi, da quello che ho letto, si implementa facilmente un server web con Php.
      Sulla convivenza ci possono essere mille modi di farli colloquiare, ma la RaspberryPi dispone delle uscite GPIO da usare per controlli esterni, quindi potresti evitare Arduino.

      Mauro

    • Gianfranco il 22 Gennaio 2013 alle 16:33
    • Rispondi

    Si Mauro, ci ho anche pensato ad utilizzare il solo Raspberry.
    Giusto a titolo informativo per gli altri utenti, come ti dicevo, il mio obiettivo era quello di creare una trasmissione wireless tra un arduino dotato di un modulo trasmettitore NRF24L01 ed un altro arduino dotato a sua volta di un modulo ricevitore NRF24L0 (il NRF24L01 è un transceiver che si collega ad arduino e comunica con esso sfruttando l’interfaccia SPI). L’arduino in trasmissione, collegato ad un router tramite l’ethernet shield, è pilotabile tramite uno smartphone (sintonizzato sulla rete wi-fi) collegandosi al webserver installato sulla ethernet shield.

    Fin qui dovrebbe essere tutto chiaro. 🙂

    Ma nel momento in cui volessi implementare un webserver con i ficchio (piattaforma LAMP: Linux – Apache – Mysql – PHP), avrei bisogno di un PC, che può essere anche un Raspberry. Ma quello che sto sto cercando di capire adesso è se posso sostituire l’arduino in trasmissione (+NRF) direttamente con il Raspberry (+NRF) in modo che, lato ricezione, l’arduino (+NRF) possa effettivamente ricevere i dati inviati dal Raspberry (+NRF). In poche parole sto cercando di capire se funziona una cosa del tipo:

    Raspberry con webserver (+NRF) può comunicare con Arduino (+NRF)

    Spero di non essere stato confusionario con chi leggerà questo intervento….!!
    🙂
    Grazie….!!
    Gianfranco

    1. Ciao Gianfranco,
      la tua soluzione penso sia fattibile a patto di trovare o scrivere del codice in grado di mettere in comunicazione la RaspberryPi con il modulo NRF24L01 attraverso la SPI.
      Ho trovato questo articolo interessante sulla comunicazione SPI tra RaspberryPi e un display Nokia 3310: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=32&t=9814&hilit=nokia&sid=375a23c4a53a1524437a786ab6b09dba

      Spero possa esserti utile.

      Mauro

    • gianfranco il 22 Gennaio 2013 alle 23:59
    • Rispondi

    Ciao Mauro e grazie….

    Forse quest’altro topic è ancora piu azzeccato!!
    http://www.raspberrypi.org/phpBB3/viewtopic.php?f=45&t=17061&p=248264&hilit=nrf24l01#p248264

    😉

    1. Molto interesante !!!
      Mauro

  1. Ciao Mauro sono molto interessato a questo articolo…. l’ho provato ma non visualizzo nulla…. ho dovuto modificare il tuo scketc perché uso un IDE 1.0.3 quindi certe cose mi davano errore..
    Comunque non mi vede il file e non riesco a capire come mai… Mi interessa tanto perchè sto portando avanti un progetto che si chiama domotica per tutti che utilizza appunto arduino.
    Mi piacerebbe anche sapere poi come fare a far interagire una pagina html messa su sd e il programma scritto su arduino … grazie

    1. Ciao Davide,
      ho cancellato il codice che mi hai postato in quanto nel copia e incolla ha perso dei pezzi.
      Mi piace il tuo progetto e sono sicuro che sarà di interesse di molti.
      Se vorrai pubblicarlo, una volta ultimato, sarò lieto di poterti dedicare uno o più articoli.

      In merito alle tue domande:
      1. per trovare cosa non funziona non hai che da inserire dei debug via monitor seriale e verificare che lo sketch riesca ad accedere all’SD
      2. per interazione tra pagina e arduino trovi sul blog dei tutorial che puoi consultare.

      Mauro

    • armando il 26 Marzo 2013 alle 13:24
    • Rispondi

    ciao Mauro
    ma se volessi registrare la temperatura letta dall’ lm35 e spedita al At328 ( in stand alone)
    l’eprom del 328 e limitata quindi per usare una sd card in questo caso ?
    Armando

    1. Ciao Armando,
      non ho capito il progetto che vuoi realizzare.

      Mauro

    • armando il 26 Marzo 2013 alle 15:32
    • Rispondi

    ciao mauro ,
    ho fatto il famoso termometro con il codice che conosciamo lo uploaddato sul at328 e visualizzato sull’lcd in modo autonomo senza mother board di arduino .Funzionante regolarmente
    adesso volevo almeno fare una prova per registrare sulla sd card o simili
    la sequanza dei valori di temperatura letti dall LM35 .

    Poi passare allo shield ethernet come indicato dalla tua lezione
    A..

    1. Ciao Armando,
      leggi il mio tutorial sul datalogger, é sto pubblicato su molti siti di Arduino.
      Rispetto a quello che vuoi fare tu ha in più un RTC Shield, ma puoi toglierà se a te non serve.

      Mauro

    • armando il 27 Marzo 2013 alle 09:57
    • Rispondi

    buon giorno mauro
    prima di iniziare..
    ho visto tanti tanti schemi di collegamento ce ne sono di svariati tipi . Non ho tanto chiaro lo schema elettrico in quanto ne ho trovati tanti e non vorrei sbagliare .. mi servirebbe uno schema di collegamento standard tra card reader e arduino .
    In particolare le alimentazioni + 5Vcc e 3.3Vcc ( come usarle ) e poi Mosi miso etc..
    Mi pare di aver capito che anche i segnali miso mosi etc… vanno abbassati dalla logica positiva = 5V a 3V
    mi puoi aiutare ?
    ciao
    Armando

    1. Ciao Armando,
      hai individuato già il punto, devi collegare MISO, MOSI, Gnd e +3.3v
      Puoi seguire uno dei miei schemi o quello delle SD Shield in vendita on-line e di solito rilasciati open-source.

      Mauro

    • armando il 27 Marzo 2013 alle 12:26
    • Rispondi

    quindi ricapitolando ,…

    se la sd e sola ( nel senso solo scheda) bisogna abbassare la tensione dei vari segnali .
    __________________________

    se la sd e’ gia corredata di circuito e componentistica varia ( vedi quelle in vendita gia pronte)
    non bisogna collegare circuiti intermedi ma basta collegarla direttamente al pinout di arduino (digitale)

    cosi mi pare di aver capito .

    1. Ciao Armando,
      non ho mai provato a collegare una SD senza un suo circuito/shield per cui ciò che scrivi é interessante ma non posso confermartelo.

      Mauro

    • Davide il 29 Marzo 2013 alle 12:40
    • Rispondi

    Ciao Mauro! Ho acquistato da poco l’ethernet shield per arduino e sto cercando di capirne il suo funzionamento. Il programma di questo articolo mi è abbastanza chiaro, eccetto un punto. Alla riga 38 non riesco a capire la funzione dell’istruzione break . Mi potresti dare delucidazioni? grazie mille!

    1. Ciao Davide,
      l’istruzione break serve a interrompere il ciclo while che inizia alla linea 22.
      In pratica quando entri nella condizione di if della linea 25, esegui tutto quello che segue e arrivando alla linea 38 esci dal while.

      Mauro

        • Davide il 30 Marzo 2013 alle 12:47
        • Rispondi

        Grazie mille, sei stato chiaro! Buona Pasqua!

    • Macca96 il 29 Marzo 2013 alle 17:50
    • Rispondi

    ciao Mauro

    un’ altra cosa se io utilizzo una micro sd da 4 gb per scrvere 2 paginette in html
    me lo legge lo stesso??
    non ho disponibile immediatamente una sd da 2 gb ovviamente dei 4gb ne userò una piccolissima
    parte.

    cosa ne pensi??

    grazie

    1. Ciao Macca,
      dipende dalla Shield, alcune ignorano la dimensione accedendo solo ai 2Gb altre non leggono nulla.

      Mauro

    • Luca il 9 Aprile 2013 alle 22:55
    • Rispondi

    Salve,

    Ho un dubbio.. Acquistando una Ethernet Shield, per la scrittura di un piccolo web server occorre una SD da 2GB. La SD è una qualsiasi o ne esiste una specifica per Arduino Uno Rv3?

    Inoltre, una volta comprata la SD, come si collega alla Ethernet? Esiste uno slot predisposto oppure devo acquistare un’altra specie di Shield dedicata alla SD e collegarla alla Ethernet? Nell’ultimo caso, come?

    Grazie infinite, buona sera.

    1. Ciao Luca,
      la ethernet shield che utilizzo io è quella ufficiale Arduino che trovi sul loro sito.
      Ha già uno slot x microSD ed è già tutta cablata.

      Per la scrittura di un Web Server puoi cercare nel bog o in internet ci sono dei progetti interessanti.

      Mauro

    • Matteo il 23 Aprile 2013 alle 15:16
    • Rispondi

    Ciao sono nei casini. Ho acquistato questa http://www.futurashop.it/images_la/8190-ETHSHIELDKIT.jpg shield ma non riesco a farla andare. Mi dai qualche consiglio?

    1. Ciao Matteo,
      non conosco a shield, che chioserà monta?
      Futura di solito fornisce degli esempi, hai provato ad utilizzarli?

      Mauro

        • Matteo il 24 Aprile 2013 alle 22:02
        • Rispondi

        Si ho scaricato una liberia che dovrebbe essere adatta a questa scheda, monta il chip ENC28J60, i led della lan sono accesi ma non riesco a fare il ping. Ho provato sia collegando la scheda direttamente al pc sia collegandola attraverso un router. Tu come hai collegato la scheda con il pc? Ci vuole un cavo cross? Non vorrei sia un problema di collegamento, però ho provato ma non riesco.
        Consigli??? 🙁

        1. Ciao Matteo,
          se colleghi la scheda al Pc/Mac dovrai usare un cavo cross.
          Prova a verificare con dei debug via serial monitor che l’IP sia correttamente assegnato.
          Dopo il test precedente verifica con degli strumenti di rete (arp, arping, …) che il Mac Address dichiarato nello sketch sia associato a quell’Ip

          Mauro

            • Matteo il 30 Aprile 2013 alle 00:12

            Ci sono riuscito finalmente!!!!
            Grazie.

          1. Ciao Matteo,
            eccellente sono contento è questa una delle finalità del mio Blog: fornire gli strumenti conoscitivi per aiutarti nei tuoi progetti.

            Mauro

      • Alessandro il 29 Agosto 2016 alle 17:45
      • Rispondi

      salve
      è la prima volta e quindi ne approfitto per farle i complimenti.

      Ho letto che Matteo ha risolto ma non come.

      Se ho capito, collegando il PC direttamente alla scheda, si deve necessariamente usare un cavo Cross?

      Ho un problema simile e se fosse cosi, questa potrebbe essere la causa

      La ringrazio

      1. Ciao Alessandro,
        se non ricordo male Matteo ha eseguito delle verifiche suggerite con il monitor seriale ed assegnato al Pc un indirizzo di rete compatibile con quello della scheda, suggerisco anche a te la medesima strada.
        In merito al cavo cross, non è sempre indispensabile se usi Pc moderni sono dotati di un sistema di riconoscimento e modifica delle impostazioni della porta ethernet per comunicare anche in modo diretto con schede di questo tipo.

    • Riccardo il 10 Novembre 2013 alle 22:27
    • Rispondi

    Ciao Mauro.

    Che formato deve avere il file “index.htm” all’interno della SD? e con quale programma compili il file index?

    grazie

    1. Ciao Riccardo,
      il file è un comune file html e non devi compilarlo in nessun modo.

      Mauro

    • Franco il 15 Gennaio 2014 alle 10:31
    • Rispondi

    Ciao Mauro,
    ti segnalo che ho risolto il problema di lettura del sito caricato sulla SD e nello specifico:

    le righe da modificare nel tuo listato inizio pagina sono le seguenti

    modificare riga 11 in EthernetServer server(80);
    modificare riga 19 in EthernetClient client = server.available();
    modificare riga 33 in client.write(htmlFile.read());

    In particolare l’ ultima riga è stata risolutiva.
    La soluzione l’ho trovata sul listato presente a questo link (è corretto citarlo)
    http://linuxmx.it/elettronica/arduino/427-arduino-web-server.html#es1
    Ti ringrazio comunque per l’interessamento.
    Ciao

    1. Grande Franco,
      sono sicuro che la tua soluzione sarà di aiuto a tanti, grazie per averla condivisa.

      Mauro

    • Riccardo Matta il 16 Gennaio 2014 alle 13:06
    • Rispondi

    Qualcuno di voi ha provato ad usare nel modulo Ethernet una sd più grande di 2Gb? E’ possibile usarle?
    Anche perché non sono più di facile reperibilità e lo sarà sempre di meno!!

    1. Ciao Riccardo,
      le specifiche del produttore: Arduino, della SD Card utilizzabile sulla Ethernet Shield è al max di 2Gb.
      Potresti provare ad utilizzarne una di dimensione superiore creando delle partizioni a 1,9Gb.

      Mauro

    • Mattia Dei il 15 Aprile 2014 alle 20:52
    • Rispondi

    Io ho riscontrato un problema sulla compilazione…
    nel pezzo di codice
    while(htmlFile.available()) {
    client.print(htmlFile.read(),BYTE);
    }
    il compilatore dell’IDE mi ha dato come errore questo messaggio: “Da Arduino IDE 1.0 la parola chiave ‘BYTE’ non è più supportata. Usa Serial.write() al suo posto”
    ho la versione 1.5.6 dell’IDE solo che non capisco come procedere, nel tuo codice hai inserito BYTE(che non so a cosa possa servire (mi serve anche la spiegazione di questo)) e invece dovrei ometterla…

    1. Ciao Mattia, alcuni sketch non sono adatti a tutte le versioni dell’IDE arduino. Prova a é rificcare sulla documentazione ufficiale arduino come é cambiata la sintassi dell’IDE relativa all’oggetto client della Ethernet lib. probabilmente basta solo togliere BYTE, tuttavia devi verificare che il comando si comporti allo stesso modo.

        • Mattia Dei il 10 Maggio 2014 alle 12:33
        • Rispondi

        Ciao Mauro…
        Ascolta ho riscontrato un ulteriore problema. Se carico la mia pagina “index.htm” da SD si carica bene, il problema è che la pagina index.htm è fornita di strutture CSS in un file esterno, sempre all’interno della SD, come posso fare per caricare la mia pagina con le istruzioni CSS?

        1. Ciao Mattia,
          considera che, come ho scritto, devi scriverti tutta la parte di web server.
          Per capirci ogni volta che il browser incontra un tag HTML verifica se interpretarlo o se chiedere al server di servirgli la risorsa web, puoi leggere in internet uno dei tanti articoli su come funziona un webserver tipo apache.
          In arduino ogni volta che arriva una richiesta devi scrivere nello sketch come interpretarla e rispondere, al pari di come ho fatto per la pagina index.htm

          Il modo più semplice per non dover scrivere sketch complessi per le risorse css e js è inserirle nella pagina htm come testo e non come risorsa esterna.

    • Mattia Dei il 15 Aprile 2014 alle 20:54
    • Rispondi

    In più mi serve una mano nel capire come aprire le pagine create in HTML (con arduino) da browser oppure direttamente faccio avviare il programma da arduino e mi si apre la pagina?

    1. Ciao Mattia, non ho capito la tua richiesta, perdonami.

        • Mattia Dei il 16 Aprile 2014 alle 19:38
        • Rispondi

        Praticamente quando avvio il programma con Arduino, come faccio a visualizzare a schermo il risultato della mia pagina HTML creata?

        1. Ciao Mattia,
          devi collegarti con un browser all’indirizzo Ip assegnato nello sketch arduino.
          Come avrai letto l’arduino deve essere collegato alla stessa rete a cui hai collegato il Pc con il browser.

            • Mattia Dei il 17 Aprile 2014 alle 12:48

            Ti spiego, Arduino è collegato direttamente al modem, mentre io sono collegato con la wifi (sempre della stessa rete)…
            Come dici tu, ho digitato l’indirizzo ip nel browser, il problema che mi dice: Impossibile collegarsi a….(il mio indirizzo ip).

          1. Ciao Mattia, controlla che arduino abbia ricevuto l’IP a cui stai puntando, magari ne hai configurato uno già occupato e arduino non può averlo.

            • Mattia Dei il 17 Aprile 2014 alle 16:17

            ho gia provato e un altro programma mi da proprio quell’indirizzo…

          2. Ciao Mattia,
            il passo successivo è mettere nello sketch dei Serial.print e verificare che il client si connetta e fino a che punto arrivi.

            Mauro

    • Daniele il 16 Aprile 2014 alle 10:37
    • Rispondi

    buon giorno,
    io ho creato un paio di pulsanti web per comandare delle luci di casa, ora vorrei per sfizio creare la pagina web e salvarla su sd . la cosa che non capisco è come richiamare i pulsanti da arduino se sono nella sd.
    grazie

    1. Ciao Daniele,
      la pagina HTML la carichi direttamente sulla SD e se i pulsanti sono immegini devi scriverti tutto l’interprete, lato arduino, che comprenda la tua richiesta e ti esponga i file che chiedi.
      Non è una cosa semplice e prevede che tu conosca molto bene come funziona un web server a basso livello.
      In alternativa puoi disegnare i pulsanti con gli stili css e la visualizzazione sarà molto più semplice.

  2. Salve! Io carico nella scheda microSd un file index.htm e vi scrivo una semplice stringa tipo ‘PROVA’.
    Quando vado a tentare di connettermi sul browser mi appare scritto ‘POA’ e, avendo aggiunto il serial print sul monitor seriale mi appare ‘828613495352-1828613495352-1828613-1828613-1828613-1828613-1’ . Ho modificato come suggerito nei commenti le varie righe!Saprebbe aiutarmi? Grazie mille!

    1. Ciao Alessandro,
      capitava anche a me.
      Devi mettere una pagina html con tanto di tag di apertura e chiusura perchè funzioni.

    • Karim il 1 Luglio 2014 alle 23:01
    • Rispondi

    Ciao Mauro

    Vorrei poter memorizzare dei dati provenienti da una shield Host USB (esattamente dei dati provenienti da una tastiera USB) e salvarli all’interno della SD (e non nella memoria di Arduino), successivamente vorrei poter caricare questi dati attraverso su rete ethernet (esattamente come fatto da te ma con il file index.htm)….pensi sia possibile farlo? o potrebbero esserci dei problemi?

    1. Ciao Karim,
      penso sia possibile farlo.
      Purtroppo non ho mai provato la shield usb host e non saprei dirti come.
      Un suggerimento a mio avviso potrebbe essere l’Arduino Yùn che è dotata di un linux, di una porta host e di due interfacce di rete ( ethernet e wifi ) per cui con poco più di 50€ hai tutto e sicuramente molta più potenza e semplicità.

    • angelo il 4 Luglio 2014 alle 14:57
    • Rispondi

    salve
    ho letto molte spiegazioni su arduino ma non riesco a farlo funzionare.ho incollato la libreria webduino nella cartella library del programmino java ma poi quando inserisco lo sketch mi da più errori nella compilazione.vorrei sapere gentilmente come devo fare per pilotare 2 o 3 relè con arduino e la ethernet shield?
    grazie

    1. Ciao Angelo,
      ti consiglio di leggere gli articoli sulla ethernet ed i led poi sostituisci i led con dei relé.
      Ogni relé che aggiungi devi scriverti tutto il codice arduino che ti serve per interpretare le comunicazioni tra ethernet e relé.

    • Davide il 5 Luglio 2014 alle 12:47
    • Rispondi

    c’è una cosa che non mi è chiara, tu scrivi: ” in caso di ricezione di un carriege return (\r) impostano a false la stessa”. Invece nel sorgente c’è scritto:

     else if (c != ‘\r’) {
              currentLineIsBlank = false;

    Quindi, è in caso di mancata ricezione di un \r che imposta a false.

    In ogni caso, visto che questo sorgente non fa altro che inviare un file html ad ogni richiesta del client, una volta ricevuto il file, il client non dovrebbe fare più richieste, quindi non capisco a cosa serva la currentLineIsBlank.

    Potresti spiegarmelo?
    Grazie

    1. Ciao Davide, hai ragione é espresso male. Nella realtà potrai verificare che quel codice e la variabile currentLineIsBlank servono ad evitare al server di reinviartela gli headers della risposta http e del file HTML fino a quando non arriva dal cliente un carriege return.

        • Davide il 12 Luglio 2014 alle 16:50
        • Rispondi

        questo perchè la richiesta http si conclude in pratica con un doppio \r\n. Quindi se ho capito bene leggo un byte alla volta, i primi saranno caratteri, quindi currentLineIsBlank va a false, ad un certo punto trovo \r e salta il ciclo, poi riceve \n e va a true, ma subito dopo troverà un’altro carattere diverso e quindi torna a false. Finchè la richiesta non arriva alla fine, dove troverà \n e va a true, poi troverà \r e ignorerà il ciclo e finalmente con l’ultimo \n risponderà alla richiesta.

        Credo di aver capito. Grazie 🙂

        1. Ciao Davide, non avrei saputo spiegarlo meglio.

    • Eliseo il 3 Ottobre 2014 alle 20:24
    • Rispondi

    Ciao, ho un problema che non riesco proprio a capire.
    Ho scritto un programma per la gestione caldaia, con display lcd, pulsanti, e relè di controllo. Ora, funziona tutto bene, tranne quando inserisco le librerie per la SD.
    #include
    Se la inserisco, il programma lo compila correttamente, ma una volta messo sul micro, non riesce può a gestirmi il display…mi scrive solo la prima riga, come mai??
    Ho pensato che forse è troppo pieno di variabili??
    Programma senza gestione SD = 53% di sketch e 37% di variabili
    Programma CON gestione SD = 88% di sketch e 78% di variabili

    Magari mi va a sovrascrivere delle variabili??
    BOH

    Ho provato anche solo la gestione sd e funziona tutto bene, come volevo io, ma se metto assieme anche il resto del programma niente….cosa può essere?
    Forse usare contemporaneamente spi, i2c, eeprom, uart va in confusione?

    GRAZIE

    1. Ciao Eliseo,
      apparentemente potrebbe essere un conflitto tra le variabili ed il loro utilizzo se il circuito montato e provato solo con lo sketch per la SD Card funziona.
      Quando incontro questo tipo di conflitti di solito preferisco cambiare una o più librerie in modo che siano compatibili tra loro.
      Uso di solito una libreria che si chiama “SdFat”, puoi scaricarla da internet, con la quale non ho mai avuto conflitti.

    • Angelo il 10 Ottobre 2014 alle 13:46
    • Rispondi

    Ciao, complimenti innanzitutto per la competenza che ho visto leggendo le tue risposte ai vari quesiti fatti.
    Anche io avrei un quesito da porti.
    Come potrei fare a mandare una mail utilizzando arduino e la scheda ethernet ?
    Vorrei utilizzare il server di posta del gestore di casa per inviare una mail al succedere di un processo che gestisce arduino.
    Grazie anticipatamente

    Angelo

    1. Ciao Angelo, puoi provare con i comandi che solitamente si usano per inviare email tramite telnet. Non ho mai provato con arduino ma di certo é in grado di inviare comandi ad un server. In alternativa potresti cercare una libreria per l’invio email o usare la Yún sfruttando linino.

    • georges il 27 Gennaio 2015 alle 04:35
    • Rispondi

    bonjour , j´ai trouver des informacions de comment metre une page en javascrit , si sa peux vous etre utli:

    cet en anglais

    http://www.hackshed.co.uk/lets-build-a-functional-arduino-webserver-sdcard-ethernet/

    1. Merci Georges.

    • Roberto il 21 Aprile 2015 alle 06:46
    • Rispondi

    Ciao Mauro,ti seguo da tempo con ammirazione per tutte le informazioni utili che fornisci.
    Avrei bisogno di un aiuto.
    Ho scritto uno sketch per domotizzare casa. Mi legge tre temperature e ho inserito dei comandi per accensioni e spegnimento. Funziona abbastanza bene ma il tutto e’ caricato sul mio arduino mega 2560 ADK che gestisco tramite remoto con la ethernet shield montata sullo stesso.
    Il punto è questo: siccome vorrei migliorare la grafica della pagina web e mi rendo conto che non posso farlo senza sd, come posso caricare la pagina web sulla sd, nel senso, se ti posto lo sketch potresti indicarmi come implementare la lettura della sd e cosa devo caricare sulla sd e cosa lasciare sull’arduino?

    Spero di essere stato chiaro.
    Aspetto una tua risposta …grazie davvero tanto !!!!

    1. Ciao Roberto,
      non eseguo modifiche agli sketch scritti da altri in quanto ognuno ha il proprio modo di scrivere progetti.
      Eseguo, se ti interessa progetti su commissione, per i quali ti invito a scrivermi sulla casella info del blog.
      In alternativa ti invito a leggere il tutorial in cui descrivo come inserire pagine web sulla sd card e gestirle da arduino, sono sicuro che riuscirai con un po di impegno ad aggiungere delle pagine html al tuo progetto e se ti va alla fine posso pubblicare il tuo lavoro se vorrai condividerlo con altri appassionati.

        • Roberto il 21 Aprile 2015 alle 13:17
        • Rispondi

        Ciao Mauro, grazie di avermi risposto.
        Cerchero’ di riuscirci da solo seguendo i tuoi suggerimenti.
        Se ci riusciro’ saro’ ben lieto di condividere il mio risultato nel tuo Blog !!!!
        Grazie

        1. Ciao Roberto,
          è lo spirito giusto, ed anche lo scopo del mio blog, contrariamente a come si pensa io apprezzo chi ci prova da solo e mi da maggiore ispirazione di chi mi chiede un progetto su commissione 🙂
          Se hai dubbi leggendo i miei articoli scrivimi che provo a chiarirli.

            • Roberto il 26 Aprile 2015 alle 16:56

            Ciao Mauro, sto tentando ma senza risultato, non capisco proprio come fare !!!

            Sono in panne.

            ciao

            Roberto

          1. Ciao Roberto,
            il progetto che stai realizzando non è semplice, non basta una o due righe di codice ma va strutturato bene prima di scrivere righe di codice per evitare errori macroscopici in fase avanzata di scrittura.
            Io quando sono in queste situazioni provo gli sketch uno alla volta separatamente e quando ogni sketch semplice funziona passo alla composizione dello sketch finale.
            Potrebbe essere un metodo che ti aiuti nel tuo scopo.

    • Giuseppe il 6 Maggio 2015 alle 11:04
    • Rispondi

    Buongiorno Mauro,
    spero che potrai rispondere alla mia domanda.
    Io ho sempre scritto il codice html direttamente nello sketch di Arduino ma oggi di fronte ad un progetto più complesso, vorrei aprire le porte alla scheda SD.
    Precedentemente io facevo i confronti con le stringhe per interagire via web e quindi ” if(readString.indexOf(“R9=0″) > 0) {
    digitalWrite(relay9, LOW);}”
    Fino a qui ci siamo, tutto funziona; ma nel momento in cui utilizzerò la pagina html caricata sulla sd potrò comunque utilizzare quel tipo di richiesta oppure c’è un’altro modo? Questa parte in tutti i tutorial non è specificata, spero di avere un tuo riscontro.

    Grazie per l’attenzione concessami,
    la presente per complimentarmi con Te per come gestisci al meglio il blog, fonte di risorse per tutti.

    Cordiali Saluti,
    Giuseppe.

    1. Ciao Giuseppe,
      non mi è chiaro dove si trova la Stringa che contiene “R9=0” se arriva dall’Url della chiamata, come fatto in altri miei esempi, non cambia nulla se la pagina si trova sulla SD o nello sketch arduino.

        • Giuseppe il 6 Maggio 2015 alle 14:00
        • Rispondi

        La stringa R9=0 viene generata alla pressione del bottone sulla pagina html.

        1. Ciao Giuseppe,
          quindi una GET o altro metodo di invio ?

            • Giuseppe il 6 Maggio 2015 alle 16:37

            Ciao Mauro,
            ho provato direttamente e ci sono riuscito da solo, ti ringrazio lo stesso. Ora però ho un altro dubbio: prima facevo “if (RELE2) {
            client.println(“ON”);
            }
            else
            {
            client.println(“OFF”);
            }”
            ora che il codice html non è più “passopasso” come posso fare quel controllo per visualizzare lo stato dell’uscita?

          1. Ciao Giuseppe,
            questa è una operazione più complessa, ma puoi riuscirci con un po di pazienza.
            Nel file html devi inserire delle sequenze di caratteri speciali, in gergo puntatori, in corrispondenza dei punti da modificare on “on” ed “off”
            Durante la trasmissione delle linee di codice dovrai eseguire la lettura, linea per linea, del file html e quando incontri un puntatore lo sostituisci con il valore che vuoi sia visualizzato.

            In alternativa potresti implementare delle chiamate AJAX dalla pagina html verso il server e lato arduino valutare il tipo di chiamata e restituire solo in questo caso una riga scritta nello sketch come facevi prima ( client.println(“ON”); o client.println(“OFF”); )

    • Giuseppe il 6 Maggio 2015 alle 20:08
    • Rispondi

    Ciao Mauro,
    potresti farmi un piccolo esempio? Ti ringrazio

    1. Ciao Giuseppe,
      a breve non ho in programma un tutorial su questo argomento.
      Potrei pensarci per il futuro ma non so garantirti quando.

    • Angelo il 16 Maggio 2015 alle 18:01
    • Rispondi

    Mauro,
    ci siamo conosciuti all’absolute beginners di Aprile, va da se’ che sono proprio agli inizi..
    Sto sperimentando con la Ethernet shield e noto qualche problemino, volevo sapere se potevi gentilmente darmi qualche consiglio.

    Primo, quando la shield è montata sull’arduino non riesco a caricare lo sketch. Devo smontare la shield e i vari collegamenti, caricare lo sketch e quindi rimontare il tutto. Così funziona, solo che per ogni piccola variazione allo sketch rifare tutto ciò diventa pesante. E’ un funzionamento normale, sbaglio io qualcosa o c’è qualche trucco per ovviare al problema?

    Seconda cosa strana: sto facendo una semplice lettura analogica di un sensore di temperatura TMP dal pin A0. Fatto con arduino e basta, tutto ok. Quando monto la ethernet shield, la lettura dal pin A0 (della shield) è totalmente diversa (tipo 650 invece di 150). Ancora più strano, scaldando il sensore il valore misurato scende invece di salire. Suggerimenti?
    grazie in anticipo.
    angelo

    1. Ciao Angelo,
      non è un comportamento normale quello che mi racconti, sarebbe ingestibile.
      Se la shield è la Ethernet originale e non ci sono malfunzionamenti sulla stessa ipotizzo dipenda dalle connessioni dei componenti esterni, magari qualcuno va in corto o assorbe più di quanto possibile.

      Per il secondo punto protendo sempre di più per l’ipotesi che si tratti di un problema elettronico.

        • Angelo il 20 Maggio 2015 alle 23:56
        • Rispondi

        Mauro
        grazie per la risposta.

        Per quanto riguarda la letura del sensore di temperatura, ho scoperto che si tratta di un problema sul PIN A0 della sheld. Spostando la lettura su A2 funziona normalmente.

        Per il problema del caricamento delo sketch, qualcuno ieri mi diceva che può dipendere dal fatto che la shield ethernet occupa gli stessi pin seriali utilzzati per il collegamento all’ IDE, o qualcosa del genere.

        Non so. Comunque grazie per l’interessamento e alla prossima.

        ciao
        Angelo

        1. Ciao Angelo,
          mi fa piacere tu abbia scoperto il problema e che lo abbia condiviso.
          Ti chiedo una info, l’arduino e le shield che stai utilizzando sono originali?
          Non mi è mai capitato un comportamento come quello che mi hai descritto con le mie shield.

    • Fabio il 30 Maggio 2015 alle 12:48
    • Rispondi

    Ciao Mauro,

    ti scrivo per chiederti se puoi propormi qualche soluzione al problema di connessione a webserver che espongo di seguito. Ho realizzato un sistema di acquisizione dati in campo con Arduino Mega2560 ed ethernet shield w5100, configurata in DHCP, per archiviare dati su un DB remoto tramite una pagina di raccolta dati scritta in ASP lato server.
    Non si verifica nessun problema di connessione alla pagina web e pertanto di archiviazione dei dati su DB remoto, quando la Ethernet shield è collegata allo switch del router ADSL tramite cavo LAN.

    Per difficoltà di posa in opera in campo del cavo LAN di lunghezza circa 100metri, ho stabilito un link WiFi tra la Ethernet shield e il router ADSL wifi, tramite un client outdoor WiFi 150Mbps modello NETIS WF-2301 con uscita RJ45 collegata alla shield.

    Quest’ultima riceve correttamente l’IP assegnato dinamicamente dal DHCP server del router ma non inserisce mai dati sul DB remoto.

    Noto anche che lo status dei led TX e RX sulla shield sono spenti, diversamente a quando è collegata via cavo LAN al router in cui i led si accendono alternativamente durante la trasmissione dei dati. E’ chiaro che c’è qualcosa che non va e non so se il problema è proprio il client.
    Se però provo a pingare dal PC la Eth shield 192.168.1.193 connessa al client wifi mi risponde correttamente alle richieste.
    Ha un problema in uscita, come se non inviasse la richiesta GET oppure che la invia ma non riceve la risposta dal server. Non so come venirne a capo.

    Per sincerarmi, però, che il link wifi funzionasse davvero, e che non ci fossero restrizioni da firewall o altro, ho provato a simulare quello che dovrebbe fare la shield ethernet, ossia mi sono collegato con cavo LAN al client outdoor wifi con notebook, e inviato da browser i parametri di prova da passare alla pagina ASP di raccolta dati lato server in questo modo:
    http://mioserver.com/raccoltadati.asp?id_centralina=1&Analog0=150&Analog1=230
    Il tutto ha funziona perfettamente, la scrittura dei dati su DataBase è avvenuta con successo.

    Pertanto non capisco l’errore di connessione che incontra la shield ethernet se è attribuibile a qualche impostazione non presente nel codice o per l’incapacità di inviare dati con questa modalità di collegamento.

    Hai mai provato a collegare la Ethernet shield al router WiFi per il tramite di un client WiFi-Ethernet?
    Se sì, con quale modello?

    E’ mai possibile che non può comunicare in questo modo?

    In attesa di un tuo riscontro, porgo cordiali saluti.

    Fabio

    P.S. : posto proceduta invio dati a server

    [[ codice rimosso in automatico ]]

    1. Ciao Fabio,
      come sai non è possibile incollare codice nei commenti, viene eliminato in automatico da un plugin.
      Il problema che evidenzi non è la prima volta che mi viene sottoposto tuttavia non ho avuto modo di verificare come mai accada, io ho connesso la Ethenrnet shield ad un router ed ad un AP diverse volte senza mai riscontrare questo problema.
      Ti consiglierei di eseguire un po di test con il monitor seriale magari utilizzando una modalità di sketch in cui tu riesca a simulare la sottomissione dei comandi da seriale e poter verificare per ciascun comando cosa ti restituisce il router.

    • domenico il 14 Giugno 2015 alle 18:15
    • Rispondi

    ciao ho inserito la scheda schield con sd card . sopra la scheda di arduino uno. E’ identica a quella che si vede all’interno del tuo tutorial.
    dopo un pò che è inserita la sento che scalda abbastanza, è normale oppure no. ti ringrazio per l’aiuto

    1. Ciao Domenico,
      ma mia non si è mai comportata in questo modo, la SD non ha driver di potenza od altro che possono scaldare.

    • domenico il 16 Giugno 2015 alle 18:40
    • Rispondi

    mi sono dimenticato di dirti che io ho collegato la scheda ethernet ad arduino uno.può essere quello il motivo.
    la scheda è nuova, la prima volta che lacollego anche perchè non so ancora come programmarla. ti ringrazio per il disturbo.

    1. Ciao Domenico,
      ti consiglio di eseguire l’upload di uno sketch sull’arduino per evitare che il blink, primo programma presente in arduino quando è nuovo, possa inviare dei segnali sbagliati attraverso il pin 13 ( SCK ) della scheda Ethernet.

    • GianPiero il 2 Novembre 2015 alle 22:18
    • Rispondi

    Ciao Mauro,

    Ho un problema con Arduino e ethernet shield w5100, ho sviluppato uno sketch che muove una telecamera in Wi-Fi (qui tutto ok) ma quando do il commando di mandarmi una immagine non riesco a memorizzarla nella scheda SD. Dalla telecamera riceve il commando e inizia a mandarmi i dati.

    Purtroppo io non so come selezionare i dati e poi memorizzarli sulla SD per poter vederli con un PC nel formato JPG (si crea il file .JPG ma il PC non lo riconosce.

    Ti ringrazio per il disturbo e il tempo concesso, ma mi basta un’indicazione corretta di come devo impostare il tutto.

    Ciao
    GianPiero

    1. Ciao Giampiero,
      non ho mai provato a memorizzare un flusso dati dalla Ethernet alla SD.
      Non sono neppure certo che arduino possieda sufficienti risorse per farlo.

        • GianPiero il 3 Novembre 2015 alle 21:51
        • Rispondi

        Ciao Mauro

        grazie, grazie tanto per la risposta, comunque non mi arrendo e spero di trovare una soluzione che ti girerò per una tua valutazione e per metterlo in rete.

        ciao
        GianPiero

        1. Ciao Giampiero,
          se trovi una buona soluzione la pubblico di sicuro, a tuo nome, così che altri ne possano beneficiare.

    • Salvatore il 15 Gennaio 2016 alle 15:21
    • Rispondi

    Ciao,
    avrei una domanda da neofita (ancora meno).
    Ho un arduino con ethernet shield originale e I/O schield (https://www.mauroalfieri.it/elettronica/tutorial-shield-io-comandare-luci-esterne.html)

    Avrei necessità di creare (riprodurre) uno sketch per il l’azionamento dei relay da web.
    Ho 6 ralay e ne devo occupare 3 (fin ora).

    Ho provato ad assemblare da 2 sketch ma non riesco a far funzionare. Il problema è comandare i relay. Grazie

    Potete aiutarmi?
    Grazie infinite

    1. Ciao Salvatore,
      se mi indichi il problema che riscontri e l’analisi che hai eseguito posso provare a chiarirti eventuali dubbi.

    • Davide73 il 8 Febbraio 2016 alle 17:33
    • Rispondi

    Ciao Mauro,

    ho provato lo sketchbook sul mio arduino uno R2 con IDE 1.6.7 e Ubuntu 15.10. Purtroppo non riesco a caricarlo perchè mi appare un messaggio di errore. Potresti aiutarmi? Grazie
    Arduino:1.6.7 (Linux), Scheda:”Arduino Ethernet”

    sketch_feb08a:8: error: La classe Server è stata rinominata EthernetServer
    Da Arduino IDE 1.0 la classe Server nella libreria Ethernet è stata rinominata EthernetServer

    Server server(80);
    ^
    /tmp/arduino_6291a593ea85dcb34d459098085c4e6d/sketch_feb08a.ino:8:17: note: candidates are:
    In file included from /home/davide/Documenti/Arduino/arduino-1.6.7/libraries/Ethernet/src/EthernetServer.h:4:0,
    from /home/davide/Documenti/Arduino/arduino-1.6.7/libraries/Ethernet/src/Ethernet.h:8,
    from /tmp/arduino_6291a593ea85dcb34d459098085c4e6d/sketch_feb08a.ino:2:
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Server.h:25:7: note: Server::Server()
    class Server : public Print {
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Server.h:25:7: note: candidate expects 0 arguments, 1 provided
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Server.h:25:7: note: constexpr Server::Server(const Server&)
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Server.h:25:7: note: no known conversion for argument 1 from ‘int’ to ‘const Server&’
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Server.h:25:7: note: constexpr Server::Server(Server&&)
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Server.h:25:7: note: no known conversion for argument 1 from ‘int’ to ‘Server&&’
    sketch_feb08a:8: error: cannot declare variable ‘server’ to be of abstract type ‘Server’
    Server server(80);
    ^
    In file included from /home/davide/Documenti/Arduino/arduino-1.6.7/libraries/Ethernet/src/EthernetServer.h:4:0,
    from /home/davide/Documenti/Arduino/arduino-1.6.7/libraries/Ethernet/src/Ethernet.h:8,
    from /tmp/arduino_6291a593ea85dcb34d459098085c4e6d/sketch_feb08a.ino:2:
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Server.h:25:7: note: because the following virtual functions are pure within ‘Server’:
    class Server : public Print {
    ^
    In file included from /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Stream.h:26:0,
    from /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/HardwareSerial.h:29,
    from /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Arduino.h:224,
    from sketch/sketch_feb08a.ino.cpp:1:
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Print.h:48:20: note: virtual size_t Print::write(uint8_t)
    virtual size_t write(uint8_t) = 0;
    ^
    In file included from /home/davide/Documenti/Arduino/arduino-1.6.7/libraries/Ethernet/src/EthernetServer.h:4:0,
    from /home/davide/Documenti/Arduino/arduino-1.6.7/libraries/Ethernet/src/Ethernet.h:8,
    from /tmp/arduino_6291a593ea85dcb34d459098085c4e6d/sketch_feb08a.ino:2:
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Server.h:27:16: note: virtual void Server::begin()
    virtual void begin() =0;
    ^
    /tmp/arduino_6291a593ea85dcb34d459098085c4e6d/sketch_feb08a.ino: In function ‘void loop()’:
    sketch_feb08a:19: error: ‘class Server’ has no member named ‘available’
    Client client = server.available();
    ^
    sketch_feb08a:19: error: cannot declare variable ‘client’ to be of abstract type ‘Client’
    Client client = server.available();
    ^
    In file included from /home/davide/Documenti/Arduino/arduino-1.6.7/libraries/Ethernet/src/EthernetClient.h:5:0,
    from /home/davide/Documenti/Arduino/arduino-1.6.7/libraries/Ethernet/src/Ethernet.h:7,
    from /tmp/arduino_6291a593ea85dcb34d459098085c4e6d/sketch_feb08a.ino:2:
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:26:7: note: because the following virtual functions are pure within ‘Client’:
    class Client : public Stream {
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:31:18: note: virtual size_t Client::write(uint8_t)
    virtual size_t write(uint8_t) =0;
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:32:18: note: virtual size_t Client::write(const uint8_t*, size_t)
    virtual size_t write(const uint8_t *buf, size_t size) =0;
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:33:15: note: virtual int Client::available()
    virtual int available() = 0;
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:34:15: note: virtual int Client::read()
    virtual int read() = 0;
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:36:15: note: virtual int Client::peek()
    virtual int peek() = 0;
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:37:16: note: virtual void Client::flush()
    virtual void flush() = 0;
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:29:15: note: virtual int Client::connect(IPAddress, uint16_t)
    virtual int connect(IPAddress ip, uint16_t port) =0;
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:30:15: note: virtual int Client::connect(const char*, uint16_t)
    virtual int connect(const char *host, uint16_t port) =0;
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:35:15: note: virtual int Client::read(uint8_t*, size_t)
    virtual int read(uint8_t *buf, size_t size) = 0;
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:38:16: note: virtual void Client::stop()
    virtual void stop() = 0;
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:39:19: note: virtual uint8_t Client::connected()
    virtual uint8_t connected() = 0;
    ^
    /home/davide/Documenti/Arduino/arduino-1.6.7/hardware/arduino/avr/cores/arduino/Client.h:40:11: note: virtual Client::operator bool()
    virtual operator bool() = 0;
    ^
    sketch_feb08a:33: error: La parola chiave ‘BYTE’ non è più supportata
    Da Arduino IDE 1.0 la parola chiave ‘BYTE’ non è più supportata.
    Usa Serial.write() al suo posto

    client.print(htmlFile.read(), BYTE);
    ^
    exit status 1
    La classe Server è stata rinominata EthernetServer

    1. Ciao Davide,
      l’errore è nella prima parte:

      sketch_feb08a:8: error: La classe Server è stata rinominata EthernetServer
      Da Arduino IDE 1.0 la classe Server nella libreria Ethernet è stata rinominata EthernetServer
      
      Server server(80);
      

      Significa che lo sketch deve essere riadattato linea per linea in quanto la classe Server oggi si chiama EthernetServer.
      Proseguendo errore dopo errore devi correggere tutto lo sketch.

    • Stefano il 5 Giugno 2016 alle 19:15
    • Rispondi

    Buongiorno, stavo provando questo sketch, ma non capisco questo errore:
    “exit status 1
    expected unqualified-id before ‘.’ token”

    in corrispondenza di questa riga:
    “EthernetClient.print(htmlFile.read(), BYTE);”

    grazie

    1. Ciao Stefano,
      controlla nella documentazione della libreria Ethernet se la sintassi è ancora valida, potrebbero aver cambiato la libreria con gli ultimi IDE ed il mio codice dover essere modificato per funzionare.

        • Stefano il 7 Giugno 2016 alle 18:10
        • Rispondi

        Ok Grazie credo di avere risolto in questo modo,
        alla tua riga 33:
        client.print(htmlFile.read(), BYTE);
        ho cambiato così:
        client.print(htmlFile.read(), BIN);

        1. Ciao Stefano,
          attenzione che non è la medesima cosa.

    • roberto il 12 Luglio 2016 alle 23:41
    • Rispondi

    Ciao Mauro,
    Vorrei controllare un led da remoto utilizzando la scheda Ethernet Shield.
    La pagina web deve essere caricata su scheda SD.
    Ad ora riesco a caricare il file senza problemi,però la difficolta risulta nel gestire il pulsante dalla pagina web.
    In internet purtroppo non riesco a trovare nulla di simile;si parte sempre dal presupposto che la pagina web è gestita direttamente dallo sketch.
    Hai mai fatto nulla del genere?
    Grazie in anticipo.
    Roberto

    1. Ciao Roberto,
      il motivo per cui è sempre gestito nello sketch è che le elaborazioni di pagine su SD contenenti comandi sono più complesse in quanto devono essere gestite totalmente dallo sketch e spesso occorre più memoria e tempo computazionale per la gestione che per lo scopo della pagina stessa.
      Tu perché vuoi che la pagina risieda su SD?

    • fabio il 9 Settembre 2016 alle 10:46
    • Rispondi

    salve avrei bisogno di una dritta ho intenzione di assemblare un registratore ip per una camera ip e volevo sapere se la Ethernet shield como cliente puo inviare immagini htm alla scheda sd e come potrei farlo

    grazie attentamente

    1. Ciao Fabio,
      da come scrivi hai le idee confuse su ethernet,sd,html,ecc.. ti consiglio di leggere qualche manuale sui protocolli e su com funziona lo streaming video da una camera Ip prima di cimentarti in un progetto di tale complessità.
      In ogni caso io userei RaspberryPi e Linux per fare quello che desideri.

    • fabio il 12 Settembre 2016 alle 11:40
    • Rispondi

    in effetti….

    grazie

    • Michele il 13 Giugno 2017 alle 21:18
    • Rispondi

    Salve. Posso avere un esempio di file HTM?
    Non so come basarmi…

    1. Ciao Michele,
      che tipo di esempio intendi? Un file .htm altro non è che un file contenente i tag HTML standard che trovi ovunque in rete.

  3. Buon giorno,
    ho trovato molto interessante l’articolo che prevede l’uso della SD per contenere maschere HTML.
    Io vorrei realizzare un sistema per controllo relays remoto da internet e quindi vorrei capire come fare a costruire dei pulsanti , mettergli in nome e poi come testare se sono stati premuti…
    Come potrei procedere per favore ?
    Potresti darmi gentilmente delle dritte soprattutto come creare l’ HTML ?
    Grazie anticipatamente
    Ambrogio

    1. Ciao Ambrogio,
      con le pagine HTML è possibile usando semplicemente creando dei pulsanti che alla pressione generino dei link alla pagina stessa passandole dei valori specifici.
      Ad esempio href=”pagina.html#pulsante1on” oppure href=”pagina.html#pulsante1off” poi lato arduino dovrai eseguire il controllo dei valori che ti sei passato e comportarti di conseguenza.
      Trovi dei miei articoli che ne parlano.

    • Ambrogio il 31 Maggio 2018 alle 10:12
    • Rispondi

    Grazie Mauro per la risposta.
    per favore potresti inviarmi dei links per accedere agli articoli specifici ?
    grazie anticipatamente.
    Ambro

    1. Ciao Ambrogio,
      puoi usare la ricerca del blog per cercare e leggere quelli di tuo interesse, ti chiedo un piccolo sforzo alla ricerca di informazioni già confezionate pronte per i tuoi esperimenti e al fine di trovare e selezionare solo quello di tuo interesse.
      Eseguendo io la ricerca rischio di portarti fuori strada conoscendo poco il tuo progetto.

    • Ambrogio il 31 Maggio 2018 alle 21:50
    • Rispondi

    Mauro,
    non riesco a compilare lo sketch pubblicato perchè ottengo questi errori:
    Qualche aiuto per favore ?
    Grazie
    Ambro

    Arduino:1.8.3 (Windows 7), Scheda:”Arduino/Genuino Uno”
    sketch_may31d:8: error: La classe Server è stata rinominata EthernetServer
    Da Arduino IDE 1.0 la classe Server nella libreria Ethernet è stata rinominata EthernetServer
    Server server(80);
    C:\Users\Ambro_PC\Documents\Arduino\sketch_may31d\sketch_may31d.ino:8:17: note: candidates are:
    In file included from C:\Program Files (x86)\Arduino\libraries\Ethernet\src/EthernetServer.h:4:0,
    from C:\Program Files (x86)\Arduino\libraries\Ethernet\src/Ethernet.h:8,
    from C:\Users\Ambro_PC\Documents\Arduino\sketch_may31d\sketch_may31d.ino:2:
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Server.h:25:7: note: Server::Server()
    class Server : public Print {
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Server.h:25:7: note: candidate expects 0 arguments, 1 provided
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Server.h:25:7: note: constexpr Server::Server(const Server&)
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Server.h:25:7: note: no known conversion for argument 1 from ‘int’ to ‘const Server&’
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Server.h:25:7: note: constexpr Server::Server(Server&&)
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Server.h:25:7: note: no known conversion for argument 1 from ‘int’ to ‘Server&&’
    sketch_may31d:8: error: cannot declare variable ‘server’ to be of abstract type ‘Server’
    Server server(80);
    In file included from C:\Program Files (x86)\Arduino\libraries\Ethernet\src/EthernetServer.h:4:0,
    from C:\Program Files (x86)\Arduino\libraries\Ethernet\src/Ethernet.h:8,
    from C:\Users\Ambro_PC\Documents\Arduino\sketch_may31d\sketch_may31d.ino:2:
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Server.h:25:7: note: because the following virtual functions are pure within ‘Server’:
    class Server : public Print {
    In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
    from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
    from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:232,
    from sketch\sketch_may31d.ino.cpp:1:

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:51:20: note: virtual size_t Print::write(uint8_t)

    virtual size_t write(uint8_t) = 0;

    ^

    In file included from C:\Program Files (x86)\Arduino\libraries\Ethernet\src/EthernetServer.h:4:0,

    from C:\Program Files (x86)\Arduino\libraries\Ethernet\src/Ethernet.h:8,

    from C:\Users\Ambro_PC\Documents\Arduino\sketch_may31d\sketch_may31d.ino:2:

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Server.h:27:16: note: virtual void Server::begin()

    virtual void begin() =0;

    ^

    C:\Users\Ambro_PC\Documents\Arduino\sketch_may31d\sketch_may31d.ino: In function ‘void loop()’:

    sketch_may31d:19: error: ‘class Server’ has no member named ‘available’

    Client client = server.available();

    ^

    sketch_may31d:19: error: cannot declare variable ‘client’ to be of abstract type ‘Client’

    Client client = server.available();

    ^

    In file included from C:\Program Files (x86)\Arduino\libraries\Ethernet\src/EthernetClient.h:5:0,

    from C:\Program Files (x86)\Arduino\libraries\Ethernet\src/Ethernet.h:7,

    from C:\Users\Ambro_PC\Documents\Arduino\sketch_may31d\sketch_may31d.ino:2:

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:26:7: note: because the following virtual functions are pure within ‘Client’:

    class Client : public Stream {

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:31:18: note: virtual size_t Client::write(uint8_t)

    virtual size_t write(uint8_t) =0;

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:32:18: note: virtual size_t Client::write(const uint8_t*, size_t)

    virtual size_t write(const uint8_t *buf, size_t size) =0;

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:37:16: note: virtual void Client::flush()

    virtual void flush() = 0;

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:33:15: note: virtual int Client::available()

    virtual int available() = 0;

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:34:15: note: virtual int Client::read()

    virtual int read() = 0;

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:36:15: note: virtual int Client::peek()

    virtual int peek() = 0;

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:29:15: note: virtual int Client::connect(IPAddress, uint16_t)

    virtual int connect(IPAddress ip, uint16_t port) =0;

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:30:15: note: virtual int Client::connect(const char*, uint16_t)

    virtual int connect(const char *host, uint16_t port) =0;

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:35:15: note: virtual int Client::read(uint8_t*, size_t)

    virtual int read(uint8_t *buf, size_t size) = 0;

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:38:16: note: virtual void Client::stop()

    virtual void stop() = 0;

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:39:19: note: virtual uint8_t Client::connected()

    virtual uint8_t connected() = 0;

    ^

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:40:11: note: virtual Client::operator bool()

    virtual operator bool() = 0;

    ^

    sketch_may31d:33: error: La parola chiave ‘BYTE’ non è più supportata
    Da Arduino IDE 1.0 la parola chiave ‘BYTE’ non è più supportata.
    Usa Serial.write() al suo posto

    client.print(htmlFile.read(), BYTE);

    ^

    exit status 1
    La classe Server è stata rinominata EthernetServer

    Questo report potrebbe essere più ricco di informazioni abilitando l’opzione
    “Mostra un output dettagliato durante la compilazione”
    in “File -> Impostazioni”

    1. Ciao Ambrogio,
      nelle prime righe dell’errore leggi:
      La classe Server è stata rinominata EthernetServer
      che indica il fatto che la libreria Server è stata cambiata e dovrai adattare il codice.
      Hai due strade:
      1. la prima è adattare lo sketch sostituendo la chiamata alla libreria precedente con quella attuale, rinominando dove occorre;
      2. usare una versione dell’IDE risalente alla data in cui ho scritto questo articolo che ancora disponeva di quelle librerie.

      Io protenderei per la prima che ti assicura un funzionamento più longevo dello sketch.

  1. […] Mauro Alfieri » Blog Archive » Tutorial Arduino Ethernet e SD Card Source: https://www.mauroalfieri.it […]

  2. […] Ci sono alcune linee che si riferiscono solo alla comunicazione Ethernet, sono linee che avrai già incontrato in altri tutorial di questo sito: Tutorial Arduino Ethernet e SD Card. […]

  3. […] sei tra gli appassionati che hanno già letto il mio articolo su Arduino Ethernet e SD Card, e probabilmente come altri che mi hanno scritto ti sei chiesto se è possibile realizzare un […]

  4. […] sei tra gli appassionati che hanno già letto il mio articolo su Arduino Ethernet e SD Card, e probabilmente come altri che mi hanno scritto ti sei chiesto se è possibile realizzare un […]

  5. […] livello HIGH i pin 4 e 10 rispettivamente per la SD Card e la WiFi ( leggi l’articolo sulla Ethernet Shield […]

  6. […] Vuoi connettere il tuo progetto con arduino a internet? Usa la GPRS shield. Per connettere il tuo progetto alla grande rete hai già letto come utilizzare la WiFi shield o Ethernet Shield […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.