Como enviar cadena de caracteres por servidor web a arduino. Ethernet Shield +SD

Buen dìa chicos !

Hoy vengo con una nueva interrogante, he buscado y buscado y no doy con la solución.

Tengo un programa capaz de ir guardando un archivo en mi SD de la ethernet shield segun la fecha entregada por un reloj rtc En formato año-mes-dia (ej: 16-10-11.txt)

Por otro lado tengo un servidor web montado en arduino capaz de mostrar archivos ya almacenados en la tarjeta SD, pero de una manera poco práctica.

Lo que busco es poder ingresar una fecha específica a través del navegador conectado a la misma red de arduino para que éste sea capaz de mostrarme el archivo previamente guardado.

Algo así como esto:

o quizás, menos complejo aun, poder enviar una cadena de caracteres con el mismo formato de fecha y que arduino sea capaz de interpretar lo que le estoy enviando. Ya sea en una caja de texto como esta

o tan solo escribiendo el archivo en la barra de búsqueda como en archivo adjunto .

De antemano, muchas gracias

Evidentemente necesitarás modificar el código de tu programa servidor de archivos, que de por sí está bastante próximo a lo que quieres obtener. Sin embargo no has puesto tu código, así que no disponemos de punto de partida.

el código que utilizo es muy similar aldel ejemplo de servidor web, y es el siguiente

/*--------------------------------------------------------------
  Program:      eth_websrv_SD_image

  Description:  Arduino web server that serves up a basic web
                page that displays an image.

  Hardware:     Arduino Uno and official Arduino Ethernet
                shield. Should work with other Arduinos and
                compatible Ethernet shields.
                2Gb micro SD card formatted FAT16

  Software:     Developed using Arduino 1.0.5 software
                Should be compatible with Arduino 1.0 +

                Requires index.htm, page2.htm and pic.jpg to be
                on the micro SD card in the Ethernet shield
                micro SD card socket.

  References:   - WebServer example by David A. Mellis and
                  modified by Tom Igoe
                - SD card examples by David A. Mellis and
                  Tom Igoe
                - Ethernet library documentation:
                  http://arduino.cc/en/Reference/Ethernet
                - SD Card library documentation:
                  http://arduino.cc/en/Reference/SD

  Date:         7 March 2013
  Modified:     17 June 2013

  Author:       W.A. Smith, http://startingelectronics.org
  --------------------------------------------------------------*/

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

// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ   14

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 20); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0;              // index into HTTP_req buffer


void setup()
{
  // disable Ethernet chip
  pinMode(10, OUTPUT);
  digitalWrite(10, HIGH);

  Serial.begin(9600);       // for debugging

  // initialize SD card
  Serial.println("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println("ERROR - SD card initialization failed!");
    return;    // init failed
  }
  Serial.println("SUCCESS - SD card initialized.");
  // check for index.htm file
  if (!SD.exists("index.htm")) {
    Serial.println("ERROR - Can't find index.htm file!");
    return;  // can't find index file
  }
  Serial.println("SUCCESS - Found index.htm file.");

  Ethernet.begin(mac, ip);  // initialize Ethernet device
  server.begin();           // start to listen for clients
}

void loop()
{
  EthernetClient client = server.available();  // try to get client

  if (client) {  // got client?
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {   // client data available to read
        char c = client.read(); // read 1 byte (character) from client
        // buffer first part of HTTP request in HTTP_req array (string)
        // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
        if (req_index < (REQ_BUF_SZ - 1)) {
          HTTP_req[req_index] = c;          // save HTTP request character
          req_index++;
        }


        
        // print HTTP request character to serial monitor

        Serial.print(c);
        // last line of client request is blank and ends with \n
        // respond to client only after last line received
        if (c == '\n' && currentLineIsBlank) {
          // open requested web page file
;
Serial.println("****");
Serial.println(HTTP_req);
Serial.println("****");



//Serial.println("----");

//Serial.println("----");

//Serial.println("++++");

//Serial.println("++++");





          if (StrContains(HTTP_req, "GET / ")
              || StrContains(HTTP_req, "GET /index.htm")) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println("Connnection: close");
            client.println();
            webFile = SD.open("index.htm");        // open web page file
          }
          else if (StrContains(HTTP_req, "GET /hola.txt")) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text");
            client.println("Connnection: close");
            client.println();
            webFile = SD.open("hola.txt");        // open web page file
          }
          else if (StrContains(HTTP_req, "GET /pic.jpg")) {
            webFile = SD.open("pic.jpg");
            if (webFile) {
              client.println("HTTP/1.1 200 OK");
              client.println();
            }
          }
          if (webFile) {
            while (webFile.available()) {
              client.write(webFile.read()); // send web page to client
            }
            webFile.close();
          }
          // reset buffer index and all buffer elements to 0
          req_index = 0;
          StrClear(HTTP_req, REQ_BUF_SZ);
          break;
        }
        // every line of text received from the client ends with \r\n
        if (c == '\n') {
          // last character on line of received text
          // starting new line with next character read
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // a text character was received from client
          currentLineIsBlank = false;
        }
      } // end if (client.available())
    } // end while (client.connected())
    delay(1);      // give the web browser time to receive the data
    client.stop(); // close the connection
  } // end if (client)
}

// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
  for (int i = 0; i < length; i++) {
    str[i] = 0;
  }
}

// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
char StrContains(char *str, char *sfind)
{
  char found = 0;
  char index = 0;
  char len;

  len = strlen(str);

  if (strlen(sfind) > len) {
    return 0;
  }
  while (index < len) {
    if (str[index] == sfind[found]) {
      found++;
      if (strlen(sfind) == found) {
        return 1;
      }
    }
    else {
      found = 0;
    }
    index++;
  }

  return 0;
}

En donde en el fragmento presentado a continuación, hace la comparación de los archivos que pido v/s los que tengo en la SD, y procede a abrirlo o no.

          else if (StrContains(HTTP_req, "GET /hola.txt")) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text");
            client.println("Connnection: close");
            client.println();
            webFile = SD.open("hola.txt");        // open web page file

El problema de ello, es que tengo cientos de archivos con fechas distintas, y no encuentro práctico tener cientos de “if” para poder abrir el archivo que necesito. Es por ello que buscaba la posibilidad de poder poner un tipo calendario o una caja de texto que permita enviarle la fecha del archivo que necesito.

Gracias por su pronta respuesta. ;D

Explora por aca a ver si sirve Datepicker