web server su SD card

Sto impazzendo !!!

Ho cercato giorni sul WEB ed alla fine ho deciso di chiedere aiuto!!

Vorrei caricare un piccolo sito su SD CARD ed accedervi tramite ETHERNET SHIELD da Arduino !! Ma non trovo la strada giusta

Grazie per l'aiuto

maxvetro: Ho cercato giorni sul WEB ed alla fine ho deciso di chiedere aiuto!! Vorrei caricare un piccolo sito su SD CARD ed accedervi tramite ETHERNET SHIELD da Arduino !!

Pagina o sito Sito = piu' di una pagina Comincia provando gli esempi dell'IDE

Io ci ho provato l'altro giorno...

http://arduino.cc/forum/index.php/topic,101145.0.html

alla fine ho risolto come leggi nel post. Vedi se ti puo essere utile...

M.

medimax: alla fine ho risolto come leggi nel post. Vedi se ti puo essere utile...

Ho letto sommariamente Mi pare di capire che nel tuo caso inviavi dei comandi Esempi di invio di una pagina se ne trovano e non e' un problema Nell'esempio Energy_control linkato in firma io spedisco una pagina spezzata i 6 7 file Pero' la parola sito per me ha un significato diverso di pagina web

Grazie

Si in effetti ciò che sto tentando di fare e caricare un SITo , pagine e collegamenti e quindi altre pagine

Utilizzare ARDUINO come se fosse uno spazio WEB al quale accedo da un IP dedicato ( con i limiti del HTML naturalmente )

per quanto riguarda il link

http://arduino.cc/forum/index.php/topic,101145.0.html

avevo già dato un occhiata ma a me le librerie TinyWebServer.h non vanno… Uso la rev 1.0 di ARDUINO

Schermata 04-2456032 alle 18.51.20.png

maxvetro: Uso la rev 1.0 di ARDUINO

Io farei un approccio passo passo Fai UNA paginetta WEB nello sketch e cerchi di visualizzare quella ; sfrutta gli esempi Poi ti studi la lettura della SD ; anche qui ci sono gli esempi Infine metti insieme e mandi una pagina complessa letta dalla SD A quel punto sfruttando il Serial-Monitor cerchi di capire cosa arriva su arduino quando richiedi la pagina WEB Capito cosa arriva cerchi di gestirlo per inviare pagine diverse Devi dimenticare di fare tutto e subito

Assolutamente non voglio correre, vorrei imparare !

Ma forse sono partito male con lo spiegare ciò che devo fare :

Ho questo codice caricato su un ARDUINO UNO con ETHERNET SHIELD :

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

//Creao un array di byte per specificare il mac address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//creo un array di byte per specificare l'indirizzo ip
byte ip[] = {192, 168, 1, 127};

char Data_RX;

//creao un oggetto server che rimane in ascolto sulla porta
//specificata
EthernetServer ArduinoServer(80);

void setup()
{
  //inizializza lo shield con il mac e l'ip  
  Ethernet.begin(mac, ip);
  //inizializza l'oggetto server
  ArduinoServer.begin();
  
  Serial.begin(9600);
}

void loop()
{

    EthernetClient pc_client = ArduinoServer.available();

    //controllo se pc_client è true
    if (pc_client != false)
    {
        //controllo continuamente che il client sia connesso
        while (pc_client.connected())
        {
            //Controllo se ci sono byte disponibili per la lettura
            if (pc_client.available())
            {
                //leggo i byte disponibili
                //provenienti dal client
                Data_RX = pc_client.read();

                //Attendo che tutti i byte siano letti
                //quando Data_RX contiene il carattere
                //di nuova line capisco tutti i byte sono
                //stati letti
                if (Data_RX == '\n')
                {
                    //Invio la risposta al client
                    //invio lo status code
                    pc_client.println("HTTP/1.1 200 OK");
                    //imposto il data type
                    pc_client.println("Content-Type: text/html");
                    pc_client.println();
                    //invio codice html
                    pc_client.print("<html><body><h1>Hello world Arduino Web Server</h1></body></html>");
                    //aspetto 1 ms affinche la risposta giunga al browser del client
                    delay(1);
                    //esco dal ciclo while una volta completato l'invio della risposta
                    break;
                }
            }
        }
        //chiudo la connessione
        pc_client.stop();
    }
}

Dal browser vado all’indirizzo 192.168.1.127 e vedo la scritta “HELLO WORLD …”

Cio che vorrei , e sto trovando difficoltà , e di “passare” questa parte di codice

 //Invio la risposta al client
                    //invio lo status code
                    pc_client.println("HTTP/1.1 200 OK");
                    //imposto il data type
                    pc_client.println("Content-Type: text/html");
                    pc_client.println();
                    //invio codice html
                    pc_client.print("<html><body><h1>Hello world Arduino Web Server</h1></body></html>");
                    //aspetto 1 ms affinche la risposta giunga al browser del client
                    delay(1);
                    //esco dal ciclo while una volta completato l'invio della risposta
                    break;

dentro la SD card e leggerlo da li !

:slight_smile:

guarda qui http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1291319677/6 Purtroppo è su IDE 0022-23 devi cambiarlo (non è molto complicato), purtroppo ci vorrà ancora un po' prima di trovare molti esempi di ethernet completi sulla ide 1.0, però questo ti fa capire come impostare un load da sd

ciao

provo subito... grazie 1000

Grazie a tutti…

Posto la soluzione , dovesse servire ad altri

in pratica con il seguente codice , accedendo all’indirizzo 192.168.1.127 è possibile visualizzare la pagina INDEX.HTM presente sulla memoria SD card

Ho provato a creare con adobe dreamweaver un piccolo SITO con collegamenti ipertestuali ed altro , e funziona

Grazie ancora per la pazienza

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

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



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



void loop ()
{
  
  EthernetClient 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.write(htmlFile.read());
            }
            // close the file:
            htmlFile.close();
          }
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

scusate ancora…

il file INDEX.HTM che ho creato risiede nella SD ( in root ) ed anche una cartella “image” ( sempre in root ) dove all’interno c’è un immagine logo.jpg

<title>TITOLO</title>
</head>
<img src="image/logo.jpg" width="854" height="164" alt="" />
</html>

Richiamo l’indirizzo IP , si apre la pagina ma vedo l’immagine con il punto di domanda , credo che il percorso “image/logo.jpg” non sia corretto

Premetto che sul computer funziona ed il percorso è giusto

Consigli ???

Grazie

Hai provato senza cartella? metti il jpg in root

si ... ma nulla da fare

tasto destro sull'immagine che vedo nel BROWSER , apri link in un altra finestra e lui va a cercare :

http://192.168.1.127/image/logo.jpg

non credo che esista questo percorso !!

dovrei capire come è possibile avere accesso ad un file dentro la SD tramite BROWSER ( se possibile !! )

ho provato a far caricare l'immagine da un URL e funziona

grazie

io dentro al body ho messo questo

invia adesso ......... .........

ho un tasto con un jpg che si trova su sd e funziona

Ma che non va!

Questo è il mio file index.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Documento senza titolo</title>
</head>

<body>
<button name="vai" type="submit"><img src="logo.jpg" width="103" height="90" title="invia adesso" border="1" vspace="5" alt="invia adesso" align="middle"><b></b></button> 
</body>
</html>

L’immagine “logo.jpg” l’ho spostata nella root della SD

e questo e ciò che vedo :

ho aperto la porta 88 , se hai voglia è accessibile dal WEB , ecco l'indirizzo :

http://rubianahouse.homepc.it:88/

Grazie

ho provato, vedo solo un tasto con “invia adesso” … non so perchè non la carica, eppure dovrebbe.
Se non hai qualche prob col browser, se dici che cliccando sull’immagine da l’indirizzo di una cartella nonostante non esista sembrerebbe che un cokie se lo sia segnato bene, però posso dire anche una pu…ta :slight_smile:

Nessun problema con il browser , anche xche se l’immagine la carico da un link esterno funziona

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Documento senza titolo</title>
</head>

<body>
<button name="vai1" type="submit"><img src="logo.jpg" width="103" height="90" title="invia adesso" border="1" vspace="5" alt="invia adesso" align="middle"><b></b></button> 
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src="http://cdn1.1stwebdesigner.com/wp-content/uploads/2010/08/Internet_Explorer_9.png" />

</body>
</html>

Se hai voglia ho aggiornato la SD ( rubianahouse.homepc.it:88 )

Solo un dubbio , scusa se te lo chiedo ma e per non creare casini :

Tu hai la SD nel modulo ETHERNET SHIELD e riesci a vedere l’icona logo.jpg con il codice html ?

<button name="vai1" type="submit"><img src="logo.jpg" width="103" height="90" title="invia adesso" border="1" vspace="5" alt="invia adesso" align="middle"><b></b></button>