«

»

set 23

Stampa Articolo

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.

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

119 comments

6 pings

Vai al modulo dei commenti

  1. pablos

    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. Mauro Alfieri

      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

  2. Diego

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

    1. Mauro Alfieri

      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.

  3. pablos

    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

    1. Leonid

      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. Mauro Alfieri

        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

      2. delta

        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!

  4. pablos

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

  5. lui la plume

    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. Mauro Alfieri

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

  6. lui la plume

    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. Mauro Alfieri

      Bene, sono contento che tu abbia risolto.
      Mauro

  7. David

    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. Mauro Alfieri

      File appariene alla libreria SD, inclusa alla linea 03.

      Mauro

  8. Alberto

    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. Mauro Alfieri

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

      Mauro

  9. antonio

    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. Mauro Alfieri

      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

  10. antonio

    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).

  11. Antonio

    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. Mauro Alfieri

      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

    2. Franco

      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. Mauro Alfieri

        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

        1. Federico

          Stesso errore… senza BYTE solo sequenze di numeri :(

          1. Mauro Alfieri

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

  12. Gianfranco

    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. Mauro Alfieri

      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

  13. Gianfranco

    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. Mauro Alfieri

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

      Mauro

  14. Gianfranco

    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. Mauro Alfieri

      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

  15. Gianfranco

    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. Mauro Alfieri

      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

  16. gianfranco

    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. Mauro Alfieri

      Molto interesante !!!
      Mauro

  17. Davide

    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. Mauro Alfieri

      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

  18. armando

    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. Mauro Alfieri

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

      Mauro

  19. armando

    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. Mauro Alfieri

      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

  20. armando

    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. Mauro Alfieri

      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

  21. armando

    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. Mauro Alfieri

      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

  22. Davide

    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. Mauro Alfieri

      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

      1. Davide

        Grazie mille, sei stato chiaro! Buona Pasqua!

  23. Macca96

    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. Mauro Alfieri

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

      Mauro

  24. Luca

    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. Mauro Alfieri

      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

  25. Matteo

    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. Mauro Alfieri

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

      Mauro

      1. Matteo

        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. Mauro Alfieri

          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

          1. Matteo

            Ci sono riuscito finalmente!!!!
            Grazie.

          2. Mauro Alfieri

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

            Mauro

  26. Riccardo

    Ciao Mauro.

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

    grazie

    1. Mauro Alfieri

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

      Mauro

  27. Franco

    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. Mauro Alfieri

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

      Mauro

  28. Riccardo Matta

    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. Mauro Alfieri

      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

  29. Mattia Dei

    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. Mauro Alfieri

      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.

      1. Mattia Dei

        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. Mauro Alfieri

          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.

  30. Mattia Dei

    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. Mauro Alfieri

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

      1. Mattia Dei

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

        1. Mauro Alfieri

          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.

          1. Mattia Dei

            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).

          2. Mauro Alfieri

            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.

          3. Mattia Dei

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

          4. Mauro Alfieri

            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

  31. Daniele

    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. Mauro Alfieri

      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.

  32. Alessandro

    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. Mauro Alfieri

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

  33. Karim

    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. Mauro Alfieri

      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à.

  34. angelo

    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. Mauro Alfieri

      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é.

  35. Davide

    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. Mauro Alfieri

      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.

      1. Davide

        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. Mauro Alfieri

          Ciao Davide, non avrei saputo spiegarlo meglio.

  36. Eliseo

    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. Mauro Alfieri

      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.

  37. Angelo

    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. Mauro Alfieri

      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.

  38. georges

    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. Mauro Alfieri

      Merci Georges.

  39. Roberto

    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. Mauro Alfieri

      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.

      1. Roberto

        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. Mauro Alfieri

          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.

          1. Roberto

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

            Sono in panne.

            ciao

            Roberto

          2. Mauro Alfieri

            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.

  40. Giuseppe

    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. Mauro Alfieri

      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.

      1. Giuseppe

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

        1. Mauro Alfieri

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

          1. Giuseppe

            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?

          2. Mauro Alfieri

            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”); )

  41. Giuseppe

    Ciao Mauro,
    potresti farmi un piccolo esempio? Ti ringrazio

    1. Mauro Alfieri

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

  42. Angelo

    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. Mauro Alfieri

      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.

      1. Angelo

        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. Mauro Alfieri

          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.

  43. Fabio

    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. Mauro Alfieri

      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.

  44. domenico

    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. Mauro Alfieri

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

  45. domenico

    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. Mauro Alfieri

      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.

  1. Mauro Alfieri » Blog Archive » Tutorial Arduino Ethernet e SD Card | Arduino - Ethernet | Scoop.it

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

  2. Mauro Alfieri » Blog Archive » Arduino, OSC e iPhone

    […] 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. Mauro Alfieri » Blog Archive » Tutorial: Arduino, Ethernet e pagine multipre su SD Card

    […] 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. Tutorial: Arduino, Ethernet e pagine multiple su SD Card » Mauro Alfieri

    […] 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. Arduino Wifi Shield finalmente sullo store ufficiale » Mauro Alfieri

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

  6. GPRS shield: arduino si connette a internet - Mauro Alfieri

    […] 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 una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>