Go Down

Topic: web server su SD card (Read 7 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