Leitura de micro sd em página web

Boa tarde a todos, estou com um projeto onde eu coleto dados de vários sensores e armazeno em um arquivo .txt utilizando o modulo micro sd.
Foi feito uma página web utilizando o arduino e o modulo wifi esp8266. A minha duvida é a seguinte: como que eu faço a leitura dos dados contidos no arquivo txt e mostre na pagina web?
Segue abaixo o código.

//Bibliotecas
#include <DHT.h>
#include <Wire.h>
#include <SD.h>
#include <Time.h>
#include <DS1307.h>
#include <OneWire.h> 
#include <DallasTemperature.h>
#include <SoftwareSerial.h>
#include <Adafruit_BMP085.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>


//Constantes
SoftwareSerial esp8266(11, 12);
#define DEBUG true
#define pinA0_humSolo A0 // Define pino do sensor de umidade de solo
DHT dht(8, DHT22); // Define pino e tipo do sensor DHT
DS1307 rtc(A2, A3); // Define o pino do RTC
#define ONE_WIRE_BUS 10 //DS18
//inicializa o display
Adafruit_PCD8544 display = Adafruit_PCD8544(2, 3, 5, 6, 7);

//Variaveis
int chk;
//Variaveis para cartao SD
const int CS = 53;
char dataString[8];
char dataString2[7];
char dataString3[7];
char dataString4[7];
char dataString5[7];
char dataString6[7];
File meuArquivo;

Adafruit_BMP085 bmp;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup()
{
  Serial.begin(9600);
  esp8266.begin(115200);
 
  sendData("AT+RST\r\n", 2000, DEBUG); // rst
  // Conecta a rede wireless
  sendData("AT+CWJAP=\"COPELBEL99\",\"picapausemcasa\"r\n",10000,DEBUG);
  delay(3000);
  sendData("AT+CWMODE=3\r\n", 1000, DEBUG);
  // Mostra o endereco IP
  sendData("AT+CIFSR\r\n", 1000, DEBUG);
  // Configura para multiplas conexoes
  sendData("AT+CIPMUX=1\r\n", 1000, DEBUG);
  // Inicia o web server na porta 80
  sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG);

  
    // Informacoes iniciais no display
  display.begin();
  // Ajusta o contraste do display
  display.setContrast(58);
  // Apaga o buffer e o display
  display.clearDisplay();
  // Define tamanho do texto e cor
  display.setTextSize(1);
  display.setTextColor(BLACK);
  // Retangulo temperatura
  display.drawRoundRect(0,0, 44,24, 3, 2);
  // Texto inicial temperatura
  display.setCursor(11,3);  // Seta a posição do cursor
  display.println("TEMP");  
  display.setCursor(5,14);
  display.println("----"); 
  display.setCursor(29,14);
  display.drawCircle(31, 15, 1,1);
  display.println(" C");
  
  // Retangulo umidade
  display.drawRoundRect(45,0, 39 ,24, 3, 2);
  // Texto inicial Umidade
  display.setCursor(52,3);  
  display.println("UMID");
  display.setCursor(50,14); 
  display.println("----"); 
  display.setCursor(75,14);
  display.println("%");  
  
  // Retangulo pressao
  display.drawRoundRect(0,25, 84 ,23, 3, 2);
  // Texto inicial Pressao
  display.setCursor(22,28); 
  display.println("PRESSAO");
  display.setCursor(55,38);
  display.println("hPa");
  display.setCursor(11,38);
  display.println("------"); 
  display.display();
  delay(1000);

  sensors.begin();// DS18 tempSolo
  dht.begin();
  pinMode(pinA0_humSolo, INPUT);
  
//Aciona o relogio
  //rtc.halt(false);
  //rtc.setDOW(MONDAY);      //Define o dia da semana
  //rtc.setTime(17, 56, 0);     //Define o horario
  //rtc.setDate(19, 06, 2018);
  //Definicoes do pino SQW/Out
  rtc.setSQWRate(SQW_RATE_1);
  rtc.enableSQW(true);

  //alerta error sensor
  if (!bmp.begin()) {
     Serial.println("Erro no sensor de pressão atm!");
     while (1) {}
  }
 
   // configura pino de Trigger como saída e inicializa com nivel baixo

  pinMode(CS, OUTPUT);
  
  Serial.begin(9600);
  delay(100);
  
  //Serial.print("Inicializando cartao SD...");
  if (!SD.begin(CS)){
    Serial.println("Falha na Inicializacao!");
    return;
  }
  //Serial.println("Inicializacao terminada");

}

void loop()
{ 
    // Verifica se o ESP8266 esta enviando dados
  if (esp8266.available())
  {
    if (esp8266.find("+IPD,"))
    {
      delay(1500);
      int connectionId = esp8266.read() - 48;

   //Página web
      String webpage = "<head><meta http-equiv=""content-type"" content=""text/html"">";
      webpage += "</head><center><font color='grey'><h1><u>Monitoramento Agricola</u></h1></font></center>";
      webpage += "<BODY>";

      webpage += "</BODY>";

 
      String cipSend = "AT+CIPSEND=";
      cipSend += connectionId;
      cipSend += ",";
      cipSend += webpage.length();
      cipSend += "\r\n";
 
      sendData(cipSend, 1000, DEBUG);
      sendData(webpage, 1000, DEBUG);
 
      String closeCommand = "AT+CIPCLOSE=";
      closeCommand += connectionId; // append connection id
      closeCommand += "\r\n";
 
      sendData(closeCommand, 3000, DEBUG);
    }
  }

  
   //delay(1000);
   float hum;
   float temp;
   float temp2;
   float pres;
   float pres2;
   float humAr;
   float alt;
   float tempM;
   float tempSolo;
   //Mede o tempo de duracao do sinal no pino de leitura(us)
   hum = analogRead(pinA0_humSolo);   
   temp = dht.readTemperature();
   temp2 = bmp.readTemperature();
   pres = bmp.readPressure();
   humAr = dht.readHumidity();
   alt = bmp.readAltitude(101525);
   sensors.requestTemperatures();
   tempSolo = sensors.getTempCByIndex(0);
   
   //calc
   pres2 = pres / 100;
   tempM = (temp + temp2) / 2;
   
  // Atualiza valor da temperatura
  display.fillRect(4,13, 25 , 10, 0);
  display.setCursor(4,14);
  display.println(tempM,1); 
  
  // Atualiza valor da umidade
  display.fillRect(50,13, 23 , 10, 0);
  display.setCursor(50,14);
  display.println(humAr,1); 
  
  // Atualiza valor da pressao
  display.fillRect(4, 37, 46 , 10, 0);
  display.setCursor(11,38);
  display.println(pres2,2); 
   
  display.display();


   //adiciona a ultima leitura a string de gravacao
   dtostrf(hum,6,2,dataString);  
   dtostrf(tempM,5,2,dataString2);
   dtostrf(pres2,5,2,dataString3);
   dtostrf(humAr,5,2,dataString4);   
   dtostrf(alt,5,2,dataString5);
   dtostrf(tempSolo,5,2,dataString6);
   
  if (meuArquivo = SD.open("log.txt",FILE_WRITE)) 
  {/*
    Serial.println("Gravou");
    Serial.print("Hora: ");
    Serial.print(rtc.getTimeStr());
    Serial.print(" Data: ");
    Serial.print(rtc.getDateStr(FORMAT_SHORT));
    Serial.print(" ");
    //Serial.print(rtc.getDOWStr(FORMAT_SHORT));
    Serial.print(" Pres: ");
    Serial.print(pres2);
    Serial.print(" TempAr: ");
    Serial.print(tempM);
    Serial.print(" UmiAr: ");
    Serial.print(humAr);
    Serial.print(" TempSolo: ");
    Serial.print(tempSolo);
    Serial.print(" UmiSolo: ");
    Serial.print(hum);
    Serial.print(" Altitude: ");
    Serial.println(alt);    

    */
    //Escreve no cartao SD por meio do objeto meuArquivo 
    meuArquivo.print(rtc.getTimeStr());
    meuArquivo.print(" ");
    meuArquivo.print(rtc.getDateStr(FORMAT_SHORT));
    meuArquivo.print("|");
    meuArquivo.print(dataString3);
    meuArquivo.print("|");
    meuArquivo.print(dataString2);
    meuArquivo.print("|");
    meuArquivo.print(dataString4);
    meuArquivo.print("|");
    meuArquivo.print(dataString6);
    meuArquivo.print("|");
    meuArquivo.print(dataString);
    meuArquivo.print("|");
    meuArquivo.println(dataString5);
    

    meuArquivo.close();
  } 
  else 
  {
    // se o arquivo nao abrir, mostra msg de erro
    Serial.println("Erro ao abrir log.txt");
  }
  
  delay(500);
}
String sendData(String command, const int timeout, boolean debug)
{
  // Envio dos comandos AT para o modulo
  String response = "";
  esp8266.print(command);
  long int time = millis();
  while ( (time + timeout) > millis())
  {
    while (esp8266.available())
    {
      // The esp has data so display its output to the serial window
      char c = esp8266.read(); // read the next character.
      response += c;
    }
  }
  if (debug)
  {
    Serial.print(response);
  }
  return response;
}