Go Down

Topic: web server su SD card (Read 7949 times) previous topic - next topic

maxvetro

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

brunol949


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
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

medimax

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.

brunol949


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
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

maxvetro

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 )

maxvetro

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


brunol949


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
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

maxvetro

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 :

Code: [Select]


#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

Code: [Select]

//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 !

:)

pablos

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
no comment

maxvetro

provo subito... grazie 1000

maxvetro

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

Code: [Select]

#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();
  }
}

maxvetro

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

Code: [Select]

<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

pablos

Hai provato senza cartella? metti il jpg in root
no comment

maxvetro


maxvetro

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

Go Up