Go Down

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

pablos

#30
Apr 15, 2012, 01:21 pm Last Edit: Apr 15, 2012, 01:39 pm by pablos Reason: 1
Ho modificato il prog origininale del tinyweb questo ti permette di caricare su browser qualsiasi file e qualsiasi dimensione
presente su sd, sul serial monitor vedi i file che la pag htm sta caricando

Code: [Select]

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

const int SD_CS = 4;
const int ETHER_CS = 10;
byte ip[] = { 192, 168, 2, 177 };
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
boolean file_handler(TinyWebServer& web_server);
boolean index_handler(TinyWebServer& web_server);

TinyWebServer::PathHandler handlers[] = {
  {"/", TinyWebServer::GET, &index_handler },
  {"/" "*", TinyWebServer::GET, &file_handler },
  {NULL},
};

const char* headers[] = {"Content-Length",NULL};
TinyWebServer web = TinyWebServer(handlers, headers);

boolean has_filesystem = true;
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

void send_file_name(TinyWebServer& web_server, const char* filename) {
  if (!filename) {
    web_server.send_error_code(404);
    web_server << F("Could not parse URL");
  } else {
    TinyWebServer::MimeType mime_type = TinyWebServer::get_mime_type_from_filename(filename);
    web_server.send_error_code(200);
    web_server.send_content_type(mime_type);
    web_server.end_headers();
    if (file.open(&root, filename, O_READ))
    {
      Serial << F("Read file "); Serial.println(filename);
      web_server.send_file(file);
      file.close();
    } else {
      web_server << F("Could not find file: ") << filename << "\n";
    }
  }
}

boolean file_handler(TinyWebServer& web_server) {
  char* filename = TinyWebServer::get_file_from_path(web_server.get_path());
  send_file_name(web_server, filename);
  free(filename);
  return true;
}

boolean index_handler(TinyWebServer& web_server) {
  send_file_name(web_server, "INDEX.HTM");
  return true;
}

void setup() {
  Serial.begin(9600);
  pinMode(SS_PIN, OUTPUT); // set the SS pin as an output                               
  digitalWrite(SS_PIN, HIGH); // and ensure SS is high
  pinMode(ETHER_CS, OUTPUT); // Set the CS pin as an output
  digitalWrite(ETHER_CS, HIGH); // Turn off the W5100 chip! (wait for                             
  pinMode(SD_CS, OUTPUT);       // Set the SDcard CS pin as an output
  digitalWrite(SD_CS, HIGH); // Turn off the SD card! (wait for
                               
  card.init(SPI_FULL_SPEED, SD_CS);
  volume.init(&card); 
  root.openRoot(&volume);
  Ethernet.begin(mac, ip);
  web.begin();
  Serial << F("Ready to accept HTTP requests.\n");
}

void loop()

    web.process();
}
no comment

brunol949


Solo una domandina ( non riesco ad attendere fino a questa sera ) : posso convertire qualunque immagine in Base64 ? o ci sono limiti di grandezza e formato ?

Per la conversione non credo
Tieni presente che poi l'immagine sara' parte integrante del file html
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

brunol949


Ho modificato il prog origininale del tinyweb
Code: [Select]

#include <Flash.h>


Ma la libreria flash a cosa serve ?
Ovviamente se l'intenzione e' quella di mettere tutto su SD

Grazie
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

pablos

Quote

Ma la libreria flash a cosa serve ?
Ovviamente se l'intenzione e' quella di mettere tutto su SD

Grazie


la flash.h gestisce le stringhe e gli oparatori

    char c = (*this);
    if (!c) break;
    stream.print(c); // print in char form

no comment

brunol949

#34
Apr 15, 2012, 08:16 pm Last Edit: Apr 15, 2012, 08:18 pm by brunol949 Reason: 1

la flash.h gestisce le stringhe e gli operatori

    char c = (*this);
    if (!c) break;
    stream.print(c); // print in char form

Ma un uso intensivo non portera' alla distruzione della flash ??
Sempreche' serva a scrivere in flash e non sia un nome di comodo
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

maxvetro

Scusate ma ho avuto un impiccio con l'ivi o delle risposte..


PABLOS sto testando  il tinyweb da te modificato

Code: [Select]

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

const int SD_CS = 4;
const int ETHER_CS = 10;
byte ip[] = { 192, 168, 2, 177 };
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
boolean file_handler(TinyWebServer& web_server);
boolean index_handler(TinyWebServer& web_server);

TinyWebServer::PathHandler handlers[] = {
  {"/", TinyWebServer::GET, &index_handler },
  {"/" "*", TinyWebServer::GET, &file_handler },
  {NULL},
};

const char* headers[] = {"Content-Length",NULL};
TinyWebServer web = TinyWebServer(handlers, headers);

boolean has_filesystem = true;
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

void send_file_name(TinyWebServer& web_server, const char* filename) {
  if (!filename) {
    web_server.send_error_code(404);
    web_server << F("Could not parse URL");
  } else {
    TinyWebServer::MimeType mime_type = TinyWebServer::get_mime_type_from_filename(filename);
    web_server.send_error_code(200);
    web_server.send_content_type(mime_type);
    web_server.end_headers();
    if (file.open(&root, filename, O_READ))
    {
      Serial << F("Read file "); Serial.println(filename);
      web_server.send_file(file);
      file.close();
    } else {
      web_server << F("Could not find file: ") << filename << "\n";
    }
  }
}

boolean file_handler(TinyWebServer& web_server) {
  char* filename = TinyWebServer::get_file_from_path(web_server.get_path());
  send_file_name(web_server, filename);
  free(filename);
  return true;
}

boolean index_handler(TinyWebServer& web_server) {
  send_file_name(web_server, "INDEX.HTM");
  return true;
}

void setup() {
  Serial.begin(9600);
  pinMode(SS_PIN, OUTPUT); // set the SS pin as an output                               
  digitalWrite(SS_PIN, HIGH); // and ensure SS is high
  pinMode(ETHER_CS, OUTPUT); // Set the CS pin as an output
  digitalWrite(ETHER_CS, HIGH); // Turn off the W5100 chip! (wait for                             
  pinMode(SD_CS, OUTPUT);       // Set the SDcard CS pin as an output
  digitalWrite(SD_CS, HIGH); // Turn off the SD card! (wait for
                               
  card.init(SPI_FULL_SPEED, SD_CS);
  volume.init(&card); 
  root.openRoot(&volume);
  Ethernet.begin(mac, ip);
  web.begin();
  Serial << F("Ready to accept HTTP requests.\n");
}

void loop()

    web.process();
}


e sembra essere tutto funzionante , ora continuo a giocare ...

grazie

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy